ローカルでの関数の実行

関数を本番環境にデプロイする前に、ローカルで実行してテストすることができます。関数をローカルで実行するには、次のいずれかを使用します。

  • Cloud Functions シェル。このツールはあらゆるタイプの関数トリガーをエミュレートし、テストデータを使用して関数を呼び出すための対話型シェルを備えています。
  • Firebase CLI の firebase serve コマンド。このツールは HTTPS 関数をエミュレートし、ローカル関数をトリガーするための URL を提供します。

どちらのツールでも、アクティブなセッション中に行ったコードの変更は、エミュレータによって自動的に再読み込みされます。

HTTPS 関数に Firebase serve を使用する

この機能を使用するには、firebase-tools のバージョン 3.8.0 以降と firebase-functions SDK のバージョン 0.5.7 以降が必要です。この両方を更新するには、プロジェクトの functions/ ディレクトリで次のコマンドを実行します。

npm install --save firebase-functions@latest firebase-admin
npm install -g firebase-tools

関数をローカルで実行するには、firebase serve コマンドを使用します。

firebase serve --only functions # to only emulate functions
firebase serve --only functions,hosting # to emulate both functions and hosting

このコマンドは Firebase Hosting のコンテンツを表示する URL と 各 HTTPS 関数の URL を出力します。Firebase Hosting のコンテンツを動的に生成する関数を使用している場合は、ホスティングのプロキシとしてローカル関数が使用されます。

Cloud Functions シェルを使用する

Cloud Functions シェルは、あらゆるタイプの関数トリガーをエミュレートし、テストデータを使用して関数を呼び出すための対話型シェルを備えています。オプションは関数のタイプによって異なりますが、基本的な使用形式は次のとおりです。

myFunctionName(data, options)

data パラメータは、Realtime Database トリガーと PubSub トリガーでは必須で、他のすべての関数タイプではオプションです。また、オプションの options パラメータは、Realtime Database 関数でのみ有効です。

必要に応じて、ローカル ファイルからテストデータを読み込むことができます。これを行うには、ファイルを変数として保存し、それを使用して次の関数を呼び出します。

var data = require('./path/to/testData.json');
myFunction(data);

Cloud Functions シェルをインストールして設定する

この機能を使用するには、firebase-tools のバージョン 3.11.0 以降と firebase-functions SDK のバージョン 0.6.2 以降が必要です。この両方を更新するには、プロジェクトの functions/ ディレクトリで次のコマンドを実行します。

npm install --save firebase-functions@latest
npm install -g firebase-tools

カスタム関数の設定変数を使用していない場合は、次のコマンドでシェルを実行します。

firebase experimental:functions:shell

カスタム関数の設定変数を使用している場合は、最初にカスタムの設定を取得するコマンドを実行(functions ディレクトリ内で実行)してから、シェルを実行します。

firebase functions:config:get > .runtimeconfig.json
firebase experimental:functions:shell

HTTPS 関数を呼び出す

シェルで HTTPS 関数を呼び出す場合、使用方法は request NPM モジュールと同じですが、request をエミュレートする関数の名前に置き換えます。例:

# invoke
myHttpsFunction()
myHttpsFunction.get()
myHttpsFunction.post()

# invoke at sub-path
myHttpsFunction('/path')
myHttpsFunction.get('/path')
myHttpsFunction.post('/path')

# send POST request with form data
myHttpsFunction.post('/path').form( {foo: 'bar' })

Realtime Database 関数を呼び出す

Realtime Database 関数をローカルで実行する場合、適切なテストデータを提供する必要があります。つまり、一般的には、onCreate オペレーションでは新しいテストデータ、onDelete オペレーションでは古くなった削除されるデータ、onUpdate 関数または onWrite 関数ではその両方を提供する必要があります。

# invoke onCreate function
myDatabaseFunction('new_data')

# invoke onDelete function
myDatabaseFunction('old_data')

# invoke onUpdate or onWrite function
myDatabaseFunction({before: 'old_data', after: 'new_data' })

before/after オプションに加えて、シェルにはパス内のワイルドカードをモックするのに使用する params オプションが用意されています。

# mock wildcards in path, for example: if the path was input/{group}/{id}
myDatabaseFunction('data', {params: {group: 'a', id: 123}})

デフォルトでは、シェルは管理者権限で Realtime Database 関数を実行します。代わりに特定のエンドユーザーとして、または認証されていないユーザーとして関数を実行するには、auth オプションを使用します。

# to mock unauthenticated user
myDatabaseFunction('data', {auth: {admin: false}}
# to mock end user
myDatabaseFunction('data', {auth: {variable: {uid: 'abcd'}}}

Firestore 関数を呼び出す

Firestore 関数をローカルで実行する場合、適切なテストデータを提供する必要があります。つまり、一般的には、onCreate オペレーションでは新しいテストデータ、onDelete オペレーションでは古くなった削除されるデータ、onUpdate 関数または onWrite 関数ではその両方を提供する必要があります。Firestore のデータは Key-Value ペアです。サポートされるデータ型を参照してください。

# invoke onCreate function
myFirestoreFunction({foo: ‘new’})

# invoke onDelete function
myFirestoreFunction({foo: ‘old’})

# invoke onUpdate or onWrite function
myFirestoreFunction({before: {foo: ‘old’}, after: {foo: ‘new’} })

before/after オプションに加えて、シェルにはドキュメント名のワイルドカードをモックするのに使用する params オプションが用意されています。

# mock wildcards in document name, for example: if the name was input/{group}/{id}
myFirestoreFunction({foo: ‘new’}, {params: {group: 'a', id: 123}})

シェルは Firestore の関数を常に管理者権限で実行します。したがって、作成 / 更新 / 削除のイベントは管理者ユーザーによって実行されたように見えます。

PubSub 関数を呼び出す

PubSub 関数では、Buffer インスタンスにメッセージ ペイロードを挿入し、オプションで次のようにデータ属性を追加します。

// invokes a function with the JSON message { hello: 'world' } and attributes { foo: 'bar' }
myPubsubFunction({data: new Buffer('{"hello":"world"}'), attributes: {foo: 'bar'}})

Analytics 関数を呼び出す

シェルで myAnalyticsFunction() を実行することで、データなしで Analytics 関数を呼び出すことができます。テストデータを使用して関数を実行するには、関数が必要とする特定のイベント データ フィールド用の変数を定義することをおすすめします。

var data = {
  eventDim: [{
    // populates event.data.params
    params:{foo:'bar'},
    // populates event.data.name
    name: 'event_name',
    // populates event.data.logTime, specify in microseconds
    timestampMicros: Date.now() * 1000,
    // populates event.data.previousLogTime, specify in microseconds
    previousTimestampMicros: Date.now() * 1000,
    // populates event.data.reportingDate, specify in 'YYYYMMDD' format
    date: '20170930',
    // populates event.data.valueInUSD
    valueInUsd: 230
  }],
  userDim: userDim
};

myAnalyticsFunction(data);

Storage、Auth、Crashlytics の関数を呼び出す

Storage、Auth、Crashlytics の関数の場合は、関数の内部に表示するテストデータを使用してローカル関数を呼び出します。テストデータは対応するデータ形式に従う必要があります。

コードに必要なフィールドのみを指定するか、関数の実行だけを行う場合はフィールドは指定しないでください。

ログ

firebase serve と Cloud Functions シェルの 2 つのツールでは、関数からそれを実行するターミナル ウィンドウにログをストリームします。ログには関数内の console.log()console.info()console.error()console.warn() ステートメントからのすべての出力が表示されます。

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。