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 では、このセクションで説明する設定手順が必要です。これは、Cloud Functions シェルと
firebase emulators:start
のいずれを使用している場合も当てはまります。
エミュレートされる関数の管理者認証情報を設定するには:
- Google Cloud コンソールの [サービス アカウント] ペインを開きます。
- [App Engine デフォルト サービス アカウント] が選択されていることを確認し、右側のオプション メニューで [キーを作成] を選択します。
- プロンプトが表示されたら、キーのタイプとして JSON を選択し、[作成] をクリックします。
ダウンロードしたキーを参照するように 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 シェルを使用して関数を処理する
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
カスタム関数の構成変数を使用している場合は、最初にローカル環境でカスタムの構成を取得するコマンドを実行します(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 関数を呼び出す
シェルで 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 FCM registration 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
オプションに加えて、シェルにはパス内のワイルドカードのシミュレートで使用される 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', {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}})
シェルは 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'}})
アナリティクス関数を呼び出す
シェルで myAnalyticsFunction()
を実行することで、データなしでアナリティクス関数を呼び出すことができます。テストデータを使用して関数を実行するには、関数が必要とする特定のイベント データ フィールド用の変数を定義することをおすすめします。
var data = {
eventDim: [{
// populates event.data.params
params: {foo: {stringValue: 'bar'} },
// Also valid:
// {intValue: '10'}, {floatValue: '1.0'}, {doubleValue: '1.0'}
// 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 関数を呼び出す
Storage 関数と Auth 関数の場合は、関数の内部に表示するテストデータを使用してローカル関数を呼び出します。テストデータは、次に示す対応するデータ形式に従う必要があります。
- Cloud Storage の場合:
ObjectMetadata
- Authentication の場合:
UserRecord
コードに必要なフィールドのみを指定するか、関数の実行だけを行う場合はフィールドを指定しないでください。