アプリを Cloud Storage for Firebase エミュレータに接続する前に、 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 には、 | デモの Firebase プロジェクトを操作する場合、アプリとコードはエミュレータのみとやり取りします。エミュレーターが実行されていないリソースをアプリが操作しようとすると、そのコードは失敗します。 |
可能な限りデモ プロジェクトを使用することをお勧めします。利点は次のとおりです。
- Firebase プロジェクトを作成しなくてもエミュレータを実行できるため、セットアップが簡単
- コードがエミュレートされていない (本番) リソースを誤って呼び出した場合でも、データの変更、使用、および課金の可能性がないため、より強力な安全性
- SDK 構成をダウンロードするためにインターネットにアクセスする必要がないため、オフライン サポートが向上します。
エミュレーターと通信するようにアプリをインストルメント化する
Android、Apple プラットフォーム、および Web SDK
次のように、アプリ内構成またはテスト クラスを設定して、Cloud Storage for Firebase エミュレータとやり取りします。
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 storage = Firebase.storage storage.useEmulator("10.0.2.2", 9199)
Java
// 10.0.2.2 is the special IP address to connect to the 'localhost' of // the host computer from an Android emulator. FirebaseStorage storage = FirebaseStorage.getInstance(); storage.useEmulator("10.0.2.2", 9199);
迅速
Storage.storage().useEmulator(withHost:"localhost", port:9199)
ウェブ v8
var storage = firebase.storage(); if (location.hostname === "localhost") { // Point to the Storage emulator running on localhost. storage.useEmulator("localhost", 9199); }
ウェブ v9
const { getStorage, connectStorageEmulator } = require("firebase/storage"); const storage = getStorage(); if (location.hostname === "localhost") { // Point to the Storage emulator running on localhost. connectStorageEmulator(storage, "localhost", 9199); }
エミュレータを使用して Cloud Storage for Firebase イベントによってトリガーされるCloud 機能をテストするために、追加の設定は必要ありません。 Cloud Storage for Firebase と Cloud Functions エミュレータの両方が実行されている場合、それらは自動的に連携します。
管理 SDK
FIREBASE_STORAGE_EMULATOR_HOST
環境変数が設定されている場合、Firebase Admin SDK は Cloud Storage for Firebase エミュレータに自動的に接続します。
export FIREBASE_STORAGE_EMULATOR_HOST="localhost:9199"
Cloud Functions エミュレーターは Cloud Storage for Firebase エミュレーターを自動的に認識するため、Cloud Functions と Cloud Storage for Firebase エミュレーター間の統合をテストする場合は、この手順をスキップできます。環境変数は、Cloud Storage for Firebase の Admin SDK に対して自動的に設定されます。
別の環境で実行されている共有エミュレータに Admin SDK コードを接続する場合は、Firebase CLI を使用して設定したものと同じプロジェクト IDを指定する必要があります。プロジェクト ID をinitializeApp
に直接渡すか、 GCLOUD_PROJECT
環境変数を設定できます。
Node.js 管理 SDK
admin.initializeApp({ projectId: "your-project-id" });
環境変数
export GCLOUD_PROJECT="your-project-id"
データのインポートとエクスポート
データベースと 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
コマンドでも機能します。詳細については、エミュレータ コマンド リファレンスを参照してください。
Cloud Storage for Firebase エミュレータと本番環境の違い
クライアント アプリのテストでは、Cloud Storage for Firebase エミュレータは、Firebase API のサーフェス エリアに関してほぼ完全に本番環境に対応しています。すべての Firebase コマンドは、通常の Firebase SDK (Web、Android、および Apple プラットフォーム) 間で機能することが期待されています。
サーバー側アプリのテストには、制限があります。 Firebase Admin SDK は Google Cloud API サーフェスを使用しますが、この API のすべてのエンドポイントがエミュレートされるわけではありません。経験則として、クライアント SDK から実行できるもの (ファイルのアップロードまたは削除、メタデータの取得と設定) はすべて Admin SDK から使用するために実装されていますが、それ以上のものは実装されていません。注目すべき除外事項を以下に示します。
Google Cloud Storage との違い
Storage エミュレータを含む Cloud Storage for Firebase 製品は、Firebase アプリの開発に非常に役立つストレージ オブジェクトに焦点を当てた Google Cloud Storage (GCS) 機能のサブセットを提供します。 Cloud Storage for Firebase は、次の点で GCS と異なります。
- Cloud Storage for Firebase は現在、ストレージ バケットを作成、一覧表示、取得、または削除するための
Bucket
API をサポートしていません。 - Google Cloud Storage Objects APIからは、
copy
、delete
、get
、insert
、list
、patch
、rewrite
、update
のメソッドがサポートされています。
クラウド IAM
Firebase Emulator Suite は、実行のために IAM 関連の動作を複製または尊重しようとはしません。エミュレーターは、提供されている Firebase セキュリティ ルールに準拠しますが、IAM が通常使用される状況では、たとえば、Cloud Functions 呼び出しサービス アカウントを設定してアクセス許可を設定する場合、エミュレーターは構成可能ではなく、開発者のマシンでグローバルに利用可能なアカウントを使用します。ローカル スクリプトを直接実行するのと同様です。
Pub/Sub 通知
Cloud Storage for Firebase エミュレータは Cloud Pub/Sub エミュレータと統合されていないため、ストレージ オブジェクトの変更に関するチャネルや通知の作成はサポートされていません。 Cloud Functions Storage トリガーを直接使用することをお勧めします。
バケットレベルのメタデータ
Cloud Storage for Firebase エミュレータは、ストレージ クラス、バケット レベルの CORS 構成、ラベル、保持ポリシーなどのバケット レベルの構成をサポートしていません。 Firebase は、このサポートを徐々に改善する予定です。
次は何?
- 精選された一連のビデオと詳細なハウツーの例については、 Firebase Emulators Training Playlistに従ってください。
- トリガーされる関数は Cloud Storage for Firebase との一般的な統合であるため、Cloud Functions for Firebase エミュレーターの詳細については、関数をローカルで実行するを参照してください。