Extensions エミュレータを使用して拡張機能を評価する

アプリとともに Extensions エミュレータを使用する前に、Firebase Local Emulator Suite の全体的なワークフローを理解し、Local Emulator Suite のインストールと構成を行い、CLI コマンドを確認しておいてください。

また、このガイドでは、読者が Firebase Extensions に精通しており、Firebase アプリ内で Firebase Extensions を使用する方法についても熟知していることを前提としています。

Extensions エミュレータでできること

Extensions エミュレータを使用することによって、安全なローカル環境で拡張機能のインストールと管理を行い、請求額を最小限に抑えながらその機能を理解できます。エミュレータは拡張機能の関数をローカルに実行します。実行可能な関数には、Cloud Firestore、Realtime Database、Cloud Storage for Firebase、Authentication と Pub/Sub のエミュレータを使用するバックグラウンド イベント トリガー型関数、および Cloud Functions v2 に実装された、Eventarc トリガー型関数などがあります。

Firebase プロジェクトを選択する

Firebase Local Emulator Suite は、1 つの Firebase プロジェクト向けにプロダクトをエミュレートします。

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

Local Emulator Suite は、実際の Firebase プロジェクトとデモ プロジェクトのエミュレーションに対応しています。

プロジェクト タイプ 特長 エミュレータでの使用
実際

実際の Firebase プロジェクトとは、(通常は Firebase コンソールで)自分で作成および構成したプロジェクトのことです。

実際のプロジェクトには、データベース インスタンス、ストレージ バケット、関数など、その Firebase プロジェクト用にセットアップしたリソースのライブリソースが含まれています。

実際の Firebase プロジェクトを使用する場合、対応しているプロダクトの一部またはすべてに対してエミュレータを実行できます。

エミュレートしていないプロダクトに関しては、アプリとコードはライブリソース(データベース インスタンス、ストレージ バケット、関数など)とやり取りします。

デモ

デモ Firebase プロジェクトには、実際の Firebase 構成がなく、ライブリソースもありません。これらのプロジェクトには通常、Codelab またはその他のチュートリアルを介してアクセスします。

デモ プロジェクトのプロジェクト ID には demo- という接頭辞が付いています。

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

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

  • Firebase プロジェクトを作成せずにエミュレータを実行できるため、セットアップが簡単である
  • エミュレートされていない(本番環境の)リソースを誤って呼び出しても、データが変更されたり、使用量がカウントされたり、課金が発生したりする可能性がないため、安全性が高い
  • インターネットにアクセスして SDK 構成をダウンロードする必要がないため、オフラインでも使いやすい

拡張機能をインストールして評価する

Extensions エミュレータを使用して、拡張機能がニーズを満たしているかどうかを簡単に評価できます。

ここでは Trigger Email(firestore-send-email拡張機能に興味があると仮定していますが、以下のワークフローはどの拡張機能にも対応します。ローカル エミュレータで実行すると、Trigger Email は自動的に Cloud Firestore エミュレータと Cloud Functions エミュレータを使用します。

ローカルで拡張機能を評価するには:

  1. 拡張機能をローカルの拡張機能のマニフェストに追加します。拡張機能のマニフェストとは、拡張機能のインスタンスとその構成のリストです。

    firebase ext:install --local firebase/firestore-send-email

    上記のコマンドを実行すると、最新バージョンの firebase/firestore-send-email 拡張機能の構成と、マニフェストへの構成の保存を促すプロンプトが表示されますが、構成はプロジェクトにはデプロイされません。詳細については、マニフェストを使用して拡張機能の構成を管理するをご覧ください。

  2. 通常どおりに Local Emulator Suite を起動します。

    firebase emulators:start

マニフェストにリストされている firestore-send-email 拡張機能インスタンスが使用されます。Local Emulator Suite は、その拡張機能のソースコードを ~/.cache/firebase/extensions にダウンロードします。ソースコードのダウンロードが完了すると Local Emulator Suite が開始されます。これにより、拡張機能のバックグラウンドでトリガーされる任意の関数をトリガーしたり、アプリを Local Emulator Suite に接続して、そのアプリとの統合をテストしたりできるようになります。

Emulator Suite UI を使用して、メール ドキュメント コレクションにデータを追加したり、Trigger Email 拡張機能で必要な他のバックエンド リソースを設定したりできます。

継続的インテグレーションのワークフローなどの非対話型テスト環境では、拡張機能を評価するためのテスト スクリプトを作成し、必要な Cloud Firestore データの設定、関数のトリガーなどの操作を行うこともできます。次のように Local Emulator Suite を呼び出して、テスト スクリプトを実行します。

firebase emulators:exec my-test.sh

Extensions エミュレータを使用したテストと本番環境の違い

Extensions エミュレータを使用すると、本番環境とほぼ同じ方法で拡張機能をテストできます。ただし、本番環境の動作とは多少異なる点があります。

Cloud IAM

Firebase Emulator Suite は、実行において IAM 関連の動作を複製せず、考慮もしません。エミュレータは指定された Firebase セキュリティ ルールに従いますが、IAM が通常使用される状況では(たとえば、Cloud Functions を呼び出すサービス アカウントの設定、つまりは権限の設定)、エミュレータを構成できないため、開発マシンでグローバルに利用できるアカウントが使用されます。これは、ローカル スクリプトを直接実行するのと似た状況です。

トリガーの種類に関する制限

現在、Firebase Local Emulator Suite は、HTTP リクエスト トリガー型関数、拡張機能用の Eventarc カスタム イベント トリガー、Cloud Firestore、Realtime Database、Cloud Storage for Firebase、Authentication、Pub/Sub 用のバックグラウンド イベント トリガー型関数のみをサポートしています。他の種類のトリガー型関数を使用する拡張機能を評価するには、テスト用の Firebase プロジェクトに拡張機能をインストールする必要があります。

次のステップ