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

アプリを Cloud Storage for Firebase Emulator に接続する

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

アプリを 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 には、 demo-プレフィックスが付きます。

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

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

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

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

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

次のように、アプリ内構成またはテスト クラスを設定して、Cloud Storage for Firebase エミュレータとやり取りします。

Kotlin+KTX
Firebase.storage.useEmulator("10.0.2.2", 9199)
Java
FirebaseStorage.getInstance().useEmulator("10.0.2.2", 9199);
迅速
Storage.storage().useEmulator(withHost:"localhost", port:9199)
ウェブ v8
var storage = firebase.storage();
storage.useEmulator("localhost", 9199);
ウェブ v9
import { getStorage, connectStorageEmulator } from "firebase/storage";

const storage = getStorage();
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からは、 copydeletegetinsertlistpatchrewriteupdateのメソッドがサポートされています。

クラウド 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 エミュレーターの詳細については、関数をローカルで実行するを参照してください。