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.json
の emulators.dataconnect.dataDir
フィールドに保存されます。エミュレータの実行間でデータの変更が自動的に保存されるため、ローカルテストやデータ探索に役立ちます。
手動エクスポート: emulators:export
、emulators: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 は、各コネクタの変更を分析し、以前のバージョンのクライアント コードで予期しない動作(メッセージは警告レベル)や破損(メッセージは破損レベル)を引き起こす可能性があるコネクタの変更に関する一連の評価メッセージを出力します。
影響の評価 | シナリオ |
---|---|
警告レベル(ワイヤーと互換性あり、動作が変更される可能性があります) |
|
破壊レベル(ワイヤーの互換性がなく、クライアントを破壊する可能性がある) |
|
破壊レベル(ワイヤーが互換性がなく、クライアントが破損する) |
|
インタラクティブな環境では、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 |
フラグ | 説明 |
- 視聴 |
プロセスを実行し続け、スキーマとコネクタの 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 はデータベース テーブルへの read
と write
のアクセス権のみを取得しますが、スキーマの所有権と移行は引き続きお客様の責任となります。
詳細とユースケースについては、サービスとデータベースを管理するをご覧ください。
dataconnect:sql:grant
firebase dataconnect:sql:grant
場合によっては、データベースに直接アクセスして、Data Connect アプリによって生成されたデータをクエリまたは更新する必要がある場合があります。これを行うには、このセクションで定義されているロールのいずれかを必要なユーザーまたはサービス アカウントに付与する必要があります。
付与されたロールの詳細については、PostgreSQL ユーザーロールをご覧ください。
ロール | SQL ロール | 権限 | 用途 | 付与可能 |
---|---|---|---|---|
リーダー | firebasereader_<db_name>_<schema_name> |
データベースに対する読み取り専用アクセス権。 指定されたスキーマ内のすべてのテーブルに対して SELECT オペレーションを実行できます。 |
データの取得は必要だが、変更は必要としないユーザーやサービスに最適です。 | ○ |
ライター | firebasewriter_<db_name>_<schema_name> |
データベースに対する読み取り / 書き込みアクセス権。 スキーマ内のすべてのテーブルに対して SELECT 、INSERT 、UPDATE 、DELETE 、TRUNCATE オペレーションを実行できます。 |
データベース内のデータの変更が必要なユーザーまたはサービスに適しています。 | ○ |
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 以外の環境の自動検出をオーバーライドします。