Remote Config のパラメータと条件

Firebase コンソールまたは Remote Config バックエンド API の使用時に、1 つ以上のパラメータ(Key-Value ペア)を定義し、これらのパラメータのアプリ内デフォルト値を指定します。アプリ内デフォルト値は、サーバー側パラメータ値を定義してオーバーライドできます。パラメータキーとパラメータ値は文字列ですが、パラメータ値はアプリで値を使用するときに他のデータ型にキャストすることができます。

Firebase コンソール、Admin SDK または Remote Config REST API を使用して、パラメータの新しいデフォルト値を作成できます。また、アプリ インスタンスのグループのターゲット設定に使用する条件値を作成することもできます。Firebase コンソールで構成を更新するたびに、Remote Config テンプレートの新しいバージョンが作成されて公開されます。以前のバージョンは保存されるため、必要に応じて取得またはロールバックできます。これらのオペレーションは、Firebase コンソール、Firebase Admin SDK、REST API で行うことができます。詳細については、Remote Config テンプレートのバージョンを管理するをご覧ください。

このガイドでは、パラメータ、条件、ルール、条件値について説明します。また、Remote Config サーバーとアプリでのさまざまなパラメータ値の優先順位について説明します。さらには、条件の作成に使用されるルールのタイプについても詳しく説明します。

条件、ルール、条件値

条件は、アプリ インスタンスのグループをターゲットとして設定するために使用されます。条件は 1 つまたは複数のルールで構成され、特定のアプリ インスタンスに対して条件が true と評価されるには、すべてのルールが true と評価される必要があります。ルールの値が定義されていない場合(値が利用できない場合など)は、そのルールは false と評価されます。

たとえば、アプリのスプラッシュ ページを定義するパラメータでシンプルなルール if device_os = Android を使用して、OS の種類に基づいて異なる画像を表示できます。

iOS のデフォルト値と Android の条件付き値を示す Firebase コンソールの「splash_page」パラメータの画面キャプチャ

または、時間条件を使用して、アプリに特別なプロモーション アイテムを表示するタイミングを制御することもできます。

パラメータは、異なる条件を使用する複数の条件値を取ることができ、複数のパラメータが単一プロジェクト内の条件を共有できます。Firebase コンソールの [パラメータ] タブで、各パラメータの条件値の取得率を確認できます。この指標は、過去 24 時間に各値を受け取ったリクエストの割合を示します。

パラメータ値の優先順位

パラメータには複数の条件値が関連付けられる場合があります。次のルールによって、Remote Config サーバーからどの値をフェッチするか、また、特定のタイミングにおいて特定のアプリ インスタンスでどの値を使用するかが決定されます。

サーバー側パラメータ値がフェッチされる優先順位

  1. まず、特定のアプリ インスタンスに対して true と評価される条件があれば、その条件値が適用されます。複数の条件が true と評価される場合は、Firebase コンソール UI に表示される最初の(一番上の)条件が優先され、アプリがバックエンドから値をフェッチするときに、その条件に関連付けられた条件値が提供されます。条件の優先順位は、[条件] タブで条件をドラッグ&ドロップすることにより変更できます。

  2. 条件が true と評価される条件値が存在しない場合は、アプリがバックエンドから値をフェッチすると、サーバー側デフォルト値が提供されます。パラメータがバックエンドに存在しない場合、またはデフォルト値が [アプリ内デフォルト値を使用する] に設定されている場合は、アプリが値をフェッチしても、そのパラメータの値は提供されません。

アプリ内でパラメータ値が get メソッドによって返される優先順位

  1. バックエンドから値がフェッチされ、有効化された場合、アプリはそのフェッチされた値を使用します。有効化されたパラメータ値は永続的です。
  2. バックエンドから値がフェッチされなかった場合、または Remote Config バックエンドからフェッチされた値が有効化されていない場合、アプリはアプリ内デフォルト値を使用します。

    デフォルト値の取得と設定の詳細については、Remote Config テンプレートのデフォルトをダウンロードするをご覧ください。

  3. アプリ内デフォルト値が設定されていない場合、アプリは静的型の値(int の場合は 0boolean の場合は false など)を使用します。

この図には、Remote Config バックエンドとアプリ内でパラメータ値の優先順位がどのように決められるかがまとめられています。

上記の順序付きリストで説明されているフローを示す図

パラメータ値のデータ型

Remote Config ではパラメータごとにデータ型を選択できます。テンプレートの更新前に、サーバー側のすべての値はその型に照らし合わせて検証されます。データ型の格納と取得は getRemoteConfig リクエストで行われます。

現在サポートされている型は次のとおりです。

  • String
  • Boolean
  • Number
  • JSON

