Firebase Data Connect を使ってみる

このクイックスタートの学習内容は次のとおりです。

  • Firebase Data Connect を Firebase プロジェクトに追加します。
  • 本番環境インスタンスと連携するように、Visual Studio Code 拡張機能を含む開発環境をセットアップします。
  • その後、次の方法を説明します。
    • メールアプリのサンプルを使用してスキーマを作成します。
    • スキーマのクエリとミューテーションを定義します。
    • 自動生成された SDK を使用して、クライアントからこれらのクエリとミューテーションを呼び出します。
    • 最終プロトタイプを本番環境にデプロイする

前提条件

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

プロジェクトにデータ接続を追加してデータソースを作成する

  1. まだ作成していない場合は、Firebase プロジェクトを作成します。
    1. Firebase コンソールで [プロジェクトを追加] をクリックし、画面上の手順に沿って操作します。
  2. プロジェクトを Blaze プランにアップグレードします。これにより、Cloud SQL for PostgreSQL インスタンスを作成できます。

  3. Firebase コンソールの [Data Connect] セクションに移動し、プロダクトの設定ワークフローに従います。

  4. CloudSQL for PostgreSQL データベースのロケーションを選択します。

  5. 後で確認できるように、プロジェクト、サービス、データベースの名前と ID をメモします。

  6. 残りの設定フローに沿って操作し、[完了] をクリックします。

開発環境を選択して設定する

データ接続を開始するには、まず Visual Studio Code でアプリのプロトタイピングを行います。

必要に応じて、Data Connect エミュレータを使用してローカル開発用にローカル PostgreSQL データベースをインストールできます。この設定については、このクイックスタート ガイドの最後で説明します。

Data Connect は、プロトタイピング用に 2 つの開発エクスペリエンスをサポートしています。

  • ウェブまたは Kotlin Android のデベロッパーは、Cloud SQL for PostgreSQL インスタンスに接続しながら、スキーマとオペレーションのプロトタイプをローカルで作成できます。また、必要に応じて PostgreSQL をローカルで実行することもできます。
  • ウェブ デベロッパーの場合、IDX を使用して IDX ワークスペースでプロトタイプを作成できます。これには、PostgreSQL、Data Connect エミュレータを使用した VS Code 拡張機能、クイックスタート コードを含む事前構成済みの IDX テンプレートを使用できます。

VS Code 開発

IDX を使用せずにローカルで開発する場合は、Firebase VS Code 拡張機能を設定すると、ウェブ用、Android 用 Kotlin、近日提供予定の iOS 用の SDK 生成を使用して、開発を迅速に繰り返すことができます。

  1. ローカル プロジェクト用の新しいディレクトリを作成します。
  2. 新しいディレクトリで VS Code を開きます。
  3. VSIX パッケージとしてバンドルされた拡張機能を Firebase Storage からダウンロードします。
  4. VS Code の [View] メニューから [Extensions] を選択します。
  5. [拡張機能] パネルのタイトルバーで、メニュー アイコン more_horiz をクリックし、VSIX からインストールする...の手順を行います。

IDX 開発

IDX はウェブアプリ開発用に最適化された環境です。Kotlin Android デベロッパーは、[VS Code 開発] タブの手順を実施してください。

Data Connect IDX テンプレートを設定するには:

  1. Project IDX のサイトからテンプレートにアクセスします。
  2. セットアップ フローに沿って操作します。

ローカル プロジェクトを設定する

通常の手順に沿って CLI をインストールします。

次に、Firebase Data Connect テストを有効にします。

firebase experiments:enable dataconnect

ローカル プロジェクトを設定するため、プロジェクト ディレクトリを初期化し、コードの生成に必要ないくつかの構成ファイルを更新します。

プロジェクト ディレクトリを設定する

プロジェクト ディレクトリを初期化します。

Firebase Extensions の設定

VS Code の左側のパネルで Firebase アイコンをクリックして、Firebase VS Code 拡張機能の UI を開きます。

Firebase Extensions UI で次の操作を行います。

  1. ログインしていることを確認します。
  2. Firebase コンソールで、データベースのプロビジョニングを含む Data Connect 設定フローが完了していることを確認します。
  3. [Run firebase init] ボタンをクリックします。
  4. VS Code の下部パネルの [Terminal] タブでプロンプトを確認します。
  5. このディレクトリで使用する機能として [Data Connect] を選択します。
  6. プロンプトが表示されたら、コンソールで前に作成した Data Connect プロジェクトのプロジェクト ID、サービス ID、データベース ID を入力します。

