Firebase Summit で発表されたすべての情報をご覧ください。Firebase を使用してアプリ開発を加速し、自信を持ってアプリを実行する方法を紹介しています。詳細

リモート構成テンプレートとバージョン管理

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

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

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

  {
    "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 テンプレートを作成し、必要に応じて取得またはロールバックできるバージョンとして以前のテンプレートを保存します。バージョン番号は、Remote Config で保存された初期値から順次インクリメントされます。すべてのテンプレートには、示されているようにversionフィールドが含まれており、その特定のバージョンに関するメタデータが含まれています。

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

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

Remote Config テンプレートを管理するときは、有効期限のしきい値に注意してください。アプリで使用されている現在アクティブな Remote Config テンプレートは期限切れになりませ。ただし、更新によって置き換えられた場合、以前のバージョンは 90 日間のみ保存され、その後は有効期限が切れて取得できなくなります。また、保存されるバージョンの合計は 300 に制限されています。これらの制限を超えてテンプレートを保存またはロールバックする場合は、手動で保存して保存してください。

Remote Config テンプレートのバージョンを管理する

このセクションでは、Remote Config テンプレートのバージョンを管理する方法について説明します。テンプレートをプログラムで作成、変更、保存する方法の詳細については、プログラムでRemote Configを変更する を参照してください。

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

保存されている 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);
    });
}

ジャワ

ListVersionsPage page = FirebaseRemoteConfig.getInstance().listVersionsAsync().get();
while (page != null) {
  for (Version version : page.getValues()) {
    System.out.println("Version: " + version.getVersionNumber());
  }
  page = page.getNextPage();
}

// Iterate through all versions. This will still retrieve versions in batches.
page = FirebaseRemoteConfig.getInstance().listVersionsAsync().get();
for (Version version : page.iterateAll()) {
  System.out.println("Version: " + version.getVersionNumber());
}

休み

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

Firebase コンソール

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

保存された各バージョンについて表示される詳細には、変更がコンソールで発生したか、REST API で発生したか、ロールバックから発生したか、またはテンプレートの強制保存による増分変更であったかに関する情報が含まれます。

Firebase CLI

firebase remoteconfig:versions:list

--limitオプションを使用して、返されるバージョンの数を制限します。すべてのバージョンを取得するには、'0' を渡します。

テンプレートのリストには、保存されているすべてのバージョンのメタデータが含まれています。これには、更新の時刻、作成したユーザー、および作成がコンソールまたは REST API のどちらで行われたかが含まれます。バージョン要素の例を次に示します。

{
  "versions": [{
    "version_number": "6",
    "update_time": "2022-05-12T02:38:54Z",
    "update_user": {
      "name": "Jane Smith",
      "email": "jane@developer.org",
      "imageUrl": "https://lh3.googleusercontent.com/a-/..."
    },
    "description": "One small change on the console",
    "origin": "CONSOLE",
    "update_type": "INCREMENTAL_UPDATE"
  }]

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

保存されている特定のバージョンの Remote Config テンプレートを取得できます。例えば:

Node.js

テンプレートの最新バージョンを取得するには、 getTemplate()を引数なしで渡します。特定のバージョンを取得するには、 getTemplateAtVersion()を使用します。

// 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);
  });

ジャワ

Template template = FirebaseRemoteConfig.getInstance().getTemplateAtVersionAsync(versionNumber).get();
// See the ETag of the fetched template.
System.out.println("Successfully fetched the template with ETag: " + template.getETag());

休み

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

URL パラメーター?version_numberは、 GET操作に対してのみ有効です。更新のバージョン番号を指定するために使用することはできません。 ?version_numberパラメーターを指定しない同様の get 要求は、現在アクティブなテンプレートを取得します。

Firebase コンソール

デフォルトでは、[変更履歴] タブの詳細ペインに現在アクティブなテンプレートが表示されます。リスト内の別のバージョンの詳細を表示するには、右側のメニューから選択します。

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

Firebase CLI

firebase remoteconfig:get -v VERSION_NUMBER

オプションで、 -o, FILENAMEを使用して指定したファイルに出力を書き込むことができます。

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

