Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

ローカルでの関数の実行

Firebase CLI には、次のタイプの関数をエミュレートできる Cloud Functions エミュレータが含まれています。

  • HTTPS 関数
  • 呼び出し可能関数
  • Authentication、Realtime Database、Cloud Firestore、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 では、このセクションで説明する設定手順を行う必要があります。これは、Functions シェルと firebase emulators:start のいずれを使用している場合も当てはまります。

エミュレートされる関数の管理者認証情報を設定するには:

  1. Google Cloud Console の [サービス アカウント] ペインを開きます。
  2. App Engine デフォルト サービス アカウントが選択されていることを確認し、右側のオプション メニューで [キーを作成] を選択します。
  3. プロンプトが表示されたら、キーのタイプとして JSON を選択し、[作成] をクリックします。
  4. ダウンロードしたキーを参照するように 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

エミュレータ スイートを実行する

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 エミュレータとのやり取りを次のように構成します。

Android
        // 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);
iOS - Swift
Functions.functions().useFunctionsEmulator(origin: "http://localhost:5001")

ウェブ バージョン 9

import { getApp } from "firebase/app";
import { getFunctions, connectFunctionsEmulator } from "firebase/functions";

const functions = getFunctions(getApp());
connectFunctionsEmulator(functions, "localhost", 5001);

ウェブ バージョン 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 エミュレータは、次のソースからバックグラウンドでトリガーされる関数をサポートします。

  • Realtime Database エミュレータ
  • Cloud Firestore エミュレータ
  • Authentication エミュレータ
  • Pub/Sub エミュレータ

バックグラウンド イベントをトリガーするには、お使いのプラットフォーム用の SDK を使用してアプリまたはテストコードをエミュレータに接続します。

他のサービスとのインタラクション

エミュレータ スイートには複数のエミュレータが含まれており、プロダクト間のインタラクションをテストできます。

Cloud Firestore

Firebase Admin SDK を使用して Cloud Firestore に書き込む Cloud Functions がある場合、Cloud Firestore エミュレータが実行されていれば、この書き込みはエミュレータに送信されます。この書き込みによってさらに Cloud Functions がトリガーされると、それらは Cloud Functions エミュレータ内で実行されます。

Firebase Hosting

Cloud Functions を使用して Firebase Hosting の動的コンテンツを生成する場合、firebase emulators:start ではローカルの HTTP 関数がホスティングのプロキシとして使用されます。

ロギング

エミュレータは関数からのログを実行中のターミナル ウィンドウにストリーミングします。関数内の console.log()console.info()console.error()console.warn() のステートメントからの出力がすべて表示されます。

次のステップ

Firebase Emulator Suite の完全な使用例については、テスト用クイックスタート サンプルをご覧ください。