Firebase CLI は、コマンドラインから Firebase のプロダクトとサービスを管理、構成できるツールです。
CLI には、新しい Data Connect プロジェクトの作成、対応するローカル作業ディレクトリの初期化、Data Connect エミュレータの設定、Data Connect リソースの一覧表示、クライアント SDK の生成など、さまざまな Data Connect タスクを実行するために使用できるコマンドが用意されています。
設定コマンド
Firebase プロジェクトに Data Connect を追加する
firebase init
firebase init を使用して、新しいローカル プロジェクト構成を設定します。このワークフロー
ディレクトリに Firebase 構成ファイルを作成または更新します。
firebase initfirebase 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/execLocal Emulator Suite エミュレータの Data Connect バージョンは、インタラクティブ モードで start を使用するか、スクリプト駆動型の非インタラクティブ モードで exec を使用します。
ローカル PostgreSQL データをエクスポートしてインポートする
ローカル プロトタイピングとテスト、継続的インテグレーションをサポートするために、ローカル データベース インスタンスに保存されているデータをエクスポートし、開発の反復処理とテスト実行の間でインポートできます。
エクスポートは、ローカル PostgreSQL データベースのスナップショットとして保存されます。
Data Connect には、エクスポート/インポートを行うための 3 つの方法があります。
firebase.jsonで構成された自動エクスポート/インポート。エミュレータのシャットダウン時と起動時にスナップショット バックアップを提供します。- CLI を使用した手動エクスポート/インポート
- Data Connect 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>
手動エクスポート/インポート: 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:service2Data 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 を使用してフィルタで次のアクセスレベルで警告とプロンプトが発生します。
USERUSER_ANONUSER_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:kotlinCloud 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 スキーマの所有権などの権限を付与するよう求められます。
既存の(ブラウンフィールド)データベースの場合、スキーマを移行するための独自のワークフローがあり、スキーマの所有権を自分で維持したい場合があります。このフローを使用する場合は、
で、dataconnect:sql:setup
が SQL 移行を処理するかどうかを確認する
プロンプトで [いいえ] を選択してください。Data Connect選択しない場合、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 環境の自動検出をオーバーライドします。