端末のセットアップ

  1. 必要に応じて、firebase login を使用してログインします。
  2. Firebase コンソールで、データベースのプロビジョニングを含む Data Connect 設定フローが完了していることを確認します。
  3. 画面上の指示に沿って、firebase init を実行してディレクトリを Firebase プロジェクトとして初期化します。
  4. このディレクトリで使用する機能として [Data Connect] を選択します。
  5. プロンプトが表示されたら、コンソールで前に作成した Data Connect プロジェクトのプロジェクト ID、サービス ID、データベース ID を入力します。

どちらのフローでも、firebase.json ファイルと .firebaserc ファイル、重要な dataconnect.yaml ファイルと connector.yaml ファイルを含む dataconnect サブディレクトリがローカル作業ディレクトリに作成されます。

SDK コードの生成場所を設定する

スキーマの編集中に、Data Connect が SDK コードを自動的に生成します。

SDK の生成場所を指定するには、dataconnect/connector/connector.yaml で初期コネクタのファイルを更新します。

connectorId: "my-connector"
authMode: "PUBLIC"
generate:
  javascriptSdk:
    outputDir: "../../js-email-generated"
    package: "@email-manager/emails"
    packageJsonDir: "../../"
  kotlinSdk:
    outputDir: "../kotlin-email-generated"
    package: com.myemailapplication

データ接続ツールキットの使い方

Data Connect Toolkit は、スキーマ開発、クエリとミューテーションの管理を Visual Studio Code から直接行うことができる Firebase VS Code 拡張機能のコンポーネントです。

ツールキットの機能を確認するには:

  1. まだ開いていない場合は、VS Code で Firebase プロジェクト ディレクトリを開きます。
  2. VS Code の左側のパネルで Firebase アイコンをクリックして、Firebase VS Code 拡張機能の UI を開きます。

開発作業全体を通して、ツールキットを使用すると、本番環境リソースだけでなく、ローカル環境ともやり取りできます。このクイックスタートでは、本番環境を操作します。

IDX の Data Connect 用 VS Code 拡張機能

拡張機能の UI には次のような便利な機能があります。

VS Code のプライマリ サイドバーで次の操作を行います。

  • [構成] パネル。Google にログインして Firebase プロジェクトを選択できます。
  • [Firebase Data Connect] パネル。組み込みのエミュレータを制御し、本番環境にリソースをデプロイできます。
  • [FDC Explorer] パネル。スキーマに基づいて自動生成された暗黙的なクエリとミューテーションが一覧表示されます。
VS Code の下のパネルで、次の操作を行います。

  • [Data Connect Execution] タブ。リクエストでデータの受け渡し、認証の模倣、結果の表示を行うためのツールがあります。

アプリの開発を開始する前に、拡張機能のいくつかの機能を確認してください。

カスタム CodeLens を試す schema.gqlqueries.gqlmutations.gql ファイル内のリソースを扱う場合、完全な構文コードブロックを記述すると、宣言されたテーブルとオペレーションに対して実行できるアクションがカスタム CodeLens によって表示されます。
  • テーブルの場合、CodeLens を使用してミューテーションを生成し、バックエンド データベースにデータを追加できます。
  • クエリとミューテーションについては、CodeLens を使用して、ローカルまたは本番環境のリソースに対してオペレーションを実行できます。
リクエストの認証レベルを設定する 下のパネルの [Data Connect Execution] パネルの [構成] タブでは、オペレーションのシミュレートされた認証レベルを選択できます。
クエリとミューテーションに変数を入力する 同じ [Configuration] タブで、オペレーションのペイロードを入力できます。
履歴、レスポンス、エラーを検査する また、[Configuration] タブでは、[History] タブと [Results] タブでデバッグ情報を確認できます。

Data Connect のスキーマとクエリを作成する

これで設定は完了です。これで、Data Connect を使用して開発を開始できます。

GraphQL を使用してユーザーとメールをモデル化します。ソースを更新する場所:

  • /dataconnect/schema/schema.gql
  • /dataconnect/connector/queries.gql

スキーマの開発を開始する

Firebase プロジェクト ディレクトリで、dataconnect フォルダをメモします。ここでは、GraphQL を使用して Cloud SQL データベースのデータモデルを定義します。

