Data Connect 用の Firebase CLI コマンド リファレンス

Firebase CLI は、コマンドラインから Firebase のプロダクトとサービスを管理、構成できるツールです。

CLI には、新しい Data Connect プロジェクトの作成、対応するローカル作業ディレクトリの初期化、Data Connect エミュレータの設定、Data Connect リソースの一覧表示、クライアント SDK の生成など、さまざまな Data Connect タスクの実行に使用できるコマンドがあります。

設定コマンド

Data Connect を Firebase プロジェクトに追加する

firebase init

firebase init を使用して、新しいローカル プロジェクト構成を設定します。このワークフローでは、ディレクトリ内の Firebase 構成ファイルを作成または更新します。

firebase init

firebase init フローでは、サービスとデータベースの設定、必要に応じて Data Connect エミュレータのインストール、生成された SDK の構成について説明します。

サービスとデータベースの設定

プロダクトの設定に dataconnect を選択すると、新しいサービス名とロケーション、既存の Cloud SQL for PostgreSQL インスタンスをリンクするか新しいインスタンスを作成するかを尋ねるメッセージが表示されます。

既存のインスタンスがリンクされている場合、CLI は IAM 認証やパブリック IP アドレスなど、互換性のある設定を確認します。

Local Emulator Suite の設定

CLI フローでは、Data Connect エミュレータなど、エミュレータを設定できます。

Data Connect エミュレータ コマンド

Data Connect エミュレータを起動する

emulators:start/exec

firebase emulators:start/exec

start でインタラクティブ モード、または exec でスクリプト ドリブンの非インタラクティブ モードで、Local Emulator Suite バージョンの Data Connect エミュレータを使用します。

ローカル PostgreSQL データをエクスポートしてインポートする

ローカル プロトタイピングとテスト、継続的インテグレーションをサポートするには、ローカル データベース インスタンスに保存されているデータをエクスポートし、開発の反復処理とテスト実行間でインポートします。

エクスポートは、ローカル PostgreSQL データベースのスナップショットとして保存されます。

Data Connect では、エクスポートとインポートに次の 3 つの方法があります。

  • エミュレータのシャットダウンと起動時にスナップショット バックアップを提供するように firebase.json で構成された自動エクスポート/インポート
  • CLI を使用した手動のエクスポート/インポート
  • VS Code 拡張機能のインターフェースを使用した手動のエクスポート/インポート

firebase.json で構成された自動エクスポートとインポート

開発セッション間でデータをバックアップするには、firebase init シーケンス中に自動バックアップ ロケーションを指定します。このロケーションは、firebase.jsonemulators.dataconnect.dataDir フィールドに保存されます。エミュレータの実行間でデータの変更が自動的に保存されるため、ローカルテストやデータ探索に役立ちます。

手動エクスポート: emulators:exportemulators:start/exec --import

Data Connect エミュレータの実行中に、別のターミナルで firebase emulators:export コマンドを実行してデータのスナップショットを保存します。次に、--import フラグを使用して、そのスナップショットからエミュレータを起動できます。

# Export data from local emulator from a separate terminal
firebase emulators:export --only dataconnect <export_directory>

# Import data from local directory, here using emulators:exec
firebase emulators:exec ./<your-test-script>.sh --only dataconnect --import <import_directory>

手動のエクスポート/インポート: VS Code 拡張機能

エミュレータの実行中に、VS Code 拡張機能の UI で [エミュレータのデータをエクスポート] ボタンを使用してデータをエクスポートし、現在のデータベースの内容をエクスポートします。デフォルトのエクスポート先は、プロジェクト ディレクトリのルートにある exportedData ディレクトリです。

このデータは、前のセクションで説明したように CLI を使用してインポートできます。VS Code でエミュレータを起動する前に、[エミュレータを構成] リンクをクリックして [インポートパス] を設定して、このデータをインポートすることもできます。

スキーマとコネクタの管理コマンド

このセクションでは、スキーマとコネクタの管理に使用するコマンドの CLI リファレンス情報を提供します。

これらのコマンドに関連するユースケースと推奨されるベスト プラクティスについては、スキーマとコネクタの管理ガイドをご覧ください。

