Firebase Local Emulator Suite は、1 回限りのプロトタイピング セッションから本番規模の継続的インテグレーション ワークフローまで、さまざまなプロトタイプおよびテスト環境用にインストールおよび構成できます。
ローカル エミュレーター スイートをインストールする
Emulator Suite をインストールする前に、次のものが必要です。
エミュレータ スイートをインストールするには、次の手順を実行します。
- Firebase CLIをインストールします。 Firebase CLI をまだインストールしていない場合は、今すぐインストールしてください。 Emulator Suite を使用するには、CLI バージョン 8.14.0 以降が必要です。次のコマンドを使用して、インストールしたバージョンを確認できます:
firebase --version
- まだ行っていない場合は、現在の作業ディレクトリを Firebase プロジェクトとして初期化し、画面上のプロンプトに従って、使用する製品を指定します:
firebase init
- エミュレータ スイートをセットアップします。このコマンドは、対象のエミュレーターを選択し、対応するエミュレーター バイナリ ファイルをダウンロードし、デフォルトが適切でない場合はエミュレーター ポートを設定できる構成ウィザードを開始します。
firebase init emulators
エミュレータがインストールされると、更新チェックは実行されず、Firebase CLI バージョンを更新するまで追加の自動ダウンロードは行われません。
エミュレータ スイートの構成
必要に応じて、エミュレータのネットワーク ポートと、 firebase.json
ファイルのセキュリティ ルール定義へのパスを構成できます。
-
firebase init emulators
を実行するか、firebase.json
を手動で編集して、エミュレータ ポートを変更します。 -
firebase.json
を手動で編集して、セキュリティ ルール定義へのパスを変更します。
これらの設定を構成しない場合、エミュレータはデフォルトのポートでリッスンし、Cloud Firestore、Realtime Database、Cloud Storage for Firebase エミュレータはオープン データ セキュリティで実行されます。
指示 | 説明 |
---|---|
初期エミュレーター | エミュレータの初期化ウィザードを開始します。インストールするエミュレーターを特定し、必要に応じてエミュレーターのポート設定を指定します。 init emulators は非破壊的です。デフォルトを受け入れると、現在のエミュレータ構成が保持されます。 |
ポート構成
各エミュレーターは、優先されるデフォルト値を使用して、マシン上の異なるポートにバインドします。
エミュレータ | デフォルトのポート |
---|---|
認証 | 9099 |
エミュレータ スイートの UI | 4000 |
クラウド機能 | 5001 |
イベンアーク | 9299 |
リアルタイム データベース | 9000 |
クラウド ファイアストア | 8080 |
Firebase 用クラウド ストレージ | 9199 |
Firebase ホスティング | 5000 |
パブ/サブ | 8085 |
プロジェクト ID の構成
エミュレータの呼び出し方法に応じて、異なる Firebase プロジェクト ID を使用してエミュレータの複数のインスタンスを実行したり、特定のプロジェクト ID に対して複数のエミュレータ インスタンスを実行したりできます。このような場合、エミュレーター インスタンスは別の環境で実行されます。
通常、すべてのエミュレーター呼び出しに対して 1 つのプロジェクト ID を設定することをお勧めします。これにより、Emulator Suite UI、さまざまな製品エミュレーター、および特定のエミュレーターの実行中のすべてのインスタンスが、常に正しく通信できるようになります。
Local Emulator Suite は、環境内で複数のプロジェクト ID を検出すると警告を発行しますが、 firebase.json
でsingleProjectMode
キーをfalse
に設定することでこの動作をオーバーライドできます。
プロジェクト ID 宣言の不一致は、次の場所で確認できます。
- コマンド ラインの既定のプロジェクト。デフォルトでは、プロジェクト ID は起動時に
firebase init
またはfirebase use
で選択されたプロジェクトから取得されます。プロジェクトのリストを表示する (そしてどのプロジェクトが選択されているかを確認する) には、firebase projects:list
を使用します。 - ルール単体テスト。多くの場合、プロジェクト ID は、Rules Unit Testing ライブラリ メソッドの
initializeTestEnvironment
またはinitializeTestApp
への呼び出しで指定されます。 - コマンドライン
--project
フラグ。 Firebase CLI--project
フラグを渡すと、デフォルト プロジェクトがオーバーライドされます。単体テストとアプリの初期化で、フラグの値がプロジェクト ID と一致していることを確認する必要があります。
また、 Apple プラットフォーム、 Android 、およびWebプロジェクトの構成中に設定した、プラットフォーム固有のプロジェクト ID 構成も確認してください。
セキュリティ ルールの構成
エミュレーターは、 firebase.json
のdatabase
、 firestore
、およびstorage
構成キーからセキュリティ ルール構成を取得します。
{
// Existing firebase configuration ...
"database": {
"rules": "database.rules.json"
},
"firestore": {
"rules": "firestore.rules"
},
"storage": {
"rules": "storage.rules"
}
// ...
// Optional emulator configuration. Default
// values are used if absent.
"emulators": {
"singleProjectMode": false, // do not warn on detection of multiple project IDs
"firestore": {
"port": "8080"
},
"ui": {
"enabled": true, // Default is `true`
"port": 4000 // If unspecified, see CLI log for selected port
},
"auth": {
"port": "9099"
},
"pubsub": {
"port": "8085"
}
}
}
Java オプションの指定
Realtime Database エミュレータ、Cloud Firestore エミュレータ、Cloud Storage for Firebase エミュレータの一部は Java に基づいており、環境変数JAVA_TOOL_OPTIONS
を介して JVM フラグでカスタマイズできます。
たとえば、Java ヒープ スペース関連のエラーが発生した場合は、最大 Java ヒープ サイズを 4GB に増やすことができます。
export JAVA_TOOL_OPTIONS="-Xmx4g"
firebase emulators:start
JAVA_TOOL_OPTIONS="-Xms2g -Xmx4g"
のように、空白で区切られた引用符で複数のフラグを指定できます。フラグはエミュレータの Java ベースのコンポーネントにのみ影響し、Emulator Suite UI などの Firebase CLI の他の部分には影響しません。
エミュレーターの起動
エミュレーターを開始して、手動で終了するまで実行するか、指定されたテスト スクリプトの間実行してから自動的にシャットダウンすることができます。
指示 | 説明 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
エミュレータ:開始 | firebase.json で構成された Firebase 製品のエミュレーターを起動します。エミュレータ プロセスは、明示的に停止するまで実行を続けます。 emulators:start を呼び出すと、エミュレーターがまだインストールされていない場合は ~/.cache/firebase/emulators/ にダウンロードされます。
| ||||||||||||
エミュレータ:実行scriptpath | firebase.json で構成された Firebase 製品のエミュレーターを起動した後、 scriptpath でスクリプトを実行します。スクリプトの実行が完了すると、エミュレータ プロセスは自動的に停止します。
|
firebase emulators:exec
メソッドは、通常、継続的インテグレーション ワークフローにより適しています。
エミュレータ データのエクスポートとインポート
Authentication、Cloud Firestore、Realtime Database、Cloud Storage for Firebase エミュレータからデータをエクスポートして、共有可能な共通のベースライン データ セットとして使用できます。これらのデータ セットは、上記のように--import
フラグを使用してインポートできます。
エミュレータ: export_directoryエクスポート | Authentication、Cloud Firestore、Realtime Database、Cloud Storage for Firebase エミュレータ。実行中の Cloud Firestore、Realtime Database、または Cloud Storage for Firebase エミュレータ インスタンスからデータをエクスポートします。指定された 上記の |
CI システムと統合する
コンテナー化された Emulator Suite イメージの実行
典型的な CI セットアップでのコンテナーを使用した Emulator Suite のインストールと構成は簡単です。
注意すべきいくつかの問題があります。
JAR ファイルは
~/.cache/firebase/emulators/
にインストールされ、キャッシュされます。- ダウンロードの繰り返しを避けるために、このパスを CI キャッシュ構成に追加することをお勧めします。
リポジトリに
firebase.json
ファイルがない場合は、コマンド ライン引数をemulators:start
またはemulators:exec
コマンドに追加して、起動するエミュレータを指定する必要があります。例えば、
--only functions,firestore
.
認証トークンを生成する (ホスティング エミュレーターのみ)
継続的インテグレーション ワークフローが Firebase Hosting に依存している場合、 firebase emulators:exec
を実行するには、トークンを使用してログインする必要があります。他のエミュレーターはログインを必要としません。
トークンを生成するには、ローカル環境でfirebase login:ci
を実行します。これは CI システムから実行しないでください。指示に従って認証します。トークンはビルド間で有効であるため、この手順はプロジェクトごとに 1 回だけ実行する必要があります。トークンはパスワードのように扱う必要があります。それが秘密にされていることを確認してください。
CI 環境でビルド スクリプトで使用できる環境変数を指定できる場合は、単にFIREBASE_TOKEN
という環境変数を作成し、その値をアクセス トークン文字列にします。 Firebase CLI は自動的にFIREBASE_TOKEN
環境変数を取得し、エミュレーターが適切に起動します。
最後の手段として、単純にビルド スクリプトにトークンを含めることができますが、信頼できない関係者がアクセスできないようにしてください。このハードコーディングされたアプローチでは、 --token "YOUR_TOKEN_STRING_HERE"
を firebase firebase emulators:exec
コマンドに追加できます。
エミュレータ ハブ REST API を使用する
実行中のエミュレーターを一覧表示する
現在実行中のエミュレーターを一覧表示するには、エミュレーター ハブの/emulators
エンドポイントにGET
要求を送信します。
curl localhost:4400/emulators
結果は、実行中のすべてのエミュレーターとそのホスト/ポート構成をリストする JSON オブジェクトになります。次に例を示します。
{
"hub":{
"name": "hub",
"host": "localhost",
"port": 4400
},
"functions": {
"name": "functions",
"host": "localhost",
"port": 5001
}
"firestore": {
"name": "firestore",
"host": "localhost",
"port": 8080
}
}
バックグラウンド関数トリガーの有効化/無効化
場合によっては、ローカル関数と拡張トリガーを一時的に無効にする必要があります。たとえば、Cloud Functions エミュレーターまたは拡張機能エミュレーターで実行されているonDelete
関数をトリガーせずに、Cloud Firestore エミュレーターのすべてのデータを削除したい場合があります。
ローカル関数トリガーを一時的に無効にするには、エミュレーター ハブの/functions/disableBackgroundTriggers
エンドポイントにPUT
要求を送信します。
curl -X PUT localhost:4400/functions/disableBackgroundTriggers
結果は、現在の状態を詳述する JSON オブジェクトになります。
{
"enabled": false
}
ローカル関数トリガーを無効にした後で有効にするには、エミュレーター ハブの/functions/enableBackgroundTriggers
エンドポイントにPUT
要求を送信します。
curl -X PUT localhost:4400/functions/enableBackgroundTriggers
結果は、現在の状態を詳述する JSON オブジェクトになります。
{
"enabled": true
}
エミュレータ SDK の統合
このセクションの表は、クライアント SDK と Admin SDK でサポートされているエミュレーターを示しています。将来は、エミュレータのサポートが計画されているが、まだ利用できないことを意味します。
クライアント SDK の可用性
アンドロイド | Apple プラットフォーム | ウェブ | Firebase UI アンドロイド | Firebase UI iOS | Firebase UI ウェブ | |
---|---|---|---|---|---|---|
リアルタイム データベース | 19.4.0 | 7.2.0 | 8.0.0 | 6.4.0 | 未来 | なし |
クラウド ファイアストア | 21.6.0 | 7.2.0 | 8.0.0 | 6.4.0 | 未来 | なし |
認証 | 20.0.0 | 7.0.0 | 8.0.0 | 7.0.0 | 未来 | 4.7.2 |
Firebase 用クラウド ストレージ | 20.0.0 | 8.0.0 | 8.4.0 | 7.0.0 | 11.0.0 | なし |
クラウド機能 | 19.1.0 | 7.2.0 | 8.0.0 | なし | なし | なし |
ホスティング | なし | なし | なし | なし | なし | なし |
拡張機能 | なし | なし | なし | なし | なし | なし |
Admin SDK の可用性
ノード | ジャワ | パイソン | 行け | |
---|---|---|---|---|
リアルタイム データベース | 8.6.0 | 6.10.0 | 2.18.0 | 未来 |
クラウド ファイアストア | 8.0.0 | 6.10.0 | 3.0.0 | 1.0.0 |
認証 | 9.3.0 | 7.2.0 | 5.0.0 | 4.2.0 |
Firebase 用クラウド ストレージ | 9.8.0 | 未来 | 未来 | 未来 |
クラウド機能 | なし | なし | なし | なし |
ホスティング | なし | なし | なし | なし |
拡張機能 | なし | なし | なし | なし |