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

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

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

設定コマンド

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

firebase init

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

firebase init

firebase init フローでは、サービスとデータベースの設定、 Data Connect エミュレータのインストール、 生成された SDK の構成を順に行います。

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

プロダクトの設定で dataconnect を選択すると、CLI から新しいサービス名とロケーション、既存の Cloud SQL for PostgreSQL インスタンスをリンクするか、新しいインスタンスを作成するかどうかを入力するよう求められます。

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

Local Emulator Suite の設定

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

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

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

emulators:start/exec

firebase emulators:start/exec

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

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

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

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

Data Connect には、エクスポート/インポートを行うための 3 つの方法があります。

  • firebase.json で構成された自動エクスポート/インポート。エミュレータのシャットダウン時と起動時にスナップショット バックアップを提供します。
  • CLI を使用した手動エクスポート/インポート
  • Data Connect 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>

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

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

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

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

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

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

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

デプロイ

firebase deploy

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

コマンド 説明

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 は各コネクタの変更を分析し、以前のバージョンのクライアント コードで予期しない動作(警告レベルのメッセージ)や破損(破損レベルのメッセージ)を引き起こす可能性のあるコネクタの変更に関する一連の評価メッセージを発行します。

影響の評価 シナリオ
警告レベル(ワイヤ互換、動作が変更される可能性がある)
  • `` アノテーションなしで、クエリから null 値を指定できるフィールドを削除する。@retired
破損レベル(ワイヤ互換性がない、クライアントが破損する可能性がある)
  • デフォルト値なしで、null 値を指定できる変数を null 値を指定できない変数に変更する。
  • フィールドのデータ型を JSON 互換のデータ型 (Int から Float など)に変更する。
  • null 値を指定できない列を null 値を指定できる列に変更する。
  • @retired アノテーションなしで、null 値を指定できる変数を削除する。
  • `` アノテーションなしで、デフォルト値を持つ null 値を指定できない変数を削除する。@retired
破損レベル(ワイヤ互換性がない、クライアントが破損する
  • @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 を生成します。

ウェブ SDK、Android SDK、iOS 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:setupsuperuser スキーマの所有権などの権限を付与するよう求められます。

既存の(ブラウンフィールド)データベースの場合、スキーマを移行するための独自のワークフローがあり、スキーマの所有権を自分で維持したい場合があります。このフローを使用する場合は、 で、dataconnect:sql:setup が SQL 移行を処理するかどうかを確認する プロンプトで [いいえ] を選択してください。Data Connect選択しない場合、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 環境の自動検出をオーバーライドします。