Check out what’s new from Firebase at Google I/O 2022. Learn more

アプリをCloudStorageEmulatorに接続します

アプリをCloudStorageエミュレーターに接続する前に、 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構成やライブリソースはありません。これらのプロジェクトには通常、コードラボまたは他のチュートリアルを介してアクセスします。

デモプロジェクトのプロジェクト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イベントによってトリガーされるクラウド機能をテストするために追加のセットアップは必要ありません。 CloudStorageエミュレーターとCloudFunctionsエミュレーターの両方が実行されている場合、それらは自動的に連携します。

管理SDK

FIREBASE_STORAGE_EMULATOR_HOST環境変数が設定されている場合、FirebaseAdminSDKは自動的にCloudStorageエミュレーターに接続します。

export FIREBASE_STORAGE_EMULATOR_HOST="localhost:9199"

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

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

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プラットフォーム)間で機能することが期待されています。

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

クラウドIAM

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

Pub/Sub通知

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

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

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

次は何?