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: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 データベースに適用します。
新しいローカル 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 は、各コネクタの変更を分析し、以前のバージョンのクライアント コードで予期しない動作(メッセージは警告レベル)や破損(メッセージは破損レベル)を引き起こす可能性のあるコネクタの変更に関する一連の評価メッセージを発行します。
影響の評価 | シナリオ |
---|---|
警告レベル(ワイヤー互換、動作が変更される可能性あり) |
|
破壊レベル(ワイヤーの互換性がない、クライアントを破壊する可能性がある) |
|
破壊レベル(ワイヤの互換性がない、クライアントを破壊する) |
|
インタラクティブ環境では、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: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 role |
付与する SQL ロール(オーナー、書き込み、読み取りのいずれか)。 | |
-E、--email email_address |
ロールを付与するユーザーまたはサービス アカウントのメールアドレス。 |
グローバル オプション
次のグローバル オプションは、すべてのコマンドに適用されます。
--json
は、他のツールで解析できるように CLI 出力を JSON に切り替えます。--noninteractive
と--interactive
は、必要に応じて、非 TTY 環境の自動検出をオーバーライドします。