スキーマとコネクタをデプロイする

デプロイ

firebase deploy

このコマンドは、firebase.json にインデックス登録されている Data Connect サービスのリソースをデプロイします。必要に応じて、スキーマの移行コネクタの更新が実行されます。

コマンド 説明

firebase deploy

フラグ 説明

–-only dataconnect

このプロジェクトのすべての Data Connect サービスにスキーマとコネクタをデプロイしますが、他の Firebase プロダクトのリソースはデプロイしません。

–-only dataconnect:serviceId

指定した Data Connect サービス用のスキーマとコネクタをデプロイします。

–-only dataconnect:serviceId:connectorId

指定された Data Connect サービスに単一のコネクタをデプロイします。

–-only dataconnect:serviceId:schema

指定した Data Connect サービスのスキーマをデプロイします。

–-only フラグを使用すると、カンマ区切りの値を渡して、必要なリソースのサブセットをデプロイできます。

firebase deploy --only dataconnect:service1:schema,dataconnect:service2

Data Connect サービス、スキーマ、コネクタを一覧表示する

dataconnect:services:list

firebase dataconnect:services:list

このコマンドは、プロジェクトにデプロイされたサービス、スキーマ、コネクタに関する基本情報を出力します。

SQL スキーマを比較して移行する

firebase deploy を実行すると、CLI は更新をデプロイする前に SQL スキーマの比較を実行します。一連の dataconnect:sql コマンドを使用して、比較と更新を直接実行することもできます。

dataconnect:sql:diff

firebase dataconnect:sql:diff

このコマンドは、サービスのローカル スキーマと、対応する Cloud SQL データベースの現在のスキーマを比較します。データベースを新しいスキーマに移行するために実行されるコマンドが出力されます。

コマンド 説明

firebase dataconnect:sql:diff

フラグ/パラメータ 説明

serviceId

サービスを指定します。省略すると、firebase.json 内のすべてのサービスの差分を出力します。

dataconnect:sql:migrate

firebase dataconnect:sql:migrate

このコマンドは、ローカル スキーマの変更をサービスの Cloud SQL データベースに適用します。

デフォルトの dataconnect.yaml ファイルを使用して新しいローカル Data Connect プロジェクトを設定すると、dataconnect:sql:migrate コマンドは、必要な変更を求めるプロンプトを表示してから、オプションの変更を求めるプロンプトを表示し、変更を実行します。厳格モードまたは互換モードでスキーマを移行するで説明されているように、dataconnect.yaml 構成を更新することで、オプションの変更を常に含めるか、常に無視するようにこの動作を変更できます。

インタラクティブ環境では、CLI に各移行 SQL ステートメント(および破壊的かどうか)が表示され、適用する変更を求めるプロンプトが表示されます。--force フラグを渡すことは、すべてのプロンプトを受け入れることと同等です。

インタラクティブでない環境の場合:

  • --force がない場合、破壊的でない変更のみが実行されます。破壊的な変更がある場合、CLI は中止され、変更は行われません。
  • --force では、すべての変更が適用されます。破壊的な変更が含まれている場合は、--force フラグが指定されていない限り、変更が印刷され、続行するかどうかのプロンプトが表示されます。
コマンド 説明

firebase dataconnect:sql:migrate

フラグ 説明

serviceId

指定したサービスのデータベースを移行します。プロジェクトにサービスが 1 つしかない場合、serviceId は推論されます。

--force

プロンプトを自動的に承認する。

他の --only フラグと同様に、カンマで区切って複数のサービスを指定できます。

厳密モードまたは互換モードでスキーマを移行する

Data Connect スキーマ移行には、厳密と互換性の 2 つの異なるスキーマ検証モードがあります。厳格モードの検証では、アプリケーション スキーマをデプロイする前に、データベース スキーマがアプリケーション スキーマと完全に一致している必要があります。互換モードの検証では、データベース スキーマがアプリケーション スキーマと互換性がある必要があります。つまり、アプリケーション スキーマで使用されていないデータベース内の要素は変更されません。

これらのスキーマ検証モードとスキーマ移行のベスト プラクティスについては、スキーマとコネクタ管理ガイドをご覧ください。