Firebase コンソールの UI では、パラメータキーの横にあるプルダウンでデータ型を選択できます。REST API では、パラメータ オブジェクト内の value_type フィールドを使用して型を設定できます。

パラメータ グループ

Remote Config を使用すると、パラメータをグループ化して UI とメンタルモデルを整理できます。

たとえば、新しいログイン機能をリリースする際に、3 種類の認証タイプを有効または無効にする必要があるとします。この場合、Remote Config を使用して、それぞれの認証タイプを必要に応じて有効にする 3 つのパラメータを作成し、これらのパラメータを「New login」という名前のグループにまとめると、接頭辞の追加や特殊な並び替えが不要になります。

パラメータ グループを作成するには、Firebase コンソールまたは Remote Config REST API を使用します。作成した各パラメータ グループには、Remote Config テンプレートで一意の名前が付けられます。パラメータ グループを作成する際は、次の点にご注意ください。

  • 各パラメータが属することができるグループは常に 1 つのみです。また、パラメータがグループに属していても、パラメータキーはすべてのパラメータで一意でなければなりません。
  • パラメータ グループ名の長さは 256 文字に制限されています。
  • REST API と Firebase コンソールの両方を使用する場合は、公開時にパラメータ グループを処理するように REST API ロジックを更新してください。

Firebase コンソールを使用してパラメータ グループを作成または変更する

Firebase コンソールの [パラメータ] タブで、パラメータをグループ化できます。グループを作成または変更するには:

  1. [グループを管理] を選択します。
  2. グループに追加するパラメータのチェックボックスをオンにして、[グループに移動] を選択します。
  3. 既存のグループを選択するか、新しいグループを作成します。新しいグループを作成する場合は、名前と説明を入力し、[新しいグループを作成] を選択します。グループを保存した後に [変更を公開] ボタンを使用すると、保存済みのグループを公開できます。

プログラムによってグループを作成する

Remote Config REST API を使用すると、自動的にパラメータ グループを作成して公開できます。REST を十分に理解していて、API に対するリクエストを承認するように設定している場合は、次の手順でグループをプログラムによって管理できます。

  1. 現在のテンプレートを取得します。
  2. パラメータ グループを表す JSON オブジェクトを追加します。
  3. HTTP PUT リクエストを使用してパラメータ グループを公開します。

parameterGroups オブジェクトにグループキーが含まれ、グループ化されたパラメータの説明とリストがネストされます。各グループキーはグローバルに一意である必要があります。

次の例は、pumpkin_spice_season パラメータのみが含まれるパラメータ グループ「new menu」を追加するテンプレート リビジョンからの抜粋です。

{
  "parameters": {},
  "version": {
    "versionNumber": "1",

    …


  },
  "parameterGroups": {
    "new menu": {
      "description": "New Menu",
      "parameters": {
        "pumpkin_spice_season": {
          "defaultValue": {
            "value": "true"
          },
          "description": "Whether it's currently pumpkin spice season."
        }
      }
    }
  }
}

条件ルールの種類

Firebase コンソールでサポートされるルールの種類は次のとおりです。Remote Config REST API にも同等の機能があります。詳しくは、条件式リファレンスをご覧ください。

ルールの種類演算子 注意事項
アプリ == Firebase プロジェクトに関連付けられたアプリのアプリ ID のリストから選択します。 アプリを Firebase に追加する場合、バンドル ID または Android パッケージ名を入力します。これらの情報により Remote Config ルールでアプリ ID として公開する属性が決まります。

この属性は、次のように使用します。
  • Apple プラットフォームの場合: アプリの CFBundleIdentifier を使用します。バンドル ID は、Xcode 内のアプリのプライマリ ターゲットの [General] タブにあります。
  • Android の場合: アプリの applicationId を使用します。applicationId はアプリレベルの build.gradle ファイルにあります。
アプリのバージョン 文字列値:
完全一致、
次を含む、
次を含まない、
正規表現

数値:
=、≠、>、≥、<、≤

ターゲットとするアプリのバージョンを指定します。

このルールを使用するには、事前にアプリ ID ルールを使って、Firebase プロジェクトに関連付けられている Android アプリまたは Apple アプリを選択する必要があります。

Apple プラットフォームの場合: アプリの CFBundleShortVersionString を使用します。

注: Apple アプリが Firebase Apple プラットフォーム SDK バージョン 6.24.0 以降を使用していることを確認してください。CFBundleShortVersionString はそれより前のバージョンでは送信されません(リリースノートを参照)。

Android の場合: アプリの versionName を使用します。

このルールの文字列の比較では大文字と小文字が区別されます。[完全一致]、[次を含む]、[次を含まない]、[正規表現] のいずれかの演算子を使用する場合は、複数の値を選択できます。

