概要
最近ABテストのためにRemote Configの設定を確認や更新する機会が多いが、ブラウザからでは面倒なためプログラムから行えないか調べた。
Remote Config API
Remote ConfigはAPIが公開されているため、プログラムから設定情報の取得と更新は簡単に行えそうだ。
サンプルコードを動かす
Node.jsのサンプルコードがあるのでこれを動かしてみる。
Firebaseプロジェクトとサービスアカウントの作成
Firebaseコンソールからプロジェクトを新規作成した。作成後、適当なRemote Configのパラメータを作成しておく。
次にサービスアカウントを作成する。サービスアカウントを自動で作成されていて、Firebaseコンソールで、[プロジェクトを設定] > [サービス アカウント]を開くと確認できる。
そこで、[新しい秘密鍵の生成] をクリックし、[キーを生成]をクリックするとキーがローカルにダウンロードされる。このキーをSDKの認証に使用する。
設定情報の取得
firebase/quickstart-nodejsをcloneし、configディレクトリに移動しnpm install
を実行する。
先ほどダウンロードしたキーを環境変数GOOGLE_APPLICATION_CREDENTIALS
にセットする。
$ export GOOGLE_APPLICATION_CREDENTIALS=path_to_key
そして、次のコマンドを実行するとRemote Configの設定情報がconfig.json
に保存される。
$ node index.js get
今回のサンプルプロジェクトの場合、次のようなjsonが取得できる。
{
"conditions":[],
"parameters":{
"sample":{
"defaultValue":{
"value":"test"
}
}
},
"parameterGroups":{},
"etag":"etag-123456789-1",
"version":{
"versionNumber":"1",
"updateOrigin":"CONSOLE",
"updateType":"INCREMENTAL_UPDATE",
"updateUser":{
"email":"update user email"
},
"updateTime":"Sun, 20 Dec 2020 10:17:55 GMT"
}
}
設定情報の更新
設定情報を取得できたので更新を行ってみる。先ほどのjsonを次のように変更する。
{
"conditions":[],
"parameters":{
"sample":{
"defaultValue":{
"value":"change from api"
}
}
},
"parameterGroups":{},
"etag":"etag-123456789-1",
"version":{
"versionNumber":"1",
"updateOrigin":"CONSOLE",
"updateType":"INCREMENTAL_UPDATE",
"updateUser":{
"email":"update user email"
},
"updateTime":"Sun, 20 Dec 2020 10:17:55 GMT"
}
}
そして、次のコマンドを実行する。
$ node index.js publish
実際に確認すると次のように変更されている。
cURLでの設定情報の取得
cURLコマンドでの設定情報の取得を試してみる。設定情報は、次のようにすることで取得できる。
curl --compressed -D headers -H "Authorization: Bearer ACCESS TOKEN" \
-X GET https://firebaseremoteconfig.googleapis.com/v1/projects/MY-PROJECT-ID/remoteConfig \
-o config.json
ここで、ACCESS TOKENはSDKを使用して取得する。firebase/quickstart-nodejs/confg/index.jsonにトークンを取得するコードが含まれているので、それを使用する。また、MY-PROJECT-IDには対象となるFirebaseプロジェクトのIDを指定する。
簡単にトークンが取得できるようindex.jsonの98行目以降を次のように変更する。
if (action && action === 'get') {
getTemplate();
} else if (action && action === 'publish') {
publishTemplate();
} else if (action && action === 'update') {
getAndUpdateTemplate();
} else if (action && action === 'accesstoken') {
getAccessToken().then(token => {
console.log(token);
});
} else {
console.log(
`
Invalid command. Please use one of the following:
node index.js get
node index.js publish
node index.js update
node index.js accesstoken
`
);
}
そして次のコマンドを実行するとトークンが得られる。
$ node index.js accesstoken
得られたトークンを使いcURLコマンドを実行すると設定情報を取得することができた。