検証モードは、dataconnect.yaml ファイルの schemaValidation キーを使用して定義します。schemaValidation が指定されていない場合、CLI は互換性のある変更を適用し、厳密な変更を実行する前にプロンプトを表示します。構成リファレンスをご覧ください。

コネクタの変更を管理する

firebase deploy を実行すると、CLI は該当するコネクタの更新を開始します。CLI は、各コネクタの変更を分析し、以前のバージョンのクライアント コードで予期しない動作(メッセージは警告レベル)や破損(メッセージは破損レベル)を引き起こす可能性があるコネクタの変更に関する一連の評価メッセージを出力します。

影響の評価 シナリオ
警告レベル(ワイヤーと互換性あり、動作が変更される可能性があります)
  • @retired アノテーションのないクエリから null 可能フィールドを削除する。
破壊レベル(ワイヤーの互換性がなく、クライアントを破壊する可能性がある)
  • デフォルト値なしで null 値許容変数を null 値非許容に変換する。
  • フィールドのデータ型を JSON 互換のものに変更する(例: Int から Float)。
  • null 値を指定できない列を null 値を指定できる列に変更する。
  • @retired アノテーションのない null 値許容変数の削除。
  • @retired アノテーションのないデフォルト値を持つ null 以外の変数を削除。
破壊レベル(ワイヤーが互換性がなく、クライアントが破損する)
  • @retired アノテーションのないオペレーションの削除。
  • @retired アノテーションのないクエリから null 以外のフィールドを削除する。
  • デフォルト値のない null 以外の変数の追加。
  • フィールドのデータ型を互換性のないデータ型に変更する(String から Int など)。
  • デフォルト値と @retired アノテーションのない null 以外の変数を削除。

インタラクティブな環境では、CLI に各コネクタの評価が表示され、適用する変更を求めるプロンプトが表示されます。--force フラグを渡すことは、すべての評価を承認することと同等です。

非インタラクティブ環境の場合:

  • 警告レベルの評価(動作の変更の可能性)のみが発生した場合、すべてのコネクタがデプロイされ、警告がターミナルにログに記録されます。
  • 破壊レベルの評価が発生した場合、コネクタはデプロイされず、警告がターミナルに記録されます。--force フラグを使用してオーバーライドできます。

認証コードの監査

Data Connect は、Firebase CLI の firebase deploy を使用してサーバーにデプロイするときにコネクタコードを分析することで、認可戦略を監査するのに役立ちます。この監査を使用して、コードベースを確認できます。

コネクタをデプロイすると、CLI はコネクタ内の既存、変更済み、新しいオペレーション コードの評価を出力します。

変更されたオペレーションと新しいオペレーションの場合、新しいオペレーションで特定のアクセスレベルを使用する場合、または既存のオペレーションを変更してそれらのアクセスレベルを使用する場合は、CLI から警告が出され、確認を求めるプロンプトが表示されます。

警告とメッセージは、常に次の場合に表示されます。

  • PUBLIC

また、auth.uid を使用してフィルタで拡張しない場合、次のアクセスレベルで警告とプロンプトが表示されます。

  • USER
  • USER_ANON
  • USER_EMAIL_VERIFIED

認可の詳細については、認可と構成証明のガイドをご覧ください。

SDK コマンド

SDK を生成する

dataconnect:sdk:generate

firebase dataconnect:sdk:generate

このコマンドは、connector.yaml で宣言された型指定された SDK を生成します。

ウェブ SDKAndroid SDKiOS SDK のガイドもご覧ください。

コマンド 説明

firebase dataconnect:sdk:generate

フラグ 説明

- 視聴

プロセスを実行し続け、スキーマとコネクタの GQL ファイルに変更を保存するたびに新しい SDK を生成します。

生成に失敗すると、エラーが stdout に出力され、生成されたコードは変更されず、コマンドは実行を続けます。

–-only connectorId:platform

1 つのプラットフォームと 1 つのコネクタの SDK のみを生成します。

–only フラグを使用すると、カンマ区切りの値を渡すことができます。

firebase dataconnect:sdk:generate –-only connector1, connector1:kotlin

Cloud SQL 管理コマンド

