iOS で Firebase SQL Connect を使ってみる

このクイックスタートでは、小さなサンプル データベースを作成してデプロイし、 iOS アプリからアクセスします。

前提条件

このクイックスタートを完了するには、次のものが必要です。

  • 次のツールがインストールされた環境:
    • 新しいバージョンの Xcode
    • Firebase CLI。NPM がインストールされている場合は、次を実行します。
      npm install -g firebase-tools@latest
      それ以外の場合は、インストール手順のドキュメントをご覧ください。
  • Google アカウントを所有している。

チュートリアル

チュートリアル

1. 新しい Xcode プロジェクトを作成する

Xcode で、[App] テンプレートを使用して新しいプロジェクトを作成します。

プロジェクトに「Quickstart」という名前を付け、バンドル ID を 「com.example.Quickstart」にします。

Xcode の [新しいプロジェクト] ダイアログ

~/qs-ios などの空のフォルダにプロジェクトを作成します。Xcode は、プロジェクト ファイルを含むフォルダ ~/qs-ios/Quickstart を作成します。

2. Firebase プロジェクトを初期化する

Xcode プロジェクトのプロジェクト ディレクトリに移動し、そのディレクトリで Firebase プロジェクトを初期化します。

cd ~/qs-ios
firebase login --reauth
firebase init dataconnect

プロンプトが表示されたら、次のオプションを選択します。

  • 新しい Firebase プロジェクトを作成します。
  • Gemini でスキーマを作成しません(このチュートリアルでは、事前構築済みの サンプル スキーマを使用します)。
  • 無料トライアルの Cloud SQL インスタンスとデータベースをプロビジョニングします。

他のすべてのプロンプトではデフォルト値を受け入れます。

次に、Firebase プロジェクトに iOS アプリを登録します。

firebase apps:create --bundle-id com.example.Quickstart ios ios-quickstart

App Store ID を指定するよう求められたら、Enter キーを押してこの手順をスキップします。

firebase apps:sdkconfig ios -o Quickstart/GoogleService-Info.plist

Xcode で、[File > Add Files to "Quickstart"] を選択し、 GoogleService-Info.plist ファイルを選択します。

3. GraphQL の定義例を確認する

SQL Connect では、GraphQL を使用してすべてのデータベース スキーマとオペレーションを定義します。プロジェクトを初期化すると、Firebase CLI は、作業を開始するためのサンプル定義を作成します。

dataconnect/schema/schema.gql(抜粋)
type Movie @table {
  title: String!
  imageUrl: String!
  genre: String
}

type MovieMetadata @table {
  movie: Movie! @unique
  rating: Float
  releaseYear: Int
  description: String
}
dataconnect/example/queries.gql(抜粋)
query ListMovies @auth(level: PUBLIC) {
  movies {
    id
    title
    imageUrl
    genre
  }
}

4. スキーマとオペレーションをデプロイする

データベース スキーマ、クエリ、ミューテーションを変更した場合は、データベースに変更を反映させるために デプロイする必要があります。

firebase deploy --only dataconnect

5. サンプルデータでデータベースにシードを設定する

このシードデータを使用すると、サンプルアプリをテストするときに確認できます。注 このステップでは、管理タスクで許可されている任意の GraphQL を実行できます。

firebase dataconnect:execute dataconnect/seed_data.gql

6. iOS クライアント SDK を生成する

このコマンドは、GraphQL の定義を使用して、データベース専用の iOS クライアント SDK を生成します。このライブラリは、クライアント アプリですべてのデータベース オペレーションを実行するために使用します。

`connector.yaml` に定義を追加することで、Android 用の Kotlin、ウェブ用の JavaScript、Flutter など、複数のプラットフォーム用のライブラリを生成できます。

firebase dataconnect:sdk:generate
自動生成された iOS SDK(抜粋)
public class ListMoviesQuery {

  // ...

  @MainActor
  public func execute(
    fetchPolicy: QueryFetchPolicy = .preferCache,
  ) async throws -> OperationResult<ListMoviesQuery.Data> {
    var variables = ListMoviesQuery.Variables()

    let ref = dataConnect.query(
      name: "ListMovies", variables: variables, resultsDataType: ListMoviesQuery.Data.self,
      publisher: .observableMacro)

    let refCast = ref as! QueryRefObservation<ListMoviesQuery.Data, ListMoviesQuery.Variables>
    return try await refCast.execute(fetchPolicy: fetchPolicy)
  }
}

