Firebase Local Emulator Suite を使用する前に、Firebase プロジェクトを作成し、開発環境をセットアップし、プラットフォームの Firebase SDK を選択してインストールしたことを、プラットフォームのFirebase の開始に関するトピックに従って確認してください: Apple 、 Androidまたはウェブ。
プロトタイプとテスト
Local Emulator Suite には、Firebase Local Emulator Suite の紹介で説明されているように、いくつかの製品エミュレータが含まれています。本番環境で使用している Firebase プロダクトに応じて、個々のエミュレータやエミュレータの組み合わせでプロトタイプを作成してテストできます。

このトピックでは、ローカル エミュレーター スイートのワークフローを紹介するために、一般的な製品の組み合わせ (Firebase データベースと、そのデータベースでの操作によってトリガーされるクラウド機能) を使用するアプリで作業していると仮定します。
Firebase プロジェクトをローカルで初期化した後、Local Emulator Suite を使用した開発サイクルには通常、次の 3 つのステップがあります。
エミュレーターと Emulator Suite UI を使用してインタラクティブに機能のプロトタイプを作成します。
データベース エミュレーターまたは Cloud Functions エミュレーターを使用している場合は、アプリをエミュレーターに接続するための 1 回限りの手順を実行します。
エミュレーターとカスタム スクリプトを使用してテストを自動化します。
Firebase プロジェクトをローカルで初期化する
CLI をインストールするか、最新バージョンに更新してください。
curl -sL firebase.tools | bash
まだ行っていない場合は、現在の作業ディレクトリを Firebase プロジェクトとして初期化し、画面上のプロンプトに従って、 Cloud FunctionsとCloud FirestoreまたはRealtime Databaseのいずれかを使用していることを指定します。
firebase init
プロジェクト ディレクトリには、Firebase 構成ファイル、データベース用の Firebase セキュリティ ルール定義ファイル、クラウド関数コードを含むfunctions
ディレクトリ、およびその他のサポート ファイルが含まれます。
インタラクティブにプロトタイプを作成する
Local Emulator Suite は、新機能のプロトタイプを迅速に作成できるように設計されており、スイートに組み込まれたユーザー インターフェイスは、最も便利なプロトタイプ作成ツールの 1 つです。これは、Firebase コンソールをローカルで実行することに少し似ています。
Emulator Suite UI を使用すると、データベースの設計を反復したり、クラウド機能を含むさまざまなデータフローを試したり、セキュリティ ルールの変更を評価したり、ログをチェックしてバックエンド サービスのパフォーマンスを確認したりできます。その後、最初からやり直したい場合は、データベースをクリアして、新しいデザインのアイデアからやり直してください。
Local Emulator Suite を次のように起動すると、すべて利用可能になります。
firebase emulators:start
仮想アプリのプロトタイプを作成するために、データベース内のテキスト エントリを変更する基本的なクラウド関数をセットアップしてテストし、Emulator Suite UI でそのデータベースを作成して入力し、それをトリガーしてみましょう。
- プロジェクト ディレクトリの
functions/index.js
ファイルを編集して、データベースの書き込みによってトリガーされるクラウド関数を作成します。既存のファイルの内容を次のスニペットに置き換えます。この関数は、messages
コレクション内のドキュメントへの変更をリッスンし、ドキュメントのoriginal
のフィールドの内容を大文字に変換し、結果をそのドキュメントのuppercase
フィールドに格納します。 -
firebase emulators:start
でローカル エミュレーター スイートを起動します。 Cloud Functions とデータベース エミュレーターが起動し、相互運用するように自動的に構成されます。 -
http://localhost:4000
でブラウザーの UI を表示します。ポート 4000 は UI のデフォルトですが、Firebase CLI によって出力されるターミナル メッセージを確認してください。利用可能なエミュレータのステータスに注意してください。この場合、Cloud Functions と Cloud Firestore エミュレーターが実行されます。
- UI の [ Firestore] > [データ] タブで、[コレクションの開始] をクリックし、プロンプトに従って
messages
コレクションに新しいドキュメントを作成します。フィールド名original
で、値はtest
です。これにより、クラウド機能がトリガーされます。新しいuppercase
フィールドがすぐに表示され、文字列「TEST」が取り込まれていることを確認します。 - [ Firestore] > [リクエスト] タブで、エミュレートされたデータベースに対して行われたリクエストを調べます。これには、それらのリクエストを満たす一環として実行されたすべての Firebase セキュリティ ルールの評価が含まれます。
- [ログ] タブをチェックして、関数がデータベースを更新したときにエラーが発生しなかったことを確認します。
const functions = require('firebase-functions'); exports.makeUppercase = functions.firestore.document('/messages/{documentId}') .onCreate((snap, context) => { const original = snap.data().original; console.log('Uppercasing', context.params.documentId, original); const uppercase = original.toUpperCase(); return snap.ref.set({uppercase}, {merge: true}); });
アプリ内データベース アクセス コードに触れたり、テスト スイートを再コンパイルおよび再実行したりすることなく、探しているデータ フローが得られるまで、クラウド関数コードとインタラクティブなデータベース編集を簡単に繰り返すことができます。
アプリをエミュレーターに接続する
インタラクティブなプロトタイピングがうまく進み、デザインが決まったら、適切な SDK を使用してデータベース アクセス コードをアプリに追加する準備が整います。引き続きデータベース タブを使用し、機能については Emulator Suite UI の [ログ] タブを使用して、アプリの動作が正しいことを確認します。
Local Emulator Suite はローカル開発ツールであることを忘れないでください。本番データベースへの書き込みは、ローカルでプロトタイピングしている関数をトリガーしません。
アプリでデータベースへの書き込みを行うように切り替えるには、Cloud Firestore エミュレーターでテスト クラスまたはアプリ内構成を指定する必要があります。
Kotlin+KTX
// 10.0.2.2 is the special IP address to connect to the 'localhost' of // the host computer from an Android emulator. val firestore = Firebase.firestore firestore.useEmulator("10.0.2.2", 8080) firestore.firestoreSettings = firestoreSettings { isPersistenceEnabled = false }
Java
// 10.0.2.2 is the special IP address to connect to the 'localhost' of // the host computer from an Android emulator. FirebaseFirestore firestore = FirebaseFirestore.getInstance(); firestore.useEmulator("10.0.2.2", 8080); FirebaseFirestoreSettings settings = new FirebaseFirestoreSettings.Builder() .setPersistenceEnabled(false) .build(); firestore.setFirestoreSettings(settings);
迅速
let settings = Firestore.firestore().settings settings.host = "localhost:8080" settings.isPersistenceEnabled = false settings.isSSLEnabled = false Firestore.firestore().settings = settings
Web version 9
import { getFirestore, connectFirestoreEmulator } from "firebase/firestore"; // firebaseApps previously initialized using initializeApp() const db = getFirestore(); connectFirestoreEmulator(db, 'localhost', 8080);
Web version 8
// Firebase previously initialized using firebase.initializeApp(). var db = firebase.firestore(); if (location.hostname === "localhost") { db.useEmulator("localhost", 8080); }
カスタム スクリプトを使用してテストを自動化する
最後の全体的なワークフロー ステップです。アプリ内で機能のプロトタイプを作成し、すべてのプラットフォームで有望に見えたら、最終的な実装とテストに進むことができます。単体テストと CI ワークフローでは、 exec
コマンドを使用して、エミュレーターの起動、スクリプト化されたテストの実行、およびエミュレーターのシャットダウンを 1 回の呼び出しで行うことができます。
firebase emulators:exec "./testdir/test.sh"
個々のエミュレーターをさらに詳しく調べる
基本的なクライアント側のワークフローがどのように見えるかを確認したので、サーバー側のアプリ開発に使用する方法など、スイート内の個々のエミュレーターの詳細に進むことができます。
- 認証エミュレーターをプロトタイピング ワークフローに追加する
- Realtime Database エミュレーターの機能について詳しく学ぶ
- Cloud Storage for Firebase エミュレータの機能について詳しく学ぶ
- Cloud Firestore エミュレータの機能について詳しく学ぶ
- アプリを Cloud Functions エミュレーターに接続する
- 拡張機能エミュレータを使用して請求コストを最小限に抑えながら、Firebase 拡張機能を評価する
次は何?
上記にリンクされている特定のエミュレーターに関連するトピックを必ずお読みください。それで:
- 精選された一連のビデオと詳細なハウツーの例については、 Firebase Emulators Training Playlistに従ってください。
- セキュリティ ルールのテストと Firebase Test SDK を含む高度な使用例を調査します:セキュリティ ルールのテスト (Cloud Firestore) 、セキュリティ ルールのテスト (Realtime Database) 、セキュリティ ルールのテスト (Firebase 用クラウド ストレージ) 。