保存されているテンプレートの任意のバージョンにロールバックできます。例えば:

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);
  })

ジャワ

try {
  Template template = FirebaseRemoteConfig.getInstance().rollbackAsync(versionNumber).get();
  System.out.println("Successfully rolled back to template version: " + versionNumber);
  System.out.println("New ETag: " + template.getETag());
} catch (ExecutionException e) {
  if (e.getCause() instanceof FirebaseRemoteConfigException) {
    FirebaseRemoteConfigException rcError = (FirebaseRemoteConfigException) e.getCause();
    System.out.println("Error trying to rollback template.");
    System.out.println(rcError.getMessage());
  }
}

休み

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

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

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

Firebase コンソール

ロールバックの対象となる以前のテンプレート バージョンの場合、そのバージョンにロールバックするためのオプション ボタンが [変更履歴] ページの右上に表示されます。そのバージョンにロールバックし、すべてのアプリとユーザーに対してそれらの値をすぐに使用することが確実な場合にのみ、これをクリックして確認します。

Firebase CLI

firebase remoteconfig:rollback -v VERSION_NUMBER

このロールバック操作により、新しい番号付きバージョンが効果的に作成されることに注意してください。たとえば、バージョン 10 からバージョン 6 にロールバックすると、バージョン 6 の新しいコピーが効果的に作成されます。元のバージョンとは、バージョン番号が 11 であるという点だけが異なります。バージョン 11 がアクティブなテンプレートになります。

Remote Config テンプレートをダウンロードして公開する

Remote Config テンプレートをダウンロードして公開し、それらをソース管理とビルド システムに統合し、構成の更新を自動化し、複数のプロジェクト間でパラメーターと値を同期させます。

プログラムまたは Firebase コンソールから、現在アクティブな Remote Config テンプレートをダウンロードできます。その後、エクスポートされた JSON ファイルを更新して同じプロジェクトに公開するか、新規または既存のプロジェクトに公開できます。

開発、テスト、ステージング、本番環境など、ソフトウェア開発ライフサイクルのさまざまな段階を表す複数のプロジェクトがあるとします。この場合、完全にテストされたテンプレートをステージング プロジェクトからダウンロードして運用プロジェクトに発行することで、ステージング環境から運用環境に昇格させることができます。

この方法を使用して、あるプロジェクトから別のプロジェクトに構成を移行したり、確立されたプロジェクトのパラメーターと値を新しいプロジェクトに入力したりすることもできます。

A/B Testing 実験でバリアントとして特別に作成されたパラメーターとパラメーター値は、エクスポートされたテンプレートには含まれません。

Remote Config テンプレートをエクスポートおよびインポートするには:

  1. 現在の Remote Config Config テンプレートをダウンロードします。
  2. Remote Config テンプレートを検証します。
  3. Remote Config テンプレートを公開します。

現在の Remote Config テンプレートをダウンロードする

プログラムまたは Firebase コンソールを使用して、現在アクティブな Remote Config テンプレートをダウンロードできます。

次のコマンドを使用して、アクティブな Remote Config テンプレートを JSON 形式でダウンロードします。

Node.js

function getTemplate() {
  var config = admin.remoteConfig();
  config.getTemplate()
      .then(function (template) {
        console.log('ETag from server: ' + template.etag);
        var templateStr = JSON.stringify(template);
        fs.writeFileSync('config.json', templateStr);
      })
      .catch(function (err) {
        console.error('Unable to get template');
        console.error(err);
      });
}

ジャワ

Template template = FirebaseRemoteConfig.getInstance().getTemplateAsync().get();
// See the ETag of the fetched template.
System.out.println("ETag from server: " + template.getETag());

休み

curl --compressed -D headers -H "Authorization: Bearer token" -X GET https://firebaseremoteconfig.googleapis.com/v1/projects/my-project-id/remoteConfig -o filename

このコマンドは、JSON ペイロードを 1 つのファイルに出力し、ヘッダー (ETag を含む) を別のheadersファイルに出力します。

