Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

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

クラウドストレージエミュレーターにアプリを接続する前に、あなたがいることを確認して、全体的な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、iOS、およびWeb SDK

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

アンドロイド
FirebaseStorage.getInstance().useEmulator('10.0.2.2', 9199);
iOS-Swift
Storage.storage().useEmulator(withHost:"localhost", port:9199)
Web v8
var storage = firebase.storage();
storage.useEmulator("localhost", 9199);
Web v9(ベータ版)
import { getStorage, useStorageEmulator } 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、iOS)間で機能することが期待されています。

サーバー側アプリのテストには、制限があります。 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は、このサポートを徐々に改善する予定です。

次は何?