Firebase Summit で発表されたすべての情報をご覧ください。Firebase を使用してアプリ開発を加速し、自信を持ってアプリを実行する方法を紹介しています。詳細

Local Emulator Suiteをインストール、構成、統合する

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

Firebase Local Emulator Suite は、1 回限りのプロトタイピング セッションから本番規模の継続的インテグレーション ワークフローまで、さまざまなプロトタイプおよびテスト環境用にインストールおよび構成できます。

ローカル エミュレーター スイートをインストールする

Emulator Suite をインストールする前に、次のものが必要です。

  • Node.jsバージョン 8.0 以降。
  • Java JDK バージョン 11 以降。

エミュレータ スイートをインストールするには、次の手順を実行します。

  1. Firebase CLIをインストールします。 Firebase CLI をまだインストールしていない場合は、今すぐインストールしてください。 Emulator Suite を使用するには、CLI バージョン 8.14.0 以降が必要です。次のコマンドを使用して、インストールしたバージョンを確認できます:
    firebase --version
  2. まだ行っていない場合は、現在の作業ディレクトリを Firebase プロジェクトとして初期化し、画面上のプロンプトに従って、使用する製品を指定します:
    firebase init
  3. エミュレータ スイートをセットアップします。このコマンドは、対象のエミュレーターを選択し、対応するエミュレーター バイナリ ファイルをダウンロードし、デフォルトが適切でない場合はエミュレーター ポートを設定できる構成ウィザードを開始します。
    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.jsonsingleProjectModeキーを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.jsondatabasefirestore 、および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/ にダウンロードされます。
国旗説明
--onlyオプション。開始するエミュレーターを制限します。 「auth」、「database」、「firestore」、「functions」、「hosting」、または「pubsub」の 1 つ以上を指定して、エミュレーター名のコンマ区切りリストを指定します。
--inspect-functions debug_portオプション。 Cloud Functions エミュレーターで使用して、指定されたポート (引数を省略した場合はデフォルトのポート 9229) で関数のブレークポイント デバッグを有効にします。このフラグが指定されると、Cloud Functions エミュレーターは特別なシリアル化された実行モードに切り替わります。このモードでは、関数は 1 つのプロセスでシーケンシャル (FIFO) 順に実行されます。これにより、関数のデバッグが簡素化されますが、動作はクラウドでの関数のマルチプロセス並列実行とは異なります。
--export-on-exit=オプション。 Authentication、Cloud Firestore、Realtime Database、Cloud Storage for Firebase エミュレータで使用します。 emulators:exportコマンドで説明されているように、シャットダウンが発生したときにデータをディレクトリにエクスポートするようエミュレータに指示します。エクスポート ディレクトリは次のフラグで指定できます: firebase emulators:start --export-on-exit=./saved-data--importが使用されている場合、エクスポート パスはデフォルトで同じになります。例: firebase emulators:start --import=./data-path --export-on-exit 。最後に、必要に応じて、異なるディレクトリ パスを--import--export-on-exitフラグに渡します。
--import= import_directoryオプション。 Authentication、Cloud Firestore、Realtime Database、Cloud Storage for Firebase エミュレータで使用します。 --export-on-exit起動オプションまたはemulators:exportコマンドを使用して保存されたデータを、実行中の Authentication、Cloud Firestore、Realtime Database、または Cloud Storage for Firebase エミュレータ インスタンスにインポートします。現在エミュレータのメモリにあるデータはすべて上書きされます。
エミュレータ:実行scriptpath firebase.jsonで構成された Firebase 製品のエミュレーターを起動した後、 scriptpathでスクリプトを実行します。スクリプトの実行が完了すると、エミュレータ プロセスは自動的に停止します。
国旗説明
--onlyオプション。開始するエミュレーターを制限します。 「firestore」、「database」、「functions」、「hosting」、または「pubsub」の 1 つ以上を指定して、エミュレータ名のカンマ区切りのリストを指定します。
--inspect-functions debug_portオプション。 Cloud Functions エミュレーターで使用して、指定されたポート (引数を省略した場合はデフォルトのポート 9229) で関数のブレークポイント デバッグを有効にします。このフラグが指定されると、Cloud Functions エミュレーターは特別なシリアル化された実行モードに切り替わります。このモードでは、関数は 1 つのプロセスでシーケンシャル (FIFO) 順に実行されます。これにより、関数のデバッグが簡素化されますが、動作はクラウドでの関数のマルチプロセス並列実行とは異なります。
--export-on-exit=オプション。 Authentication、Cloud Firestore、Realtime Database、Cloud Storage for Firebase エミュレータで使用します。 emulators:exportコマンドで説明されているように、シャットダウンが発生したときにデータをディレクトリにエクスポートするようエミュレータに指示します。エクスポート ディレクトリは次のフラグで指定できます: firebase emulators:start --export-on-exit=./saved-data--importが使用されている場合、エクスポート パスはデフォルトで同じになります。例: firebase emulators:start --import=./data-path --export-on-exit 。最後に、必要に応じて、異なるディレクトリ パスを--import--export-on-exitフラグに渡します。
--import= import_directoryオプション。 Authentication、Cloud Firestore、Realtime Database、Cloud Storage for Firebase エミュレータで使用します。 --export-on-exit起動オプションまたはemulators:exportコマンドを使用して保存されたデータを、実行中の Authentication、Cloud Firestore、Realtime Database、または Cloud Storage for Firebase エミュレータ インスタンスにインポートします。現在エミュレータのメモリにあるデータはすべて上書きされます。
--uiオプション。実行中にエミュレータ UI を実行します。

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 エミュレータ インスタンスからデータをエクスポートします。指定されたexport_directoryがまだ存在しない場合は作成されます。指定したディレクトリが存在する場合、以前のエクスポート データを上書きするかどうかを確認するプロンプトが表示されます。 --forceフラグを使用して、このプロンプトをスキップできます。 export ディレクトリには、データ マニフェスト ファイルfirebase-export-metadata.jsonが含まれています。

上記の--export-on-exitフラグを使用して、シャットダウン時にデータを自動的にエクスポートするようにエミュレーターに指示できます。

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未来未来未来
クラウド機能なしなしなしなし
ホスティングなしなしなしなし
拡張機能なしなしなしなし