CI / CD に Data Connect エミュレータを使用する

Firebase Data Connect には、エンドツーエンドのプロトタイピング、継続的インテグレーション、継続的デリバリー(CI/CD)フローのローカル エミュレータが用意されています。

  • Data Connect エミュレータは、ローカルに統合された PGLite データベース インスタンスとやり取りして、クエリとミューテーションのプロトタイプを作成し、完全にローカルな環境でクライアントコードをテストできるようにします。
  • Data Connect エミュレータは、非インタラクティブな作業にも使用できます。自動テストを実行でき、CI/CD ワークフローで使用できます。これは、スキーマが安定していて、クライアントサイド コードのプロトタイプを作成してテストする場合に便利です。

このガイドでは、クイックスタートよりも詳細にエミュレータのインストールと使用について説明します。

Data Connect エミュレータをインストールする

Data Connect エミュレータを使用するように Local Emulator Suite をインストールする前に、次のものが必要です。

  • Node.js バージョン 18.0 以降。

Firebase CLI をインストールしてプロジェクト ディレクトリを設定する

  1. インストール ガイドに沿って Firebase CLI をインストールします。Data Connect エミュレータは現在開発中であり、バグの修正や新機能の追加が行われているため、定期的に更新してください。

  2. まだ行っていない場合は、画面の指示に沿って使用するサービスを指定し、現在の作業ディレクトリを Firebase プロジェクトとして初期化します。

    firebase init
    

Local Emulator Suite 構成を設定または変更する

Firebase VS Code 拡張機能から Data Connect エミュレータを起動した場合、必要に応じてエミュレータがインストールされます。

Firebase CLI を使用して、Local Emulator Suite の他の選択したコンポーネントとともにエミュレータを手動でインストールできます。このコマンドにより構成ウィザードが起動します。目的のエミュレータを選択し、対応するエミュレータのバイナリ ファイルをダウンロードして、デフォルトが適切でない場合はエミュレータ ポートを設定します。

  firebase init emulators

エミュレータがインストールされると、Firebase CLI のバージョンを更新するまで、アップデートのチェックは行われず、追加の自動ダウンロードも行われません。

Firebase プロジェクトを選択する

セットアップ フローで、Firebase CLI から Firebase プロジェクトを選択または作成するよう求められます。Firebase コンソールで Data Connect を使用して設定した既存のプロジェクトを選択すると、そこで選択した構成が提案されます。

エミュレータを設定する

エミュレータを構成する

firebase init フローを実行すると、エミュレータの設定オプションが表示されます。Local Emulator Suite の他のエミュレータと同様に、構成パラメータはローカル プロジェクト ファイルに保存されます。

  • firebase.json ファイルには、エミュレータのポート割り当てが含まれています。
    • emulators:ui キーは Data Connect エミュレータには適用されません。

ローカル Data Connect リソースと本番環境 Data Connect リソースを操作する

本番環境リソースに影響を与えないようにするには、demo- projectID を設定するか、後述するように、エミュレータに接続するようにクライアント コードを計測します。

エミュレータの使用開始

CI/CD ワークフローなど、エミュレータを非インタラクティブに実行する場合は、exec オプションで起動します。

firebase emulators:exec ./path/to/test-script.sh

事前定義されたクエリとミューテーションをクライアント コードに統合し、クライアントのテスト専用にエミュレータを使用している場合は、インタラクティブな作業に start オプションを使用できます。VS Code 拡張機能からエミュレータを起動することもできます。

firebase emulators:start

エミュレータと通信するようにクライアント コードを計測する

次のように、Data Connect エミュレータとやり取りするようにアプリ内構成またはテストクラスを設定します。

JavaScript
import { initializeApp } from "firebase/app";
import { connectorConfig } from "@name-of-package";
import { connectDataConnectEmulator, getDataConnect } from 'firebase/data-connect';

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

const app = initializeApp(firebaseConfig);

const dataConnect = getDataConnect(app, connectorConfig);
connectDataConnectEmulator(dataConnect, "localhost", 9399);

// Make calls from your app
  
Kotlin Android
val connector = MoviesConnector.instance

// Connect to the emulator on "10.0.2.2:9399"
connector.dataConnect.useEmulator()

// (Alternatively) if you're running your emulator on non-default port:
connector.dataConnect.useEmulator(port = 9999)

// Make calls from your app
  
iOS
let connector = DataConnect.dataConnect(DefaultConnectorClient.connectorConfig)

// Connect to the emulator on "127.0.0.1:9399"
connector.useEmulator()

// (alternatively) if you're running your emulator on non-default port:
connector.useEmulator(port: 9999)

// Make calls from your app
  

テストと継続的インテグレーションにエミュレータを使用する

コンテナ化された Local Emulator Suite イメージを実行する

一般的な CI 設定でのコンテナを使用した Local Emulator Suite のインストールと構成はシンプルです。

次の点にご注意ください。

  • エミュレータ バイナリは ~/.cache/firebase/emulators/ にインストールされ、キャッシュされます。ダウンロードが繰り返されないようにするには、このパスを CI キャッシュ構成に追加します。
  • リポジトリに firebase.json ファイルがない場合は、emulators:start コマンドまたは emulators:exec コマンドにコマンドライン引数を追加して、起動するエミュレータを指定する必要があります。例: --only dataconnect

テスト間でデータベースをクリアする

実行間でテスト環境をリセットするには、Firebase では次のことをおすすめします。

  • 次のことを処理する専用のミューテーションを記述します。
    • セットアップで、ローカル データベース インスタンスに開始データを入力します。
    • テイクダウンで、テスト後のデータベース インスタンスから変更されたデータを削除します。

Data Connect エミュレータと本番環境の違い

Data Connect エミュレータは、サーバーサイド プロダクトの多くの機能をシミュレートします。ただし、次のような例外があります。

  • PGLite のバージョンと詳細な構成は、本番環境の Cloud SQL インスタンスのバージョンと異なる場合があります。
  • エミュレータを使用して Data Connect の pgvector と Vertex API の統合で開発する場合、Cloud SQL の Vertex 統合ではなく、Cloud Vertex API への呼び出しが直接行われます。ただし、製品版 API への呼び出しは引き続き行われるため、実際の Firebase プロジェクトを使用する必要があります。demo- プロジェクトは使用できません。また、Vertex API の費用が発生します。