/dataconnect/schema/schema.gql ファイルで、ユーザーとメールを含むスキーマの定義を開始します。

ユーザー

Data Connect では、GraphQL フィールドは列にマッピングされます。ユーザーは uidname、メール address を持っています。Data Connect は、いくつかのプリミティブ データ型(StringDate)を認識します。

次のスニペットをコピーするか、ファイル内の対応する行をコメント化解除します。

# File `/dataconnect/schema/schema.gql`

type User @table(key: "uid") {
   uid: String!
   name: String!
   address: String!
}

デフォルトでは、UUID id キーが指定されていない場合は、Firebase Data Connect によって UUID キーが追加されます。ただし、この場合は、@table(key: "uid") ディレクティブを使用して uid を主キーにできます。

メール

ユーザーができるようになったので、メールをモデル化できます。ここでは、メールデータの一般的なフィールド(または列)を追加できます。ここでは、Data Connect で管理できるため、主キーの追加を省略しています。

# File `/dataconnect/schema/schema.gql`

type Email @table {
   subject: String!
   date: Date!
   text: String!
   from: User!
}

from フィールドは User 型にマッピングされています。Data Connect は、これが EmailUser の間の関係であると認識し、この関係を管理します。

スキーマを本番環境にデプロイする

Firebase VS Code 拡張機能を使用して本番環境のデータベースを操作するため、続行する前にスキーマをデプロイする必要があります。

  1. Firebase VS Code 拡張機能を使用してデプロイできます。
    • 拡張機能 UI の [Firebase Data Connect] パネルで [Deploy] をクリックします。
  2. Firebase CLI を使用することもできます。

    firebase deploy
    
  3. 拡張機能または CLI のフローで、スキーマの変更を確認し、破壊的な変更を承認する必要があります。次の操作を行うよう求められます。

    • firebase dataconnect:sql:diff を使用してスキーマの変更を確認する
    • 変更が完了したら、firebase dataconnect:sql:migrate で開始されたフローを使用して変更を適用します。

生成されたスキーマ拡張を確認する

メールスキーマを編集すると、スキーマ拡張、クエリ、ミューテーション、フィルタ、テーブル リレーションが自動的に生成されます。生成されたコードは、次の 2 つの方法で表示できます。

  • Firebase 拡張機能 UI の [FDC Explorer] パネルで、生成された暗黙的なクエリとミューテーションのリストを確認できます。
  • ローカルで生成されたすべてのコードは、.dataconnect/schema ディレクトリのソースで確認できます。

ミューテーションを実行してテーブルにデータを追加する

/dataconnect/schema/schema.gql の GraphQL 型の上に CodeLens のボタンが表示されます。

開発時のクエリとミューテーション

これらの CodeLens ボタンに関連する操作は、すばやく便利なアクションです。この例では、テーブルにデータを追加します。Data Connect は、GraphQL ミューテーションを使用して、データベースに対する操作方法と操作方法を説明します。このボタンを使用すると、開発時オペレーションを作成して、データを迅速にシーディングできます。

スキーマを本番環境にデプロイしたら、[実行(本番環境)] ボタンを使用して、バックエンドでこれらのアクションを実行できます。

メールを一覧表示するクエリを作成します

次はクエリです開発者にとって、GraphQL クエリではなく SQL クエリを記述することに慣れているため、最初は少し違うように感じるかもしれません。ただし、GraphQL は未加工の SQL よりもはるかに簡潔でタイプセーフです。VS Code の拡張機能により 開発も簡単になります

/dataconnect/connector/queries.gql ファイルの編集を開始します。すべてのメールを取得するには、次のようなクエリを使用します。

# File `/dataconnect/connector/queries.gql`

query listEmails @auth(level: PUBLIC) {
  emails {
    id, subject, text, date
    from {
      name
    }
  }
}

ここでの非常に便利な機能は、データベースの関係をグラフのように扱う機能です。メールにはユーザーを参照する from フィールドがあるため、このフィールドにネストすると、ユーザーに関する情報を取得できます。

@auth ディレクティブ

この例では、@auth ディレクティブを最大限に活用していませんが、コンセプトは非常に強力です。これにより、データベースに対するオペレーションの承認ポリシーを決定します。

このクエリはかなり単純です。多対多のリレーションを持つ複雑な結合を実行すると、Data Connect の優れた機能が最大限に発揮されます。これについては、ツールやドキュメントを見ながら詳しく学習します。