[正規表現] 演算子を使うときは、RE2 形式で正規表現を作成します。正規表現は対象バージョン文字列の全部または一部に一致させることができます。また、対象文字列の先頭、末尾、または全体と一致させるために ^$ アンカーを使うこともできます。

ビルド番号 文字列値:
完全一致、
次を含む、
次を含まない、
正規表現

数値:
=、≠、>、≥、<、≤

ターゲットとするアプリのビルドを指定します。

このルールを使用するには、事前にアプリ ID ルールを使って、Firebase プロジェクトに関連付けられている Apple アプリまたは Android アプリを選択する必要があります。

この演算子は Apple アプリと Android アプリでのみ使用でき、アプリの CFBundleVersion(Apple の場合)または versionCode(Android の場合)に対応します。このルールの文字列の比較では大文字と小文字が区別されます。

[完全一致]、[次を含む]、[次を含まない]、[正規表現] のいずれかの演算子を使用する場合は、複数の値を選択できます。

[正規表現] 演算子を使うときは、RE2 形式で正規表現を作成します。正規表現は対象バージョン文字列の全部または一部に一致させることができます。また、対象文字列の先頭、末尾、または全体と一致させるために ^$ アンカーを使うこともできます。

プラットフォーム == iOS
Android
ウェブ
 
オペレーティング システム ==

ターゲットとするオペレーティング システムを指定します。

このルールを使用するには、事前にアプリ ID ルールを使って、Firebase プロジェクトに関連付けられているウェブアプリを選択する必要があります。

このルールは、特定のウェブアプリ インスタンスに関して、オペレーティング システムとそのバージョンが指定したリストのターゲット値と一致する場合に true と評価されます。
ブラウザ ==

ターゲットとするブラウザを指定します。

このルールを使用するには、事前にアプリ ID ルールを使って、Firebase プロジェクトに関連付けられているウェブアプリを選択する必要があります。

このルールは、特定のウェブアプリ インスタンスに関して、ブラウザとそのバージョンが指定したリストのターゲット値と一致する場合に true と評価されます。
デバイス カテゴリ 等しい、等しくない モバイル このルールは、ウェブアプリにアクセスするデバイスがモバイルかモバイル以外(パソコンまたはコンソール)かを評価します。このルールタイプはウェブアプリでのみ使用できます。
言語 次の中に含まれる 1 つまたは複数の言語を選択します。 このルールは、リスト内にあるいずれかの言語を使用するデバイスに特定のアプリ インスタンスがインストールされている場合に、そのアプリ インスタンスに対して true と評価します。
国 / 地域 次の中に含まれる 1 つまたは複数の地域や国を選択します。 このルールは、特定のアプリ インスタンスが、一覧表示されている地域や国のいずれかにある場合に、そのアプリ インスタンスに対して true と評価します。デバイスの国コードは、リクエスト内のデバイスの IP アドレス、または Firebase 向け Google アナリティクスによって決定された国コード(アナリティクス データが Firebase と共有されている場合)を使用して決定されます。
ユーザー オーディエンス 次を 1 つ以上含む プロジェクトで設定した Google アナリティクスのオーディエンスから 1 人または複数のユーザーを選択します。

このルールを使用するには、アプリ ID ルールを使って、Firebase プロジェクトで関連付けられているアプリを選択する必要があります。

注: アナリティクスの多くのオーディエンスは、アプリユーザーの操作に基づくイベントまたはユーザー プロパティによって定義されるため、特定のアプリ インスタンスに対してユーザー層ルールが有効になるまで少し時間がかかる場合があります。

ユーザー プロパティ 文字列値:
次を含む、
次を含まない、
完全一致、
正規表現

数値:
=、≠、>、≥、<、≤

注: クライアントでは、ユーザー プロパティに関する文字列値のみを設定できます。数値演算子を使用する条件の場合、Remote Config は、対応するユーザー プロパティの値を整数または浮動小数点の数値に変換します。
利用可能な Google アナリティクスのユーザー プロパティの一覧から選択します。 ユーザー プロパティを使用してユーザー層の特定のセグメントをカスタマイズする方法については、Remote Config およびユーザー プロパティをご覧ください。

ユーザー プロパティの詳細については、以下のガイドをご覧ください。

[完全一致]、[次を含む]、[次を含まない]、[正規表現] のいずれかの演算子を使用する場合は、複数の値を選択できます。

[正規表現] 演算子を使うときは、RE2 形式で正規表現を作成します。正規表現は対象バージョン文字列の全部または一部に一致させることができます。また、対象文字列の先頭、末尾、または全体と一致させるために ^$ アンカーを使うこともできます。

