Firebase CLI には、次の関数タイプをエミュレートできる Cloud Functions エミュレーターが含まれています。
- HTTPS 関数
- 呼び出し可能な関数
- Firebase Authentication、Realtime Database、Cloud Firestore、Cloud Storage、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 トリガーにはすでに十分な資格情報があり、追加の設定は必要ありません。
- Authentication や FCM などの Firebase API や、Cloud Translation や Cloud Speech などの Google API など、他のすべての API には、このセクションで説明するセットアップ手順が必要です。これは、Cloud Functions シェルを使用しているか、
firebase emulators:start
を使用しているかに関係なく適用されます。
エミュレートされた機能の管理者資格証明を設定するには:
- Google Cloud Console の [サービス アカウント] ペインを開きます。
- App Engine のデフォルト サービス アカウントが選択されていることを確認し、右側のオプション メニューを使用して [キーの作成] を選択します。
- プロンプトが表示されたら、キーの種類として [ JSON ] を選択し、 [作成] をクリックします。
ダウンロードしたキーを指すように、Google の既定の資格情報を設定します。
Unix
export GOOGLE_APPLICATION_CREDENTIALS="path/to/key.json" firebase emulators:start
ウィンドウズ
set GOOGLE_APPLICATION_CREDENTIALS=path\to\key.json firebase emulators:start
これらの手順を完了すると、関数テストはAdmin SDKを使用して Firebase と Google API にアクセスできるようになります。たとえば、認証トリガーをテストする場合、エミュレートされた関数は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
エミュレータ スイートを実行する
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);
迅速
Functions.functions().useFunctionsEmulator(origin: "http://localhost:5001")
Web version 9
import { getApp } from "firebase/app"; import { getFunctions, connectFunctionsEmulator } from "firebase/functions"; const functions = getFunctions(getApp()); connectFunctionsEmulator(functions, "localhost", 5001);
Web version 8
firebase.functions().useEmulator("localhost", 5001);
HTTPS 関数エミュレーション用にアプリをインストルメント化する
コード内の各 HTTPS 関数は、次の URL 形式を使用してローカル エミュレーターから提供されます。
http:// $HOST : $PORT / $PROJECT / $REGION / $NAME
たとえば、デフォルトのホスト ポートとリージョンを使用した単純なhelloWorld
関数は、次の場所で提供されます。
https://localhost:5001/ $PROJECT /us-central1/helloWorld
バックグラウンドでトリガーされる関数のエミュレーション用にアプリをインストルメント化する
Cloud Functions エミュレーターは、次のソースからバックグラウンドでトリガーされる関数をサポートしています。
- リアルタイム データベース エミュレータ
- Cloud Firestore エミュレータ
- 認証エミュレーター
- Pub/Sub エミュレータ
バックグラウンド イベントをトリガーするには、Emulator Suite UI を使用してバックエンド リソースを変更するか、プラットフォームの SDK を使用してアプリまたはテスト コードをエミュレーターに接続します。
拡張機能によって発行されたカスタム イベントのハンドラーをテストする
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 エミュレータに自動的に接続します。 「ローカル エミュレーター スイートの構成」で説明されているように、既定のポートを変更できます。
環境変数が適切に構成されている場合、Firebase Admin SDK はイベントを Eventarc エミュレーターに自動的に送信します。次に、Eventarc エミュレーターは Cloud Functions エミュレーターへのコールバックを行い、登録済みのハンドラーをトリガーします。
ハンドラー実行の詳細については、Emulator Suite UI で Functions ログを確認できます。
他のサービスとの相互作用
エミュレーター スイートには複数のエミュレーターが含まれており、製品間の相互作用をテストできます。
クラウド ファイアストア
Firebase Admin SDK を使用して Cloud Firestore に書き込む関数がある場合、これらの書き込みは Cloud Firestore エミュレータが実行されていれば、そのエミュレータに送信されます。これらの書き込みによってさらに関数がトリガーされると、それらは Cloud Functions エミュレーターで実行されます。
クラウドストレージ
Firebase Admin SDK (バージョン 9.7.0 以降) を使用して Cloud Storage に書き込む関数がある場合、これらの書き込みは Cloud Storage エミュレータが実行されていれば、そのエミュレータに送信されます。これらの書き込みによってさらに関数がトリガーされると、それらは Cloud Functions エミュレーターで実行されます。
Firebase 認証
Firebase Admin SDK (バージョン 9.3.0 以降) を使用して Firebase Authentication に書き込む関数がある場合、これらの書き込みは、実行中の Auth エミュレータに送信されます。これらの書き込みによってさらに関数がトリガーされると、それらは Cloud Functions エミュレーターで実行されます。
Firebase ホスティング
Cloud Functions を使用して Firebase Hosting の動的コンテンツを生成している場合、 firebase emulators:start
はローカルの HTTP 関数をホスティングのプロキシとして使用します。
ロギング
エミュレーターは、関数から、関数が実行されるターミナル ウィンドウにログをストリーミングします。関数内の console.log( console.log()
、 console.info()
、 console.error()
、およびconsole.warn()
ステートメントからのすべての出力が表示されます。
次のステップ
Firebase エミュレータ スイートの完全な使用例については、テスト クイックスタート サンプルを参照してください。