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

<ph type="x-smartling-placeholder"></ph>


Remote Config テンプレートは、JSON 形式のセットです。 すべてのパラメータと条件を指定します。マイページ アプリが値を取得するクライアント テンプレートを作成できる サーバー テンプレート。サーバー クライアントは、このテンプレートを使用して値をフェッチできます。

このセクションでは、クライアント テンプレートについて説明します。サーバー固有のテンプレートの詳細を得るには、[サーバー テンプレート] をクリックします。

Firebase コンソールを使用してテンプレートの変更と管理を行います。コンソールには、 グラフィカルな形式でテンプレートの内容を パラメータと [条件] タブ。

また、 Remote Config REST API と Admin SDK または Firebase CLI を使用して、 使用します。

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

{
  "parameters": {
    "preamble_prompt": {
      "defaultValue": {
        "value": "You are a helpful assistant who knows everything there is to know about Firebase! "
      },
      "description": "Add this prompt to the user's prompt",
      "valueType": "STRING"
    },
    "model_name": {
      "defaultValue": {
        "value": "gemini-pro-test"
      },
      "valueType": "STRING"
    },
    "generation_config": {
      "defaultValue": {
        "value": "{\"temperature\": 0.9, \"maxOutputTokens\": 2048, \"topP\": 0.9, \"topK\": 20}"
      },
      "valueType": "JSON"
    },
  },
  "version": {
    "versionNumber": "19",
    "isLegacy": true
  }
}

Firebase コンソールで次のバージョン管理タスクを実行できます。

テンプレート タイプごとに、保存される生涯バージョン数の上限は 300 個(300 個のクライアント テンプレートと 300 個のサーバー テンプレート)です。これには、削除されたテンプレートの保存バージョン番号も含まれます。プロジェクトの有効期間中にテンプレート タイプごとに 300 を超えるテンプレート バージョンを公開すると、最も古いバージョンが削除され、そのタイプのバージョンは最大 300 個まで維持されます。

パラメータを更新するたびに、Remote Config によって 新しくバージョニングされた Remote Config テンプレートを作成し、以前のテンプレートを 必要に応じて取得またはロールバックできるバージョンです。バージョン番号 Remote Config によって格納された初期値から順番にインクリメントされます。 図に示すように、すべてのテンプレートに version フィールドが含まれ、そのフィールドに関するメタデータが含まれています。 表示されます。

必要に応じて、Remote Config 個のテンプレートを 変更履歴 ページ上 Remote Config コンソール。

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

このセクションでは、Remote Config のバージョンを管理する方法について説明します。 使用します。

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

特定のエンティティのリストを取得できます。 保存されている Remote Config テンプレートのすべてのバージョン。操作:

Firebase コンソール

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

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

Firebase CLI

firebase remoteconfig:versions:list

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

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

Java

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

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:listVersions

テンプレートのリストには、更新の時刻、更新を行ったユーザー、更新方法など、保存されているすべてのバージョンのメタデータが含まれます。バージョン要素の例はこちらです:

```json
{
  "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 テンプレートのバージョン。保存されたテンプレートのバージョンを取得するには:

Firebase コンソール

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

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

Firebase CLI

firebase remoteconfig:get -v VERSION_NUMBER

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

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

Java

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

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

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

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

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

Firebase コンソール

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

Firebase CLI

firebase remoteconfig:rollback -v VERSION_NUMBER

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

Java

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

REST

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

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}'

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

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

Remote Config テンプレートの削除

Remote Config テンプレートは Firebase コンソールから削除できます。宛先 Remote Config テンプレートを削除します。

1.Remote Config より パラメータ [ 変更履歴
  1. 削除するテンプレートに切り替えて、 [その他] をクリックし、[削除] を選択します。

  2. 削除を確認するメッセージが表示されたら、[削除] をクリックします。

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

Remote Config 個のテンプレートをダウンロードして公開し、統合できます 管理、構成の更新の自動化、パラメータの保持、 複数のプロジェクトで同期できます

現在有効な Remote Config テンプレートをダウンロードできます Firebase コンソールから使用できます。 その後、 エクスポートして同じプロジェクトに公開するか、新規または できます。

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

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

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

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

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

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

以下を使用して、有効な Remote Config テンプレートを JSON 形式:

Firebase コンソール

  1. 取得元: Remote Config パラメータまたは条件 メニューを開き、 [Download current config file] を選択します。
  2. メッセージが表示されたら [構成ファイルのダウンロード] をクリックし、ファイルの保存場所を選択して [保存] をクリックします。

Firebase CLI

firebase remoteconfig:get -o filename

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

Java

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

REST

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 ファイルに出力します。

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

テンプレートの更新を公開する前に、 Firebase Admin SDK または REST API。新しいテンプレートの作成を試みると、テンプレートも Firebase CLI または Firebase コンソールから公開できます。

このテンプレート検証プロセスでは、パラメータや条件で重複しているキー、無効な条件名、存在しない条件、ETag の形式の誤りなどのエラーがチェックされます。たとえば、リクエストに最大許容数(2,000 個)を超えるキーが含まれる場合は、エラー メッセージ 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);
      });
}

Java

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

REST

テンプレートの更新を検証するには、公開リクエストの末尾に 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 ファイルからパラメータを削除してからテンプレートを公開すると、パラメータはサーバーから削除され、クライアントはそのパラメータを使用できなくなります。

公開すると、パラメータと値の変更内容はアプリとユーザーに即座に適用されます。必要に応じて、前のバージョンにロールバックできます。

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

Firebase コンソール

  1. 取得元: Remote Config パラメータまたは条件 メニューを開き、 [ファイルから公開] を選択します。
  2. プロンプトが表示されたら、[参照] をクリックし、 公開する Remote Config ファイルを選択し、[選択] をクリックします。
  3. ファイルが検証されます。検証が正常に完了した場合は、[公開] をクリックして構成をアプリとユーザーに即座に適用できます。

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

Java

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

REST

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 コマンドでは、コンテンツを指定するために「@」文字を使用し、その後にファイル名を続けます。

Remote Config 件のパーソナライズと条件が次に含まれています ダウンロードされるため、次の点に注意してください 別のプロジェクトに公開する際の制限事項:

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

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

  • 条件はプロジェクト間でインポートできますが、公開する前に、特定の条件値(アプリ ID やオーディエンスなど)がターゲット プロジェクトに存在している必要があります。

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

  • 公開するテンプレートに、Terraform に依存する条件が Google AnalyticsAnalytics がターゲットで有効になっている必要があります できます。

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

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

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

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

新しく作成される前に、Remote Config のデフォルトを定期的にダウンロードすることをおすすめします。 アプリをリリースして、アプリと Remote Config バックエンドを 同期できます。

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

REST

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. [Parameters] タブで メニューを開き、[デフォルト値をダウンロード] を選択します。
  2. メッセージが表示されたら、ダウンロードするファイル形式に対応するラジオボタンをクリックし、[ファイルをダウンロード] をクリックします。

Remote Config のデフォルト値を については、以下をご覧ください。