Firebase CLI には、次のタイプの関数をエミュレートできる Cloud Functions エミュレータが含まれています。
- HTTPS 関数
- 呼び出し可能関数
- タスクキュー関数
- Firebase Authentication、Realtime Database、Cloud Firestore、Cloud Storage、サポートされている Firebase アラート、Cloud Pub/Sub からトリガーされるバックグラウンド関数。
関数を本番環境にデプロイする前に、ローカルで実行してテストできます。
Firebase CLI をインストールする
Cloud Functions エミュレータを使用するには、まず Firebase CLI をインストールします。
npm install -g firebase-tools
ローカル エミュレータを使用するには、Cloud Functions が以下に依存している必要があります。
firebase-admin
バージョン8.0.0
以降。firebase-functions
バージョン3.0.0
以降。
管理者の認証情報を設定する(省略可)
関数のテストにおいて、Firebase Admin SDK を介して Google API や他の Firebase API とやり取りするには、管理者の認証情報を設定しなければならない場合があります。
- Cloud Firestore トリガーと Realtime Database のトリガーにはすでに十分な認証情報があるため、追加の設定は必要ありません。
- Firebase API(Authentication や FCM など)、Google API(Cloud Translation や Cloud Speech など)といった他のすべての API では、このセクションで説明する設定手順が必要です。これは、Cloud Functions シェルと
firebase emulators:start
のいずれを使用している場合も当てはまります。
エミュレートされる関数の管理者認証情報を設定するには:
- Google Cloud コンソールの [サービス アカウント] ペインを開きます。
- [App Engine デフォルト サービス アカウント] が選択されていることを確認し、右側のオプション メニューで [キーを作成] を選択します。
- プロンプトが表示されたら、キーのタイプとして JSON を選択し、[作成] をクリックします。
ダウンロードしたキーを参照するように Google のデフォルトの認証情報を設定します。
Unix
export GOOGLE_APPLICATION_CREDENTIALS="path/to/key.json" firebase emulators:start
Windows
set GOOGLE_APPLICATION_CREDENTIALS=path\to\key.json firebase emulators:start
上記の手順を完了すると、関数テストで Admin SDK を使用して Firebase API や Google API にアクセスできるようになります。たとえば、Authentication のトリガーをテストする場合は、エミュレートされる関数で admin.auth().getUserByEmail(email)
を呼び出すことができます。
関数の構成を設定する(省略可)
カスタム関数の構成変数を使用している場合は、最初にローカル環境でカスタムの構成を取得するコマンドを実行します(functions
ディレクトリ内で実行します)。
firebase functions:config:get > .runtimeconfig.json # If using Windows PowerShell, replace the above with: # firebase functions:config:get | ac .runtimeconfig.json
Emulator Suite を実行する
Cloud Functions エミュレータを実行するには、emulators:start
コマンドを使用します。
firebase emulators:start
emulators:start
コマンドは、ローカル プロジェクトで firebase
init
を使用して初期化したプロダクトに基づいて、Cloud Functions、Cloud Firestore、Realtime Database、Firebase Hosting のエミュレータを起動します。特定のエミュレータを起動する場合は --only
フラグを使用します。
firebase emulators:start --only functions
エミュレータの起動後にテストスイートやテスト スクリプトを実行する場合は、emulators:exec
コマンドを使用します。
firebase emulators:exec "./my-test.sh"
アプリを計測可能にしてエミュレータと通信する
エミュレータとやり取りするためにアプリを計測可能にするには、追加の構成が必要になる場合があります。
呼び出し可能関数用にアプリをインストルメント化する
プロトタイプとテストのアクティビティに呼び出し可能なバックエンド関数が含まれる場合、Cloud Functions for Firebase エミュレータとのやり取りを次のように構成します。
Kotlin+KTX
// 10.0.2.2 is the special IP address to connect to the 'localhost' of // the host computer from an Android emulator. val functions = Firebase.functions functions.useEmulator("10.0.2.2", 5001)
Java
// 10.0.2.2 is the special IP address to connect to the 'localhost' of // the host computer from an Android emulator. FirebaseFunctions functions = FirebaseFunctions.getInstance(); functions.useEmulator("10.0.2.2", 5001);
Swift
Functions.functions().useFunctionsEmulator(origin: "http://127.0.0.1:5001")
Web
import { getApp } from "firebase/app"; import { getFunctions, connectFunctionsEmulator } from "firebase/functions"; const functions = getFunctions(getApp()); connectFunctionsEmulator(functions, "127.0.0.1", 5001);
Web
firebase.functions().useEmulator("127.0.0.1", 5001);
HTTPS 関数のエミュレーション用にアプリを計測可能にする
コード内の各 HTTPS 関数は、次の URL 形式を使用してローカル エミュレータから実行されます。
http://$HOST:$PORT/$PROJECT/$REGION/$NAME
たとえば、デフォルトのホストのポートとリージョンが指定された単純な helloWorld
関数は、次の場所で実行されます。
https://localhost:5001/$PROJECT/us-central1/helloWorld
タスクキュー関数のエミュレーション用にアプリをインストルメント化する
エミュレータは、トリガー定義に基づいてエミュレートされたタスクキューを自動的に設定します。Admin SDK は、CLOUD_TASKS_EMULATOR_HOST
環境変数を介してエミュレータが実行されていることを検出すると、キューに登録されたリクエストをエミュレータに再ルーティングします。
本番環境で使用されるディスパッチ システムは、エミュレータに実装されているシステムよりも複雑であるため、エミュレートされた動作が本番環境を正確に反映するとは限りません。エミュレータ内のパラメータにより、タスクがディスパッチされて再試行されるレートの上限が指定されます。
バックグラウンドでトリガーされる関数のエミュレーション用にアプリをインストルメント化する
Cloud Functions エミュレータは、次のソースからバックグラウンドでトリガーされる関数をサポートします。
- Realtime Database エミュレータ
- Cloud Firestore エミュレータ
- Authentication エミュレータ
- Pub/Sub エミュレータ
- Firebase アラート エミュレータ
バックグラウンド イベントをトリガーするには、Emulator Suite UI を使用してバックエンド リソースを変更します。または、プラットフォームの SDK を使用して、アプリまたはテストコードをエミュレータに接続します。
Extensions から出力されるカスタム イベントのハンドラをテストする
Cloud Functions v2 で Firebase Extensions カスタム イベントを処理するために実装された関数の場合、Cloud Functions エミュレータは Eventarc エミュレータとペアになることで Eventarc トリガーをサポートします。
イベントを出力する拡張機能のカスタム イベント ハンドラをテストするには、Cloud Functions エミュレータと Eventarc エミュレータをインストールする必要があります。
Eventarc エミュレータが走行している場合、Cloud Functions ランタイムは現在のプロセスで EVENTARC_EMULATOR
環境変数を localhost:9299
に設定します。EVENTARC_EMULATOR
環境変数が設定されている場合、Firebase Admin SDK は Eventarc エミュレータに自動的に接続します。デフォルト ポートは、Local Emulator Suite の構成の説明に沿って変更できます。
環境変数が適切に構成されると、Firebase Admin SDK はイベントを Eventarc エミュレータに自動送信します。次に、Eventarc エミュレータは Cloud Functions エミュレータにコールバックし、登録済みのハンドラをトリガーします。
Emulator Suite UI で Functions のログを調べて、ハンドラの実行に関する詳細を確認できます。
他のサービスとのインタラクション
Emulator Suite には複数のエミュレータが含まれており、プロダクト間のインタラクションをテストできます。
Cloud Firestore
Firebase Admin SDK を使用して Cloud Firestore に書き込む関数がある場合、Cloud Firestore エミュレータが実行されていれば、この書き込みはエミュレータに送信されます。この書き込みによってさらに関数がトリガーされると、それらは Cloud Functions エミュレータ内で実行されます。
Cloud Storage
Firebase Admin SDK(バージョン 9.7.0 以降)を使用して Cloud Storage に書き込む関数がある場合、Cloud Storage エミュレータが実行されていれば、この書き込みはエミュレータに送信されます。この書き込みによってさらに関数がトリガーされると、それらは Cloud Functions エミュレータ内で実行されます。
Firebase Authentication
Firebase Admin SDK(バージョン 9.3.0 以降)を使用して Firebase Authentication に書き込む関数がある場合、Auth エミュレータが実行されていれば、この書き込みはエミュレータに送信されます。この書き込みによってさらに関数がトリガーされると、それらは Cloud Functions エミュレータ内で実行されます。
Firebase Hosting
Cloud Functions を使用して Firebase Hosting の動的コンテンツを生成する場合、firebase emulators:start
ではローカルの HTTP 関数がホスティングのプロキシとして使用されます。
Firebase アラート
サポートされている Firebase アラート トリガーが 1 つ以上含まれているプロジェクトでは、エミュレータ UI に [FireAlerts] タブが表示されます。アラート トリガーをエミュレートするには:
- [FireAlerts] タブを開きます。このタブには、トリガーが関連付けられているアラートタイプがプルダウンに表示されます(たとえば、onNewFatalIssuePublished トリガーがある場合は、crashlytics.newFatalIssue が表示されます)。
- アラートタイプを選択します。フォームにはデフォルト値が自動的に入力されます。この値は編集できます。イベントのフィールドは編集できます(アラート イベントのその他の情報は、推測値、モック値、またはランダムに生成された値です)。
- [アラートを送信] を選択して、合成アラートを関数エミュレータに送信します。ロギングは、Firebase コンソールの [アラート](およびログ)で確認できます。
ロギング
エミュレータは関数からのログを実行中のターミナル ウィンドウにストリーミングします。関数内の console.log()
、console.info()
、console.error()
、console.warn()
のステートメントからの出力がすべて表示されます。
次のステップ
Firebase Emulator Suite の完全な使用例については、テスト用クイックスタート サンプルをご覧ください。