Firebase Cloud Function をローカルで実行する

Cloud Function をローカルで実行する方法を用意してくれている: ローカルでの関数の実行  |  Firebase

手順はドキュメントに書いてある通りで簡単にできる。

firebase ライブラリの更新

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

ローカルデプロイ

まず Function を作る

これは https://my-firebase-url/sample?text=text にアクセスするとその text を返却するだけのもの。

index.js:

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);

exports.sample = functions.https.onRequest((req, res) => {
  const text = req.query.text;
  console.log(text);
  response.status(200);
});

ローカルデプロイ

$ firebase experimental:functions:shell
i  functions: Preparing to emulate functions.
✔  functions: sample
firebase >

これでデプロイ成功で対話モードになっているので、コマンドを入力する。
request の記法で動く。

firebase > sample.get('?text=text');
Sent request to function.
info: User function triggered, starting execution
info: text

RESPONSE RECEIVED FROM FUNCTION: 200, {"text":"text"}
info: Execution took 8 ms, user function completed successfully

こんな感じでローカルデバッグできる。

メリット

Cloud にデプロイするのちょっと時間がかかるし、ログ見るのも Cloud Function のログを見ないといけないのでだるいけど、ローカルデバッグだと関数書き換えたらリアルタイムデプロイ & ログがその場で見えるので手探りで開発するときには便利。
あと Cloud Function で外部 API と通信しようとするとお金がかかるけど(プラン変更が必要)、ローカルデプロイだと外部 API と通信もできた。

Cloud Function がローカルで動くというのがイケてて良い。