Cloud SQL の SQL ロールを付与する

Data Connect は、Cloud SQL でホストされている独自の PostgreSQL インスタンス上で動作します。SQL ロール コマンドを使用すると、データベース テーブルの権限を管理できます。

dataconnect:sql:setup

firebase dataconnect:sql:setup

このコマンドは、データベース内のテーブルに対する初期のグローバル権限を構成します。

デフォルトのデータベースのプロビジョニングと管理のフローでは、プロジェクトで新しい(グリーンフィールド)データベースが使用されていることを前提としています。firebase deploy を呼び出すと、Data Connect にデータベース スキーマの変更が表示され、承認すると移行が実行されます。このフローを使用する場合は、dataconnect:sql:setup から、superuser スキーマの所有権などの権限を付与するよう求められます。

既存(ブラウンフィールド)データベースの場合、スキーマの移行に独自のワークフローがあり、スキーマの所有権を自分で維持したい場合があります。このフローを使用する場合は、Data Connect が SQL 移行を処理するかどうかを尋ねる dataconnect:sql:setup プロンプトで、必ず拒否してください。拒否すると、Data Connect はデータベース テーブルへの readwrite のアクセス権のみを取得しますが、スキーマの所有権と移行は引き続きお客様の責任となります。

詳細とユースケースについては、サービスとデータベースを管理するをご覧ください。

dataconnect:sql:grant

firebase dataconnect:sql:grant

場合によっては、データベースに直接アクセスして、Data Connect アプリによって生成されたデータをクエリまたは更新する必要がある場合があります。これを行うには、このセクションで定義されているロールのいずれかを必要なユーザーまたはサービス アカウントに付与する必要があります。

付与されたロールの詳細については、PostgreSQL ユーザーロールをご覧ください。

ロール SQL ロール 権限 用途 付与可能
リーダー firebasereader_<db_name>_<schema_name> データベースに対する読み取り専用アクセス権。

指定されたスキーマ内のすべてのテーブルに対して SELECT オペレーションを実行できます。
データの取得は必要だが、変更は必要としないユーザーやサービスに最適です。
ライター firebasewriter_<db_name>_<schema_name> データベースに対する読み取り / 書き込みアクセス権。

スキーマ内のすべてのテーブルに対して SELECTINSERTUPDATEDELETETRUNCATE オペレーションを実行できます。
データベース内のデータの変更が必要なユーザーまたはサービスに適しています。
owner firebaseowner_<db_name>_<schema_name> スキーマ オーナー。

スキーマ内のすべてのテーブルとシーケンスに対するすべての権限があります。
このロールは、IAM roles/cloudsql.client ロールと組み合わせて、データベースの移行を行う権限を付与します。

たとえば、firebase dataconnect:sql:migrate を呼び出す場合。
スーパーユーザー cloudsqlsuperuser データベースに対する完全な権限を持つ組み込みのスーパーユーザーロール。

オーナー権限に加えて、スキーマの作成、スキーマの削除、拡張機能のインストール、その他の管理タスクを実行できます。

CLI で「firebasesuperuser」としてログインするとアクセスできます。
拡張機能のインストール、初期スキーマの作成、付与可能な SQL ロールの他のユーザーへの付与に必要です。

管理者以外のユーザーにスーパーユーザー権限が必要な場合、移行は失敗し、データベース管理者(roles/cloudsql.admin を持つユーザー)に権限のある SQL コマンドを実行するよう依頼するよう求めるメッセージが表示されます。
roles/cloudsql.admin を持つユーザーに付与され、Firebase CLI から直接付与することはできません。
コマンド 説明

firebase dataconnect:sql:grant

フラグ/パラメータ 説明

-R、--role ロール

付与する SQL ロール(オーナー、書き込み、読み取りのいずれか)。

-E、--email email_address

ロールを付与するユーザーまたはサービス アカウントのメールアドレス。

グローバル オプション

次のグローバル オプションはすべてのコマンドに適用されます。

  • --json は、CLI 出力を JSON に切り替えて、他のツールによる解析を可能にします。
  • --noninteractive--interactive は、必要に応じて TTY 以外の環境の自動検出をオーバーライドします。