Firebase コンソール

  1. [ Remote Config Parameters or Conditions ] タブから、[ Menu ] を開き、[ Download current config file ] を選択します。
  2. プロンプトが表示されたら、[設定ファイルのダウンロード] をクリックし、ファイルを保存する場所を選択して、[保存] をクリックします。

Firebase CLI

firebase remoteconfig:get -o filename

Remote Config テンプレートを検証する

テンプレートの更新を公開する前に、Firebase Admin SDK または REST API を使用して検証できます。テンプレートは、Firebase CLI または Firebase コンソールから公開しようとしたときにも検証されます。

テンプレートの検証プロセスでは、パラメーターと条件の重複キー、無効な条件名または存在しない条件、不適切な形式の ETag などのエラーがチェックされます。たとえば、許可された数 (2000) を超えるキーを含むリクエストは、エラー メッセージParam count too largeを返します。

Node.js

function validateTemplate(template) {
  admin.remoteConfig().validateTemplate(template)
      .then(function (validatedTemplate) {
        // The template is valid and safe to use.
        console.log('Template was valid and safe to use');
      })
      .catch(function (err) {
        console.error('Template is invalid and cannot be published');
        console.error(err);
      });
}

ジャワ

try {
  Template validatedTemplate = FirebaseRemoteConfig.getInstance()
          .validateTemplateAsync(template).get();
  System.out.println("Template was valid and safe to use");
} catch (ExecutionException e) {
  if (e.getCause() instanceof FirebaseRemoteConfigException) {
    FirebaseRemoteConfigException rcError = (FirebaseRemoteConfigException) e.getCause();
    System.out.println("Template is invalid and cannot be published");
    System.out.println(rcError.getMessage());
  }
}

休み

URL パラメーター?validate_only=trueをパブリッシュ リクエストに追加して、テンプレートの更新を検証します。

curl --compressed -H "Content-Type: application/json; UTF8" -H "If-Match: last-returned-etag" -H "Authorization: Bearer token" -X PUT https://firebaseremoteconfig.googleapis.com/v1/projects/my-project-id/remoteConfig?validate_only=true -d @filename

テンプレートが正常に検証された場合、curl コマンドは送信した JSON テンプレートを返し、保存されたheadersファイルで、HTTP/2 ステータス 200 とサフィックス-0が付いた更新された ETag を見つけます。テンプレートが検証されなかった場合、JSON 応答で検証エラーを受け取り、 headersファイルには 200 以外の応答が含まれます (ETag は含まれません)。

Remote Config テンプレートを公開する

テンプレートをダウンロードし、JSON コンテンツに必要な変更を加えて検証したら、それをプロジェクトに公開できます。

テンプレートを発行すると、既存の構成テンプレート全体が更新されたファイルに置き換えられ、テンプレートのバージョンが 1 つ増えます。構成全体が置き換えられるため、JSON ファイルからパラメーターを削除して公開すると、そのパラメーターはサーバーから削除され、クライアントは使用できなくなります。

公開後、パラメーターと値への変更は、アプリとユーザーがすぐに利用できます。必要に応じて、以前のバージョンにロールバックできます。

次のコマンドを使用して、テンプレートを公開します。

Node.js

function publishTemplate() {
  var config = admin.remoteConfig();
  var template = config.createTemplateFromJSON(
      fs.readFileSync('config.json', 'UTF8'));
  config.publishTemplate(template)
      .then(function (updatedTemplate) {
        console.log('Template has been published');
        console.log('ETag from server: ' + updatedTemplate.etag);
      })
      .catch(function (err) {
        console.error('Unable to publish template.');
        console.error(err);
      });
}

ジャワ

try {
  Template publishedTemplate = FirebaseRemoteConfig.getInstance()
          .publishTemplateAsync(template).get();
  System.out.println("Template has been published");
  // See the ETag of the published template.
  System.out.println("ETag from server: " + publishedTemplate.getETag());
} catch (ExecutionException e) {
  if (e.getCause() instanceof FirebaseRemoteConfigException) {
    FirebaseRemoteConfigException rcError = (FirebaseRemoteConfigException) e.getCause();
    System.out.println("Unable to publish template.");
    System.out.println(rcError.getMessage());
  }
}

