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 を使用したスクリプト駆動型の非インタラクティブ モードで、Data Connect エミュレータの Local Emulator Suite バージョンを使用します。

ローカル PostgreSQL データのインポートとエクスポート

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

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

Data Connect では、エクスポート/インポートに次の 3 つのアプローチが用意されています。

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

firebase.json で自動エクスポートとインポートが構成されている

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

手動エクスポート: 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 データベースに適用します。

新しいローカル Data Connect プロジェクトをデフォルトの dataconnect.yaml ファイルで設定すると、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

フラグ 説明

--watch

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

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

--only connectorId:platform

単一のプラットフォームと単一のコネクタの 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 role

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

-E、--email email_address

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

グローバル オプション

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

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