Firebase Remote Config をプログラム経由で更新する
Firebase Remote Config をプログラム経由で更新したい理由
簡単にアプリをアップデートせずに設定値などを後から変更できて便利なRemote Configですが、Firebase Webコンソールで手動で設定することが多いと思います。
しかし、この場合、同一アプリを環境ごとにFirebaseプロジェクト分けている時に同じ設定をそれら複数のプロジェクトに適用させるのが面倒かつミスするリスクもあります。
そのため、プログラム経由で適用させられるようにしておくと便利です。
以前はREST APIしか無くて少し面倒でしたが、最近Admin SDKでも操作できるようになったりでより簡単に組めるようになったのでそのやり方を紹介します。
The Firebase Blog: Manage your Remote Config templates from the Admin Node.js SDK
初めは手動で設定してPublish
とりあえず、Firebase Webコンソール上の操作で貼った画像のようにしてPublishします。
Publish済みのRemote ConfigのJSONを取得
Firebase CLIを使うと簡単に現在PublishされているRemote ConfigのJSONを取得できます。
firebase remoteconfig:get --output remoteConfig.json
remoteConfig.json
:
{
"parameterGroups": {
"mono": {
"parameters": {
"foo": {
"defaultValue": {
"value": "bar"
}
}
}
}
}
}
設定値を変更してみる
そのまま他のFirebaseプロジェクトに適用したいだけなら変更操作は不要ですが、きちんと反映されるかの確認も兼ねて、今回は値をbar
からbar2
に変更してみます。
{
"parameterGroups": {
"mono": {
"parameters": {
"foo": {
"defaultValue": {
"value": "bar2"
}
}
}
}
}
}
デプロイ
functions/src/script/remoteConfig.ts
あたりに以下のスクリプトを置きます。
import * as admin from 'firebase-admin'
import * as fs from 'fs'
import * as util from 'util'
export async function publish() {
admin.initializeApp()
const config = admin.remoteConfig()
var currentTemplate = await config.getTemplate()
const templateJson = {
...JSON.parse(fs.readFileSync('remoteConfig.json', 'utf8')),
// 更新操作に必要
etag: currentTemplate.etag,
}
config.publishTemplate(
config.createTemplateFromJSON(JSON.stringify(templateJson))
)
console.log(util.inspect(templateJson, { depth: null }))
}
ざっくり次のような流れです。
- デプロイ済みのテンプレートを取得して
etag
を得る - 上で用意した
remoteConfig.json
に、更新操作に必要なetag
を設定 - デプロイ
実行の仕方は色々あると思いますが、tsc
でビルドして、node -e 'require("./lib/script/remoteConfig").publish()'
などがお手軽です。
初めはFirebase CLIだけでデプロイまでできるのかなと期待してましたが、Admin SDKでの操作が必要でした。上記の通り、etag
の設定が必要でそれはCLI操作だと厳しいからかなと想像しています。
確認すると、bar2
に変わりました🎉
ポチポチ手作業せずに済むようになって良かったですね🐶
Discussion