休み

curl --compressed -H "Content-Type: application/json; UTF8" -H "If-Match: last-returned-etag" -H "Authorization: Bearer token" -X PUT https://firebaseremoteconfig.googleapis.com/v1/projects/my-project-id/remoteConfig -d @filename

このcurlコマンドでは、「@」文字とそれに続くファイル名を使用してコンテンツを指定できます。

Firebase コンソール

  1. [ Remote Config パラメーターまたは条件] タブから、[ メニュー] を開き、[ファイルから公開] を選択します。
  2. プロンプトが表示されたら、[参照] をクリックし、公開する Remote Config ファイルに移動して選択し、[選択] をクリックします。
  3. ファイルが検証され、成功した場合は [発行] をクリックして、構成をアプリとユーザーがすぐに利用できるようにします。

ダウンロードしたテンプレートには Remote Config のパーソナライズと条件が含まれているため、別のプロジェクトに公開しようとする場合は、次の制限に注意することが重要です。

  • パーソナライゼーションをプロジェクトからプロジェクトにインポートすることはできません。

    たとえば、プロジェクトでパーソナライゼーションを有効にし、テンプレートをダウンロードして編集する場合、同じプロジェクトに発行できますが、テンプレートからパーソナライゼーションを削除しない限り、別のプロジェクトに発行することはできません。

  • 条件はプロジェクトからプロジェクトにインポートできますが、特定の条件値 (アプリ ID や対象ユーザーなど) は公開前にターゲット プロジェクトに存在する必要があることに注意してください。

    たとえば、 iOSのプラットフォーム値を指定する条件を使用する Remote Config パラメーターがある場合、プラットフォーム値はどのプロジェクトでも同じであるため、テンプレートを別のプロジェクトに発行できます。ただし、ターゲット プロジェクトに存在しない特定のアプリ ID またはユーザー オーディエンスに依存する条件が含まれている場合、検証は失敗します。

  • 公開する予定のテンプレートに Google アナリティクスに依存する条件が含まれている場合、対象プロジェクトでアナリティクスを有効にする必要があります。

Remote Config テンプレートのデフォルトのダウンロード

アプリは常にインターネットに接続されているとは限らないため、すべての Remote Config パラメーターに対してクライアント側アプリの既定値を構成する必要があります。また、アプリ クライアントのデフォルト値と Remote Config バックエンドのデフォルト パラメータ値は、時間の経過とともに変化する可能性があるため、定期的に同期する必要があります。

このセクションの最後にあるプラットフォーム固有のリンクで説明されているように、アプリでこれらの既定値を手動で設定するか、すべてのパラメーターのキーと値のペアとその既定値のみを含むファイルをダウンロードして、このプロセスを合理化できます。アクティブな Remote Config テンプレート。その後、このファイルをプロジェクトに含めて、これらの値をインポートするようにアプリを構成できます。

これらのファイルは、Android アプリの場合は XML 形式、iOS アプリの場合はプロパティ リスト (plist) 形式、Web アプリの場合は JSON でダウンロードできます。

アプリと Remote Config バックエンドの同期を維持するために、新しいアプリのリリース前に Remote Config のデフォルトを定期的にダウンロードすることをお勧めします。

テンプレートのデフォルトを含むファイルをダウンロードするには:

休み

curl --compressed -D headers -H "Authorization: Bearer token -X GET https://firebaseremoteconfig.googleapis.com/v1/projects/my-project-id/remoteConfig:downloadDefaults?format=file_format'

ダウンロードするファイル形式に応じて、 formatの値としてXMLPLIST 、またはJSONを使用します。

Firebase コンソール

  1. [パラメーター] タブで、[ メニュー] を開き、[既定値のダウンロード] を選択します。
  2. プロンプトが表示されたら、ダウンロードするファイル形式に対応するラジオ ボタンをクリックし、[ファイルのダウンロード] をクリックします。

Remote Config の既定値をアプリにインポートする方法の詳細については、次を参照してください。