Firebase Functionsでデプロイしているバージョンを表示したい

おっす!オラFirebase好き彦!

いまやってる新規サービスはFirebase Functionsを使って開発してて毎日のようにデプロイしてるんだけど、妙な挙動に遭遇したときにそれがどのバージョン*1のFunctionで起こったことなのか特定する必要が出てきた。Functionが実行されるときにそのバージョンがわかればいいな〜と思ったんだけど、環境変数等でパッと取得できそうになかったのでデプロイされているバージョンのコミットハッシュをファイルに書き出して読み込むようにしてみたぞ!もっと良い方法があったら教えてくれよな!

1) コミットハッシュを生成するnpm taskを追加する

一番安直にgitコマンドでコミットハッシュを取ることにした。

<!-- functions/package.json -->

"scripts": {
  "commit_hash": "echo `git rev-parse HEAD` > COMMIT_HASH"
}

npm run commit_hash で動作確認する。 COMMIT_HASHecho 'COMMIT_HASH' >> ../.gitignore とでもしておこう。

2) デプロイ時にcommit_hashを実行する

predeploycommit_hash を追記する。

<!-- firebase.json -->

"functions": {
  "source": "functions",
  "predeploy": [
    "npm --prefix \"$RESOURCE_DIR\" run build",
    "npm --prefix \"$RESOURCE_DIR\" run commit_hash"
  ]
}

--prefix \"$RESOURCE_DIR\" がないとプロジェクトルートの package.json からタスクを探そうとするので注意。

3) Functionから読み込む

あとはFunctionから読み出してログに書くなりレスポンスに含めるなり好きにできる。

import { readFileSync } from 'fs'

function readCommitHash(): string {
    const commitHash: Buffer = readFileSync('COMMIT_HASH')
    return commitHash.toString('utf8')
}

4) deploy

$ firebase deploy

いや〜Firebaseっていいですねっ!

*1:Function自体のバージョンではなく自分のアプリケーションのバージョンね