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

アプリをRealtimeDatabaseEmulatorに接続します

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

アプリを Realtime Database エミュレータに接続する前に、 Firebase Local Emulator Suite の全体的なワークフローを理解し、Local Emulator Suiteインストールして構成し、そのCLI コマンドを確認してください。

Firebase プロジェクトを選択

Firebase Local Emulator Suite は、単一の Firebase プロジェクトの製品をエミュレートします。

使用するプロジェクトを選択するには、エミュレータを起動する前に、CLI で作業ディレクトリでfirebase useを実行します。または、 --projectフラグを各エミュレータ コマンドに渡すこともできます。

Local Emulator Suite は、実際のFirebase プロジェクトとデモプロジェクトのエミュレーションをサポートしています。

プロジェクトの種類特徴エミュレーターで使用する
本物

実際の Firebase プロジェクトは、ユーザーが作成して構成したものです (ほとんどの場合、Firebase コンソールを使用して)。

実際のプロジェクトには、データベース インスタンス、ストレージ バケット、関数、またはその Firebase プロジェクト用に設定したその他のリソースなどのライブ リソースがあります。

実際の Firebase プロジェクトで作業する場合、サポートされている製品の一部またはすべてのエミュレータを実行できます。

エミュレートしていない製品の場合、アプリとコードはライブリソース (データベース インスタンス、ストレージ バケット、関数など) とやり取りします。

デモ

デモ Firebase プロジェクトには、実際のFirebase 構成もライブ リソースもありません。これらのプロジェクトには通常、Codelab またはその他のチュートリアルからアクセスします。

デモ プロジェクトのプロジェクト ID には、 demo-プレフィックスが付きます。

デモの Firebase プロジェクトを操作する場合、アプリとコードはエミュレータのみとやり取りします。エミュレーターが実行されていないリソースをアプリが操作しようとすると、そのコードは失敗します。

可能な限りデモ プロジェクトを使用することをお勧めします。利点は次のとおりです。

  • Firebase プロジェクトを作成しなくてもエミュレータを実行できるため、セットアップが簡単
  • コードがエミュレートされていない (本番) リソースを誤って呼び出した場合でも、データの変更、使用、および課金の可能性がないため、より強力な安全性
  • SDK 構成をダウンロードするためにインターネットにアクセスする必要がないため、オフライン サポートが向上します。

エミュレーターと通信するようにアプリをインストルメント化する

Android、Apple プラットフォーム、および Web SDK

次のように、アプリ内構成またはテスト クラスを設定して、Realtime Database とやり取りします。

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 database = Firebase.database
database.useEmulator("10.0.2.2", 9000)
Java
// 10.0.2.2 is the special IP address to connect to the 'localhost' of
// the host computer from an Android emulator.
FirebaseDatabase database = FirebaseDatabase.getInstance();
database.useEmulator("10.0.2.2", 9000);
迅速
    // In almost all cases the ns (namespace) is your project ID.
let db = Database.database(url:"http://localhost:9000?ns=YOUR_DATABASE_NAMESPACE")

Web version 9

import { getDatabase, connectDatabaseEmulator } from "firebase/database";

const db = getDatabase();
if (location.hostname === "localhost") {
  // Point to the RTDB emulator running on localhost.
  connectDatabaseEmulator(db, "localhost", 9000);
} 

Web version 8

var db = firebase.database();
if (location.hostname === "localhost") {
  // Point to the RTDB emulator running on localhost.
  db.useEmulator("localhost", 9000);
} 

エミュレーターを使用してRealtime Database イベントによってトリガーされるCloud Functions をテストするために、追加のセットアップは必要ありません。 Realtime Database と Cloud Functions エミュレーターの両方が実行されている場合、それらは自動的に連携します。

管理 SDK

FIREBASE_DATABASE_EMULATOR_HOST環境変数が設定されている場合、Firebase Admin SDK は Realtime Database エミュレータに自動的に接続します。

export FIREBASE_DATABASE_EMULATOR_HOST="localhost:9000"

コードが Cloud Functions エミュレーター内で実行されている場合、 initalizeAppを呼び出すと、プロジェクト ID とその他の構成が自動的に設定されます。

別の環境で実行されている共有エミュレータに Admin SDK コードを接続する場合は、Firebase CLI を使用して設定したものと同じプロジェクト IDを指定する必要があります。プロジェクト ID をinitializeAppに直接渡すか、 GCLOUD_PROJECT環境変数を設定できます。

Node.js 管理 SDK
admin.initializeApp({ projectId: "your-project-id" });
環境変数
export GCLOUD_PROJECT="your-project-id"

テスト間でデータベースをクリアする

アクティビティ間で Realtime Database をフラッシュするには、データベース参照をクリアします。エミュレータ プロセスを単にシャットダウンする代わりに、このアプローチを使用できます。

Kotlin+KTX
// With a DatabaseReference, write null to clear the database.
database.reference.setValue(null)
Java
// With a DatabaseReference, write null to clear the database.
database.getReference().setValue(null);
迅速
// With a DatabaseReference, write nil to clear the database.
    Database.database().reference().setValue(nil);

Web version 9

import { getDatabase, ref, set } from "firebase/database";

// With a database Reference, write null to clear the database.
const db = getDatabase();
set(ref(db), null);

Web version 8

// With a database Reference, write null to clear the database.
firebase.database().ref().set(null);

当然、コードは、プラットフォームの非同期イベント処理機能を使用して、フラッシュが終了または失敗したことの確認を待つ必要があります。

このようなステップを実装すると、古いデータが実行間で消去され、新しいベースライン テスト構成を使用していることを確信して、テストを順序付けし、関数をトリガーすることができます。

データのインポートとエクスポート

データベースと Cloud Storage for Firebase エミュレータを使用すると、実行中のエミュレータ インスタンスからデータをエクスポートできます。単体テストまたは継続的インテグレーション ワークフローで使用するデータのベースライン セットを定義し、それをエクスポートしてチーム間で共有します。

firebase emulators:export ./dir

テストでは、エミュレーターの起動時にベースライン データをインポートします。

firebase emulators:start --import=./dir

エクスポート パスを指定するか、単に--importフラグに渡されたパスを使用して、シャットダウン時にデータをエクスポートするようエミュレータに指示できます。

firebase emulators:start --import=./dir --export-on-exit

これらのデータのインポートおよびエクスポート オプションは、 firebase emulators:execコマンドでも機能します。詳細については、エミュレータ コマンド リファレンスを参照してください。

セキュリティ ルールのアクティビティを視覚化する

プロトタイプとテストのループを進めながら、Local Emulator Suite が提供する視覚化ツールとレポートを使用できます。

ルールの評価を視覚化する

セキュリティ ルールをプロトタイプに追加すると、Local Emulator Suite ツールを使用してデバッグできます。

一連のテストを実行した後、各ルールがどのように評価されたかを示すテスト カバレッジ レポートにアクセスできます。レポートを取得するには、エミュレーターの実行中に、公開されているエンドポイントに対してクエリを実行します。ブラウザ対応バージョンの場合は、次の URL を使用してください。

http://localhost:9000/.inspect/coverage?ns=<database_name>

これにより、ルールが式と部分式に分割され、実行回数や返される値などの詳細についてマウスオーバーできます。このデータの生の JSON バージョンについては、クエリに次の URL を含めます。

http://localhost:9000/.inspect/coverage.json?ns=<database_name>

次は何?