アプリをクラウドストレージエミュレーターに接続します

クラウドストレージエミュレーターにアプリを接続する前に、あなたがいることを確認して、全体的なFirebaseローカルエミュレータスイートのワークフローを理解し、あなたはそれをインストールして設定ローカルエミュレータスイートをし、その見直しCLIコマンドを

Firebaseプロジェクトを選択してください

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

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

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

プロジェクトタイプ特徴エミュレーターで使用
本物

実際のFirebaseプロジェクトとは、(ほとんどの場合、Firebaseコンソールを介して)作成および構成したプロジェクトです。

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

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

あなたがエミュレートされていないすべての製品については、アプリとコードがライブリソース(データベースインスタンス、ストレージバケツ、機能、など)と相互に作用します。

デモ

デモFirebaseプロジェクトは本当Firebase設定なしのライブリソースを持っていません。これらのプロジェクトには通常、コードラボまたは他のチュートリアルを介してアクセスします。

デモプロジェクトのためのプロジェクトIDが持っているdemo-プレフィックスを。

デモFirebaseプロジェクト、アプリだけエミュレータを使用してコードの相互作用で作業する場合。アプリがエミュレーターが実行されていないリソースと対話しようとすると、そのコードは失敗します。

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

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

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

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

次のように、CloudStorageエミュレーターと対話するようにアプリ内構成またはテストクラスを設定します。

アンドロイド
FirebaseStorage.getInstance().useEmulator('10.0.2.2', 9199);
迅速
Storage.storage().useEmulator(withHost:"localhost", port:9199)
Web v8
var storage = firebase.storage();
storage.useEmulator("localhost", 9199);
Web v9
import { getStorage, connectStorageEmulator } from "firebase/storage";

const storage = getStorage();
connectStorageEmulator(storage, "localhost", 9199);

追加のセットアップは、テストのクラウド機能に必要とされていないクラウドストレージイベントによってトリガエミュレータを使用しました。 CloudStorageエミュレーターとCloudFunctionsエミュレーターの両方が実行されている場合、それらは自動的に連携します。

管理SDK

ときFirebase管理SDKが自動的にクラウドストレージへの接続エミュレータFIREBASE_STORAGE_EMULATOR_HOST環境変数が設定されます。

export FIREBASE_STORAGE_EMULATOR_HOST="localhost:9199"

CloudFunctionsエミュレーターはCloudStorageエミュレーターを自動的に認識するため、CloudFunctionsとCloudStorageエミュレーターの統合をテストするときにこの手順をスキップできます。環境変数は、CloudStorageのAdminSDKに自動的に設定されます。

他の環境からCloudStorageエミュレーターに接続する場合は、プロジェクトIDを指定する必要があります。あなたはにプロジェクトIDを渡すことができinitializeApp直接、または設定GCLOUD_PROJECT環境変数を。実際のFirebaseプロジェクトIDを使用する必要はないことに注意してください。クラウドストレージエミュレータは、それが持っているとして、任意のプロジェクトのIDを受け入れる有効な形式を

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

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

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

firebase emulators:export ./dir

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

firebase emulators:start --import=./dir

あなたは、エクスポートパスを指定するか、単にに渡されたパスのいずれかを使用して、シャットダウン時にエクスポートデータにエミュレータに指示することができ--importフラグ。

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

これらのデータのインポートとエクスポートのオプションはで動作firebase emulators:execだけでなく、コマンド。詳細については、を参照してください。エミュレータのコマンドリファレンス

CloudStorageエミュレーターと本番環境の違い

クライアントアプリのテストでは、CloudStorageエミュレーターはFirebaseAPIの表面積に関してほぼ完全に本番環境に対応しています。すべてのFirebaseコマンドは、通常のFirebase SDK(Web、Android、およびAppleプラットフォーム)間で機能することが期待されています。

サーバー側アプリのテストには、制限があります。 Firebase AdminSDKはGoogleCloud APIサーフェスを利用しており、このAPIのすべてのエンドポイントがエミュレートされるわけではありません。経験則として、クライアントSDKから実行できること(ファイルのアップロードまたは削除、メタデータの取得と設定)も、管理SDKから使用できるように実装されていますが、それ以外のことは実装されていません。注目すべき除外事項を以下に示します。

クラウドIAM

Firebase Emulator Suiteは、IAM関連の動作を複製または尊重して実行しようとはしません。エミュレーターは提供されているFirebaseセキュリティルールに準拠していますが、IAMが通常使用される状況では、たとえば、Cloud Functionsを呼び出すサービスアカウントを設定してアクセス許可を設定する場合、エミュレーターは構成できず、開発者のマシンでグローバルに利用可能なアカウントを使用します。ローカルスクリプトを直接実行するのと似ています。

Pub / Sub通知

CloudStorageエミュレーターはCloudPub / Subエミュレーターと統合されていないため、ストレージオブジェクトの変更に関するチャネル/通知の作成をサポートしていません。 Cloud FunctionsStorageトリガーを直接使用することをお勧めします。

バケットレベルのメタデータ

Cloud Storageエミュレーターは、ストレージクラス、バケットレベルのCORS構成、ラベル、保持ポリシーなどのバケットレベルの構成をサポートしていません。 Firebaseは、このサポートを徐々に改善する予定です。

次は何?