7. Xcode プロジェクトに Firebase の依存関係を追加する

Swift Package Manager を使用して、生成されたライブラリをプロジェクトに追加します。生成されたライブラリを追加すると、Firebase Core ライブラリと Firebase SQL Connect ライブラリが推移的に含まれます。

Xcode ナビゲーション バーで、 [File] > [Add Package Dependencies] > [Add Local] を選択し、生成されたライブラリを含むフォルダ FirebaseDataConnectGenerated/DataConnectGenerated/ を選択します。正しいフォルダ にはPackage.swiftという名前のファイルが含まれています。

8. サンプル iOS クライアントを作成する

Quickstart/QuickstartApp.swift の内容を、このシンプルな iOS アプリに置き換えます。

アプリは、生成された SDK の関数を使用して、必要なデータベース アクセスを完了します。

import SwiftUI
import FirebaseCore
import FirebaseDataConnect
import DataConnectGenerated

@main
struct QuickstartApp: App {
  init() {
    FirebaseApp.configure()
  }
  var body: some Scene {
    WindowGroup {
      ListMovieView()
    }
  }
}

struct ListMovieView: View {
  @State private var moviesData: ListMoviesQuery.Data?

  var body: some View {
    VStack {
      ForEach(moviesData?.movies ?? []) { movie in
        Text(movie.title)
      }
    }
    .task {
      let result = try? await DataConnect.exampleConnector
          .listMoviesQuery.execute()
      self.moviesData = result?.data
    }
  }
}

9. アプリを試す

Xcode からサンプルアプリを実行して、動作を確認します。

次のステップ

SQL Connect VS Code 拡張機能を試す

SQL Connect で開発する場合は、 SQL Connect VS Code 拡張機能を使用することを強くおすすめします。 Visual Studio Code をプライマリ開発 環境として使用していない場合でも、この拡張機能には、スキーマとオペレーション 開発をより便利にするいくつかの機能があります。

  • GraphQL 言語サーバー。 SQL Connect に固有の構文チェックとオートコンプリート候補を提供します。
  • コードに沿った CodeLens ボタン。スキーマ 定義ファイルからデータの読み取りと書き込みを行い、オペレーション定義からクエリとミューテーションを実行できます。
  • 生成された SDK を GraphQL の定義と自動的に同期します。
  • ローカル エミュレータの設定を簡素化します。
  • 本番環境へのデプロイを簡素化します。

ローカル開発に SQL Connect エミュレータを使用する

このチュートリアルでは、SQL Connect スキーマとオペレーションを本番環境に直接デプロイする方法について説明しましたが、アプリを積極的に開発している間は、本番環境データベースを変更しないことをおすすめします。代わりに、 SQL Connect エミュレータ を設定し、本番環境ではなくエミュレータに対して開発作業を行います。エミュレータは、ライブ PostgreSQL インスタンスと同様に動作するローカル PGlite インスタンスを Cloud SQL に設定します。

アプリのスキーマと オペレーションを作成する方法を学ぶ

SQL Connect でアプリを開発する場合、スキーマとオペレーションの設計 は、最初かつ最も重要な開発タスクの 1 つです。

  • コンソールのFirebase Gemini は、アプリの自然言語の説明からSQL Connect スキーマを生成できる AI ツールです。このツールを使用すると、特にリレーショナル データベースを初めて使用する場合に、非常に迅速に作業を開始できます。
  • または、GraphQL を使用してデータベース スキーマ、クエリ、ミューテーション を直接作成することもできます。まず、 設計SQL Connectスキーマのガイダンスから始め、 次のページに進んでオペレーションの作成方法を学習します。

SQL Connect からリアルタイム更新を取得する方法を学ぶ

SQL Connect を使用すると、変化するデータに リアルタイムで 反応するクライアント アプリケーションを作成できます。SQL Connect からリアルタイム更新を取得するをご覧ください。