Remote Config テンプレートとバージョニング

Remote Config テンプレートは、Firebase プロジェクト用にユーザーが作成する、JSON 形式のパラメータと条件のサーバー側セットです。このテンプレートは Firebase コンソールを使用して変更や管理を行うことができます。Firebase コンソールの [パラメータ] タブと [条件] タブには、テンプレートの内容がグラフィカルに表示されます。Remote Config バックエンド API を使用して構成の変更や管理を行うこともできます。

テンプレート ファイルの例を次に示します。

  {
    "conditions": [
      {
        "name": "ios",
        "expression": "device.os == 'ios'"
      }
    ],
    "parameters": {
      "welcome_message": {
        "defaultValue": {
          "value": "Welcome to this sample app"
        },
        "conditionalValues": {
          "ios": {
            "value": "Welcome to this sample iOS app"
          }
        }
      },
      "welcome_message_caps": {
        "defaultValue": {
          "value": "false"
        }
      },
      "header_text": {
        "defaultValue": {
          "useInAppDefault": true
        }
      }
    },
    "version": {
      "versionNumber": "28",
      "updateTime": "2020-05-14T18:39:38.994Z",
      "updateUser": {
        "email": "user@google.com"
      },
      "updateOrigin": "CONSOLE",
      "updateType": "INCREMENTAL_UPDATE"
    }
  }

パラメータを更新するたびに新しいバージョンの Remote Config テンプレートが作成されます。前のテンプレートは、必要に応じて再取得またはロールバックできるバージョンとして保存されます。バージョン番号は、Remote Config によって保存された初期値から順に増えていきます。例に示すとおり、すべてのテンプレートに version フィールドがあり、その特定のバージョンに関するメタデータが含まれています。

Firebase コンソールまたは Remote Config バックエンド API を使用して、次のバージョン管理タスクを行うことができます。

  • 保存されているすべてのテンプレート バージョンの一覧表示
  • 特定のバージョンの再取得
  • 特定のバージョンへのロールバック

Remote Config テンプレートを管理するときは有効期限に注意してください。作成日から 90 日間が有効期間の上限です。また、保存できるバージョンの数は合計 300 までです。これらの制限を超えてテンプレートの保存やロールバックが必要となる場合は、手動で保存してください。アプリで使用中の現在アクティブな Remote Config テンプレートが期限切れになることはありません。ただし、テンプレートのアップデートにより、作成から 90 日を超えてアクティブだったテンプレートが置き換えられた場合は、(有効期限が切れているため)再取得することはできません。

Firebase コンソールで Remote Config テンプレートのバージョンを管理する

Firebase コンソールのグラフィカル インターフェースを使用して、テンプレート バージョンの一覧表示と詳細表示を行うことができます。また、必要に応じてロールバックすることもできます。これらのタスクを実行するには:

  1. [Parameters] タブで、右上に表示される時計アイコンを選択します。[変更履歴] ページが開き、保存されているすべてのテンプレート バージョンが右側のリストメニューに一覧表示されます。

  2. デフォルトでは、現在アクティブなテンプレートが詳細ペインに表示されます。一覧内の別のバージョンの詳細情報を表示するには、右のメニューからそのバージョンを選択します。

    保存されているバージョンごとに表示される詳細情報には、変更の発生理由(コンソール、REST API、ロールバックのいずれかによる変更、またはテンプレートの強制保存による増分変更)が含まれます。

  3. 現在選択されているバージョンと保存されている別のバージョンの詳細な差分を表示するには、選択されていないバージョンのコンテキスト メニューにカーソルを合わせて、[選択したバージョンと比較] を選択します。

  4. ロールバック可能な以前のテンプレート バージョンを選択すると、そのバージョンにロールバックするためのオプション ボタンがページの右上に表示されます。そのバージョンにロールバックし、すべてのアプリとユーザーに対してすぐにその値を使用する必要がある場合のみ、このボタンをクリックして確定してください。

バックエンド API を使用して Remote Config テンプレートのバージョンを管理する

