コンソールへ移動

関数をインタラクティブにテストする

Cloud Functions shell は、テストデータを使用して関数を呼び出すための対話型 shell です。このシェルはあらゆる種類のトリガーに対応しています。

管理者の認証情報を設定する(オプション)

関数のテストにおいて、Firebase Admin SDK を介して Google API や他の Firebase API とインタラクションするには、管理者の認証情報を設定しなければならない場合があります。

  • Cloud Firestore と Realtime Database のトリガーにはすでに十分な認証情報があるため、追加の設定は必要ありません
  • Firebase API(Authentication や FCM など)、Google API(Cloud Translation や Cloud Speech など)といった他のすべての API では、このセクションで説明する設定手順を実行する必要があります。これは、Functions shell と firebase serve のいずれを使用していても当てはまります。

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

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

    UNIX

    $ export GOOGLE_APPLICATION_CREDENTIALS="path/to/key.json"
    
    $ firebase functions:shell
    

    Windows

    $ set GOOGLE_APPLICATION_CREDENTIALS=path\to\key.json
    
    $ firebase functions:shell
    

上記の手順を完了すると、関数テストで Admin SDK を使用して Firebase API や Google API にアクセスできるようになります。たとえば、Authentication のトリガーをテストする場合は、エミュレートする関数で admin.auth().getUserByEmail(email) を呼び出すことができます。

Cloud Functions shell を使用して関数を処理する

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

myFunctionName(data, options)

data パラメータは、Realtime Database、Cloud Firestore、PubSub のトリガーでは必須です。これ以外の関数タイプではオプションです。また、オプションの options パラメータは、Realtime Database 関数と Cloud Firestore 関数でのみ有効です。

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

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 functions:shell

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

firebase functions:config:get > .runtimeconfig.json
# If using Windows PowerShell, replace the above with:
# firebase functions:config:get | ac .runtimeconfig.json
firebase functions:shell

HTTPS 関数を呼び出す

shell で 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' })

HTTPS 呼び出し可能ファンクションを呼び出す

HTTPS 呼び出し可能ファンクションをローカルで呼び出す場合は、適切なテストデータを提供する必要があります。

# invoke
myCallableFunction('test data')
myCallableFunction({'foo': 'bar'})

オプションで、Firebase-Instance-ID-token を 2 番目のパラメータとして渡すことができます。これには文字列を設定する必要があります。

# invoke with Instance ID token
myCallableFunction('test data', {instanceIdToken: 'sample token'})

context.auth のエミュレーションは現在利用できません。

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 オプションに加えて、shell にはパス内のワイルドカードのシミュレートで使用される params オプションが用意されています。

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

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

# to mock unauthenticated user
myDatabaseFunction('data', {authMode: 'USER'})
# to mock end user
myDatabaseFunction('data', {auth: {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’} })

data オブジェクトの before/after フィールドだけでなく、options オブジェクトの params フィールドを使用すると、ドキュメント名のワイルドカードをシミュレートできます。

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

shell は 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 のファンクションの場合は、ファンクションの内部に表示するテストデータを使用してローカル ファンクションを呼び出します。テストデータは対応するデータ形式に従う必要があります。

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