クエリをテストする

これでクエリが作成されました。クライアント コードに統合する前に、クエリが機能するかどうかを確認します。データ接続のデベロッパー エクスペリエンスには、[Data Connect Execution] パネルでクエリ結果の反復処理とテストを迅速に行う機能もあります。

このクエリに必要な引数を指定して、クエリ名の上にある [CodeLens] ボタンをクリックします。これにより、クエリが実行され、結果が表示され、期待どおりに動作していることを確認します。

クライアント SDK コードとクライアント アプリからデータをクエリする

開発サイクルを完了するには、このクエリをクライアント コードに統合します。

Data Connect サービスからクエリを呼び出してレスポンスを処理する方法を示すクライアントを作成できます。

  1. 以前に connector.yaml ファイルに指定した場所で、自動生成されたソースを見つけます。
  2. Firebase をプロジェクトに追加し、アプリを登録して、関連する Firebase Core SDK をインストールします。

  3. IDX を使用していない場合は、クライアントを設定して、コマンドラインから呼び出すことができます。

JavaScript

ソースファイル clientTest.js を作成し、次のコードをコピーします。

const { initializeApp } = require("firebase/app");
const {
  connectDataConnectEmulator,
  getDataConnect,
} = require("firebase/data-connect");
const { listEmails, connectorConfig } = require("@email-manager/emails");

// TODO: Replace the following with your app's Firebase project configuration
const firebaseConfig = {
  //...
};

const app = initializeApp(firebaseConfig);
const dc = getDataConnect(app, connectorConfig);

// Remove the following line to connect directly to production
connectDataConnectEmulator(dc, "localhost", 9399);

listEmails().then(res => {
  console.log(res.data.emails);
  process.exit(0);
});
    

クライアントを実行できます

    node clientTest.js
    
Kotlin Android

ソースファイル clientTest.kt を作成し、次のコードをコピーします。

class MainActivity : ComponentActivity() {
  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    lifecycleScope.launch {
      val connector = MyConnector.instance
      connector.dataConnect.useEmulator() // Remove to connect to production
      try {
        println(connector.listEmails.execute().data.emails)
      } catch (e: Throwable) {
        println("ERROR: $e")
      }
    }
  }
}
    

この場合、次のようになります。

  1. アクティビティを実行します。
  2. Android の logcat 出力を確認します。

完成したプロトタイプを本番環境にデプロイする

開発のイテレーションに取り組んできました。これで、スキーマの場合と同様に、Firebase Extensions UI または Firebase CLI を使用して、スキーマ、データ、クエリ、ミューテーションをサーバーにデプロイできます。

デプロイすると、Data Connect サービスはクライアントからのオペレーションを処理できるようになります。Cloud SQL for PostgreSQL インスタンスは、最後にデプロイされた、生成されたスキーマとデータで更新されます。

(省略可)PostgreSQL をローカルにインストールする

PostgreSQL をローカルにインストールしてエミュレータと統合すると、完全なローカル開発環境でプロトタイプを作成できます。

PostgreSQL の新しいインスタンスをインストールするか、既存のインスタンスを使用できます。

PostgreSQL をインストールする

ご使用のプラットフォームの手順に沿って PostgreSQL バージョン 15.x をインストールします。

インストール シーケンス中に出力されたホスト名、ポート、ユーザー名、パスワード、関連するパラメータをメモします。

PostgreSQL インスタンスに接続するには、エミュレータに次のものが必要です。

  • これらの設定構成パラメータ
  • dataconnect.yaml のデータベース名と、それに応じて名前が付けられた、ローカル インスタンスで初期化されたデータベース。

.firebaserc を接続文字列で更新します。

ローカル PostgreSQL のユーザー名とパスワードなど、ローカルの PostgreSQL 構成の詳細を接続文字列として使用し、.firebaserc ファイルの次のキーに追加します。

{
  "projects": {},
  ...,
  ...,
  "dataconnectEmulatorConfig": {
    "postgres": {
      "localConnectionString": "postgresql://postgresusername:postgrespassword@localhost:5432?sslmode=disable"
    }}
}

ローカル PostgreSQL インスタンスに接続する

この構成が完了したら、ローカル データベースに接続します。

  1. VS Code の左側のパネルで Firebase アイコンをクリックして、Firebase VS Code 拡張機能の UI を開きます。
  2. [Connect to Local PostgreSQL] ボタンをクリックします。

次のステップ