注: 現在のところ、自動的に収集されるユーザー プロパティを Remote Config 条件の作成に使用することはできません。
ユーザー(ランダム %) Firebase コンソールでスライダーを使用。REST API では <=>between 演算子を使用。 0~100

このフィールドを使用して、アプリ インスタンスのランダムなサンプル(0.0001% 程度のサンプルサイズ)に対して変更を適用します。ランダムにシャッフルされたユーザー(アプリ インスタンス)をグループにセグメント分割するにはスライダー ウィジェットを使用します。

各アプリ インスタンスはプロジェクトで定義されたシードに従って、ランダムな整数または小数に永続的にマッピングされます。

シード値を変更しない限り、ルールではデフォルトのキー(Firebase コンソールでは [シードを編集] と表示されます)が使用されます。[シード] フィールドをクリアすると、ルールでデフォルトのキーを使用するように戻すことができます。

指定したパーセンテージ範囲で同じアプリ インスタンスを一貫性をもって扱うには、複数の条件で同じシード値を使用します。新しいシードを指定すると、指定されたパーセンテージ範囲でランダムに割り当てられるアプリ インスタンスの新しいグループを選択できます。

たとえば、重複しない 5% のアプリのユーザーにそれぞれ適用される 2 つの関連する条件を作成するには、1 つの条件を 0%~5% のパーセンテージに対応するように構成し、別の条件を 5%~10% の範囲に対応するように構成します。同じユーザーが両方のグループにランダムで含まれることを許可するには、それぞれの条件のルールで異なるシード値を使用します。

インポートしたセグメント 次の中に含まれる インポートしたセグメントを 1 つ以上選択します。 このルールでは、カスタムのインポートしたセグメントを設定する必要があります。
日時 前、後 デバイスのタイムゾーンまたは "(GMT+11) Sydney time" などの指定されたタイムゾーンで指定された日時。 現在の時刻とデバイスで取得された時刻を比較します。
初回起動 前、後 指定されたタイムゾーンで指定された日時。

指定された期間内に最初に対象のアプリを起動したユーザーと一致します。

次の SDK が必要です。

  • Google アナリティクス向け Firebase SDK
  • Apple プラットフォーム SDK v9.0.0 以降または Android SDK v21.1.1 以降(Firebase BoM v30.3.0 以降)

インストール ID 次の中に含まれる ターゲットとするインストール ID を 1 つ以上指定します(最大 50 個)。 このルールは、インストールの ID が値のカンマ区切りリストに含まれている場合に、そのインストールに対して true と評価します。

インストール ID を取得する方法については、クライアント ID を取得するをご覧ください。
ユーザーが存在する (演算子なし) 現在のプロジェクト内におけるすべてのアプリのすべてのユーザーが対象になります。

この条件ルールは、アプリやプラットフォームに関係なく、プロジェクト内のすべてのユーザーと一致させる場合に使用します。

パラメータと条件の検索

Firebase コンソールで、Remote Config の [パラメータ] タブの上部にある検索ボックスを使用して、プロジェクトのパラメータキー、パラメータ値、条件を検索できます。

パラメータと条件の制限

Firebase プロジェクト内には、最大 2,000 個のパラメータ、最大 500 個の条件を設定できます。パラメータキーの長さは最大 256 文字で、アンダースコアまたはアルファベット(A~Z、a~z)で始める必要があります。数字を使用することもできます。プロジェクト内のパラメータ値文字列の合計長は、1,000,000 文字以内にする必要があります。

パラメータと条件の変更を表示する

Remote Config テンプレートに対する最新の変更は、Firebase コンソールで確認できます。個々のパラメータと条件ごとに、次のことが可能です。

  • パラメータまたは条件を最後に更新したユーザーの名前を確認します。

  • 変更が同じ日に行われた場合は、アクティブな Remote Config テンプレートに変更を公開してから経過した分数または時間数を表示します。

  • 変更が過去 1 日以上前に行われた場合は、変更がアクティブな Remote Config テンプレートに公開された日付を表示します。

パラメータの更新

Remote Config の [パラメータ] ページでは、最終公開日列に、各パラメータを最後に変更したユーザーと、変更の最終公開日が表示されます。

  • グループ化されたパラメータの変更メタデータを表示するには、パラメータ グループを展開します。

  • 公開日で昇順または降順で並べ替えるには、[最終公開日] 列ラベルをクリックします。

条件の更新

Remote Config の [条件] ページでは、その条件を最後に変更したユーザーとその変更日を、各条件の下の [最終更新日] の横で確認できます。

次のステップ

Firebase プロジェクトの構成を開始するには、Firebase Remote Config プロジェクトの設定についての記事をご覧ください。