このセクションでは、REST API と Firebase Admin SDK を使用して Remote Config テンプレートのバージョンを管理する方法について説明します。プログラムでテンプレートを作成、変更、保存する方法について詳しくは、プログラムによって Remote Config を変更するをご覧ください。

保存されているすべての Remote Config テンプレートのバージョンを一覧表示する

Remote Config バックエンド API を使用して、保存されているすべての Remote Config テンプレート バージョンの一覧を取得できます。次に例を示します。

Node.js

function listAllVersions() {
  admin.remoteConfig().listVersions()
    .then((listVersionsResult) => {
      console.log("Successfully fetched the list of versions");
      listVersionsResult.versions.forEach((version) => {
        console.log('version', JSON.stringify(version));
      });
    })
    .catch((error) => {
      console.log(error);
    });
}

REST

curl --compressed -D headers -H "Authorization: Bearer <var>token</var>" -X GET https://firebaseremoteconfig.googleapis.com/v1/projects/<var>my-project-id</var>:listVersions

レスポンスには、保存されているすべてのバージョンのメタデータが含まれます。メタデータには、アップデートの時刻、作成したユーザー、コンソールと REST API のどちらを使用して作成されたかなどが含まれます。バージョン要素の例を次に示します。

{
  "versions": [{
    "version_number": "6",
    "update_time": "2018-05-12T02:38:54Z",
    "update_user": {
      "email": "jane@developer.org",
    },
    "description": "One small change on the console",
    "origin": "CONSOLE",
    "update_type": "INCREMENTAL_UPDATE"
  }]

Remote Config テンプレートの特定のバージョンを取得する

Remote Config バックエンド API を使用して、保存されている Remote Config テンプレートの任意のバージョンを取得できます。テンプレートの最新バージョンを取得するには、引数なしで getTemplate() を渡します。特定のバージョンを取得するには、getTemplateAtVersion() を使用します。次に例を示します。

Node.js

// Get template version: 6
admin.remoteConfig().getTemplateAtVersion('6')
  .then((template) => {
    console.log("Successfully fetched the template with ETag: " + template.etag);
  })
  .catch((error) => {
    console.log(error);
  });

REST

curl --compressed -D headers -H "Authorization: Bearer <var>token</var>" -X GET https://firebaseremoteconfig.googleapis.com/v1/projects/<var>my-project-id</var>/remoteConfig?version_number=6</pre>

URL パラメータ ?version_numberGET オペレーションでのみ有効です。これを使用してアップデートのバージョン番号を指定することはできません。?version_number パラメータがない同様の get リクエストを使用すると、現在アクティブなテンプレートが取得されます。

保存されている特定の Remote Config テンプレート バージョンにロールバックする

Remote Config バックエンド API を使用して、保存されている任意のバージョンのテンプレートにロールバックできます。次に例を示します。

Node.js

// Roll back to template version: 6
admin.remoteConfig().rollback('6')
  .then((template) => {
    console.log("Successfully rolled back to template version 6.");
    console.log("New ETag: " + template.etag);
  })
  .catch((error) => {
    console.log('Error trying to rollback:', e);
  })

REST

保存されている Remote Config テンプレートにロールバックするには、カスタム メソッド :rollback を使用し、適用する特定のバージョンをリクエスト本文に指定して HTTP POST を発行します。次に例を示します。

curl --compressed -D headers -H "Authorization: Bearer <var>token</var>" -X POST https://firebaseremoteconfig.googleapis.com/v1/projects/<var>my-project-id</var>/remoteConfig:rollback -d '{"version_number": 6}'</pre>

レスポンスには、アクティブになった保存済みテンプレートの内容と、その新しいバージョンのメタデータが含まれます。

このロールバック操作を行うと、実際には新しい番号のバージョンが作成されることに注意してください。たとえば、バージョン 10 からバージョン 6 にロールバックすると、実際にはバージョン 6 の新しいコピーが作成されます。この新しいコピーは元のバージョンと同じですが、バージョン番号が 11 であるという点のみ異なります。有効期限が切れていないと仮定すると、元のバージョン 6 は保存されたままで、バージョン 11 がアクティブなテンプレートになります。