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_HASH
は echo 'COMMIT_HASH' >> ../.gitignore
とでもしておこう。
2) デプロイ時にcommit_hashを実行する
predeploy
に commit_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自体のバージョンではなく自分のアプリケーションのバージョンね