A/B Testing で Firebase Remote Config テストを作成する

アクティブなユーザーベースを持つアプリを更新し、Firebase Remote Config を使用して push する際は、慎重に行う必要があります。まず、次のことを明確にします。

  • ユーザー エクスペリエンスを最適化する機能を実装する最善の方法。アプリストアでアプリの評価が下がって初めて、新たなユーザー エクスペリエンスや新機能の評判が悪いことに気がついた、という話は珍しくありません。A/B テストを実施すれば、ユーザーがアプリの新しい機能バリアントを気に入るか、現状のままを望んでいるかを評価できます。また、大半のユーザーをコントロール グループに含めることで、テスト結果が出るまで、ユーザーベースの大半は動作や外観の変更による影響を受けることなくアプリを使い続けられます。
  • ビジネス目標のためにユーザー エクスペリエンスを最適化する最善の方法。収益や維持率などの指標を最大化するために、製品の変更を実装する場合があります。A/B テストでビジネス目標を設定すると、Firebase は統計分析を行い、選択した目標に対してバリアントのパフォーマンスがコントロール グループより優れているかどうかを判断します。

コントロール グループを使って機能バリアントの A/B テストを実施するには:

  1. テストを作成します。
  2. テストデバイスでテストを検証します。
  3. テストを管理します。

テストの作成

Remote Config のテストでは、1 つ以上の Remote Config パラメータの複数のバリアントを評価できます。

  1. Firebase にログインし、データ共有設定を更新して、データ共有が有効になっていることを確認します。データを共有しないと、テストでアナリティクス データにアクセスできません。
  2. Firebase コンソールのナビゲーション バーで [拡大] を展開し、[A/B Testing] をクリックします。
  3. [テストを作成] をクリックし、テストするサービスの選択を求めるメッセージが表示されたら [Remote Config] を選択します。
  4. テストの [名前] とオプションの [説明] を入力し、[次へ] をクリックします。
  5. [ターゲット設定] の各フィールドに入力します。最初に、そのテストを使用するアプリを選択します。以下のオプションを選択すると、テストに参加するユーザーのサブセットをターゲットに設定することもできます。

    • バージョン: アプリの 1 つ以上のバージョン。
    • ユーザー: テスト対象とする可能性のあるユーザーをターゲットとして設定するために使用する、アナリティクスのユーザー層。
    • ユーザー プロパティ: テスト対象とする可能性のあるユーザーを選択するための、1 つ以上のアナリティクス ユーザー プロパティ。
    • 予測: 機械学習で予測された、特定の動作に関与するユーザー グループ。
    • 国 / 地域: テスト対象とする可能性のあるユーザーを選択するための 1 つ以上の国またはリージョン。
    • デバイスの言語: テスト対象とする可能性のあるユーザーを選択するために使用する、1 つ以上の言語とロケール。
  6. [ターゲット ユーザーの割合] の設定: テストのコントロール グループと 1 つ以上のバリアントの間で均等に分散させる、[ターゲット ユーザー] で設定した条件に一致するアプリのユーザーベースの割合を入力します。これは 0.01%~100% の任意のパーセント値にできます。ユーザーは、重複したテストを含む各テストにランダムに割り当てられます。

  7. アナリティクス イベントを最初にトリガーしたユーザーのみがテストでカウントされるようにアクティベーション イベントを設定し、[次へ] をクリックします(省略可)。

  8. テストの目標については、メインの追跡対象の指標を選択し、プルダウン リストから任意の指標を追加します。これには組み込みの目標(エンゲージメント、購入、収益、維持率など)、アナリティクスのコンバージョン イベント、その他のアナリティクス イベントなどがあります。終了したら、[次へ] をクリックします。

  9. [バリアント] セクションでは、コントロール グループと、テストで使用する 1 つ以上のバリアントを選択します。テストで使用するパラメータを [選択または新規作成] リストから 1 つ以上追加します。これまで Firebase コンソールで使用されていなかったパラメータを作成することもできますが、そのパラメータを適用するにはアプリに含める必要があります。この手順を繰り返すことで、複数のパラメータをテストに追加できます。

    各バリアントについてバリアント レベルのターゲティングを追加することもできます。ここでは、テストレベルで使用可能なターゲティング オプションと同じリストからバージョンユーザーユーザー プロパティ予測国 / 地域デバイスの言語を選択できます。

  10. (省略可)複数のバリアントをテストに追加するには、[別のバリアントを追加] をクリックします。

  11. 特定のバリアントのパラメータを変更します。未変更のパラメータは、テスト対象でないユーザーのパラメータと同じになります。

  12. [レビュー] をクリックしてテストを保存します。

プロジェクトあたり最大 100 個のテストを使用できます。その内訳は、実行中のテストが最大 24 個まで、残りは下書きまたは完了済みのテストになります。

テストデバイスでテストを検証する

各 Firebase アプリのインストールには、インスタンス ID トークン(登録トークンとも呼ばれます)が関連付けられています。このトークンを使用して、アプリがインストールされているテストデバイス上の特定のテスト バリアントをテストできます。テストデバイスでテストを検証する方法を次に示します。

  1. 次のようにインスタンス ID トークンを取得します。

    Swift

    InstanceID.instanceID().instanceID { (result, error) in
      if let error = error {
        print("Error fetching remote instance ID: \(error)")
      } else if let result = result {
        print("Remote instance ID token: \(result.token)")
        self.instanceIDTokenMessage.text  = "Remote InstanceID token: \(result.token)"
      }
    }
    

    Objective-C

    [[FIRInstanceID instanceID] instanceIDWithHandler:^(FIRInstanceIDResult * _Nullable result,
                                                        NSError * _Nullable error) {
      if (error != nil) {
        NSLog(@"Error fetching remote instance ID: %@", error);
      } else {
        NSLog(@"Remote instance ID token: %@", result.token);
        NSString* message =
          [NSString stringWithFormat:@"Remote InstanceID token: %@", result.token];
        self.instanceIDTokenMessage.text = message;
      }
    }];
    

    Java

    FirebaseInstanceId.getInstance().getInstanceId()
            .addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
                @Override
                public void onComplete(@NonNull Task<InstanceIdResult> task) {
                    Log.d("IID_TOKEN", task.getResult().getToken());
                }
            });

    Kotlin+KTX

    FirebaseInstanceId.getInstance().instanceId
            .addOnSuccessListener { result ->
                Log.d("IID_TOKEN", result.token)
            }

    C++

    firebase::InitResult init_result;
    auto* instance_id_object = firebase::instance_id::InstanceId::GetInstanceId(
        firebase::App::GetInstance(), &init_result);
    instance_id_object->GetToken().OnCompletion(
        [](const firebase::Future<std::string>& future) {
          if (future.status() == kFutureStatusComplete &&
              future.error() == firebase::instance_id::kErrorNone) {
            printf("Instance ID Token %s\n", future.result()->c_str());
          }
        });
    

    Unity

    Firebase.InstanceId.FirebaseInstanceId.DefaultInstance.GetTokenAsync().ContinueWith(
      task => {
        if (!(task.IsCanceled || task.IsFaulted) && task.IsCompleted) {
          UnityEngine.Debug.Log(System.String.Format("Instance ID Token {0}", task.Result));
        }
      });
    
  2. Firebase コンソールのナビゲーションバーで [A/B Testing] をクリックします。
  3. [下書き] をクリックして、テストのタイトルをクリックします。
  4. [テストの概要] で [詳細] をクリックします。
  5. [テストデバイスを管理] をクリックし、テストデバイスのインスタンス ID トークンを入力して、そのテストデバイスに送信するテスト バリアントを選択します。
  6. アプリを実行して、選択したバリアントがテストデバイスで受信されていることを確認します。

インスタンス ID トークンの詳細については、FIRInstanceID(iOS)または FirebaseInstanceId(Android)をご覧ください。

テストを管理する

テストの作成に Remote Config、Notifications Composer、Firebase アプリ内メッセージングのいずれを使用しても、テストを検証して開始し、実行中のテストをモニタリングできます。また、実行中のテストの対象ユーザーを増やすこともできます。

テストが終わったら、最も有効なバリアントで使用された設定をメモして、その設定をすべてのユーザーに適用できます。または、別のテストを実行することもできます。

テストを開始する

  1. Firebase コンソールのナビゲーション バーで [拡大] を展開し、[A/B Testing] をクリックします。
  2. [下書き] をクリックしてから、テストのタイトルをクリックします。
  3. テストの対象とするユーザーがアプリに含まれていることを確認するには、[ターゲティングと配信] セクションで 0% を超える数値(たとえばユーザーの 1% が条件に一致しているなど)を確認します。
  4. テストを変更するには、[編集] をクリックします。
  5. テストを開始するには、[テストを開始] をクリックします。プロジェクトごとに一度に最大 24 個のテストを実行できます。

テストのモニタリング

しばらくテストを実行したら進行状況をチェックして、これまでにテストに参加したユーザーに関する結果を確認できます。

  1. Firebase コンソールのナビゲーション バーで、[拡大]、[A/B Testing] の順にクリックします。
  2. [実行中] をクリックし、テストのタイトルをクリックします。このページでは、目標指標やその他の指標など、実行中のテストに関するさまざまな統計情報を表示できます。指標ごとに次の情報を利用できます。

    • 改善: ベースライン(コントロール グループとも呼ばれます)と比較した場合の、特定のバリアントに関する指標の改善の測定結果。バリアントの値の範囲をベースラインの値の範囲と比較することで計算されます。
    • ベースラインを上回る可能性: 特定のバリアントが選択された指標のベースラインを上回ることが推定される可能性。
    • 最良のバリアントである可能性: 特定のバリアントが選択された指標の他のバリアントを上回ることが推定される可能性。
    • ユーザー 1 人あたりの値: テスト結果に基づき、時間の経過とともに指標の値が収まることが予測される範囲。
    • 合計値: コントロール グループまたはバリアントの観測累積値。この値は、各テスト バリアントがどれだけ適切に実行されているかの測定や、改善値の範囲ベースラインを上回る可能性最良のバリアントである可能性の計算に使用されます。測定される指標に応じて、この列には「ユーザー 1 人あたりの時間」、「維持率」、「コンバージョン率」と表示されます。
  3. テストの対象とするユーザー数を増やすには、[配信数を増加] をクリックし、より大きな割合を選択して、対象となるユーザーをテストに追加します。

  4. テストを一定期間(少なくとも 24 時間)実行すると、このページのデータによって、どのバリアントが「リーダー」であるかが示されます(存在する場合)。一部の測定には、データを視覚的に表現する棒グラフも表示されます。

すべてのユーザーにテストを適用する

目標指標に対する「リーダー」、つまり最良のバリアントを見つけるのに十分な期間テストを実行したら、次は全ユーザーにテストを適用します。これにより、すべてのユーザーを対象に公開するバリアントを選択できるようになります。実施したテストによって明確な候補が示されなかった場合でも、バリアントをすべてのユーザーに適用できます。

  1. Firebase コンソールのナビゲーション バーで、[拡大]、[A/B Testing] の順にクリックします。
  2. [完了] または [実行中] をクリックしてから、すべてのユーザーに適用するテストをクリックし、コンテキスト メニュー(more_vert)、[バリアントを展開] の順にクリックします。
  3. 次のいずれかの手順に沿って、すべてのユーザーにテストを適用します。

    • Notifications Composer を使用するテストの場合は、[メッセージ送信] ダイアログを使用して、テストに参加しなかった残りのターゲット ユーザーにメッセージを送信します。
    • Remote Config テストの場合は、ダイアログを使用して、すべてのユーザーに対して変更する Remote Config パラメータ値を決定します。
    • アプリ内メッセージングのテストの場合、ダイアログを使用して、スタンドアロンのアプリ内メッセージング キャンペーンとして展開する必要があるバリアントを特定します。選択すると、FIAM 作成画面にリダイレクトされます。必要であれば、公開前に変更を行うことができます。

テストを拡大する

A/B Testing でリーダーが宣言されない理由が被験者の不足にあると思われる場合は、テストの対象範囲を拡大し、アプリのユーザーベースに対する割合を増やすことができます。

  1. Firebase コンソールのナビゲーション バーで、[拡大]、[A/B Testing] の順にクリックします。
  2. [実行中] をクリックし、テストにカーソルを合わせてコンテキスト メニュー(more_vert)をクリックしてから、[配信数を増加] をクリックします。
  3. コンソールには、現在実行中のテストに参加しているユーザーの割合を増やすためのオプションを示すダイアログが表示されます。現在の割合より大きい数値を入力し、[送信] をクリックします。指定したユーザーの割合まで、テストが拡大されます。

テストを複製または中止する

  1. Firebase コンソールのナビゲーション バーで、[拡大]、[A/B Testing] の順にクリックします。
  2. [完了] または [実行中] をクリックし、テストにカーソルを合わせてコンテキスト メニュー(more_vert)をクリックしてから、[複製] または [停止] をクリックします。

ユーザー ターゲティング

次のユーザー ターゲティング条件を使用して、テストに含めるユーザーをターゲット設定します。

ターゲティング条件 演算子 メモ
バージョン 次を含む、
次を含まない、
完全に一致する、
正規表現を含む
テストに含める 1 つ以上のアプリ バージョンの値を入力します。

[次を含む]、[次を含まない]、[完全に一致する] のいずれかの演算子を使用する場合は、カンマ区切りの値リストを指定できます。

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

ユーザー 以下をすべて含む、
以下を 1 つ以上含む、
以下をすべて含まない、
以下の少なくとも 1 つを含まない
1 名以上のアナリティクス ユーザーを選択して、テスト対象とする可能性のあるユーザーをターゲット設定します。  
ユーザー プロパティ テキスト:
次を含む、
次を含まない、
完全一致、
正規表現を含む

数字:
<、≤、=、≥、>
アナリティクスのユーザー プロパティは、テスト対象とする可能性のあるユーザーを選択するために使用します。ユーザー プロパティ値の選択についてはさまざまなオプションがあります。

クライアントでは、ユーザー プロパティに関する文字列値のみを設定できます。数値演算子を使用する条件の場合、Remote Config サービスは、対応するユーザー プロパティの値を整数または浮動小数点の数値に変換します。
[正規表現を含む] 演算子を使用する場合は、正規表現を RE2 形式で作成できます。正規表現は対象バージョン文字列の全部または一部に一致させることができます。また、対象文字列の先頭、末尾、または全体と一致させるために ^$ アンカーを使うこともできます。
予測 該当なし Firebase Predictions によって定義されたユーザーのターゲット グループ(たとえば、アプリの使用を止めそうなユーザー、またはアプリ内購入を行いそうなユーザー)。Firebase Predictions ツールで定義された値のいずれかを選択します。オプションが利用できない場合は、Firebase コンソールの [Predictions] セクションにアクセスして、Firebase Predictions を有効にする必要があります。  
デバイスの国 該当なし テスト対象とする可能性のあるユーザーを選択するための、1 つ以上の国またはリージョン。  
デバイスの言語 該当なし テスト対象とする可能性のあるユーザーを選択するために使用する、1 つ以上の言語とロケール。 このターゲティング条件は Remote Config でのみ使用できます。
初回起動 次より大きい
次より少ない
次の範囲
ユーザーの初回起動日に基づいてユーザーをターゲティングします(日数で指定します)。 このターゲティング条件は、Firebase アプリ内メッセージングでのみ使用できます。
前回のアプリ エンゲージメント 次より大きい
次より少ない
次の範囲
ユーザーが最後にアプリを利用した日時に基づいてユーザーをターゲティングします(日数で指定します)。 このターゲティング条件は、Firebase アプリ内メッセージングでのみ使用できます。

バリアント レベルのターゲティング

Remote Config を使用した A/B テストでは、高度な利用方法に対応した追加機能を使用できます。その 1 つがバリアント レベルのターゲティングです。この機能を使用すると、構成を適用するユーザーをバリアント内のユーザーのサブセットに限定できます。これにより、各種のターゲティング スキームが主要な指標にどのように影響するかをテストできます。バリアントに定義された構成は、テストレベルのターゲティング条件とバリアント レベルのターゲティング条件の両方を満たすユーザーにのみ適用されます。バリアント内の残りのユーザーにはデフォルト構成が適用されます。選択バイアスを回避するため、バリアント レベルのターゲティング条件を満たしたかどうかにかかわらず、バリアント内のすべてのユーザーに対して指標が計算されます。

たとえば、この収益化戦略のテストでは、Firebase Predictions を使用してバリアント レベルでユーザーをターゲット設定しています。この例に示すように、バリアント レベルのターゲティングは、テストを作成する手順において構成します。

A/B テストの指標

テストを作成する際には、テスト バリアントの比較に使用する指標を選択します。追跡対象とする他の指標も選択して、各バリアントの詳細を把握し、重大な副作用(アプリ クラッシュなど)を検出するために役立てることができます。次の表に、目標指標と他の指標の計算方法の詳細を示します。

目標指標

指標 説明
1 日のユーザー エンゲージメント ユーザーがアプリを使用する平均時間(1 日単位)。
定着(1 日) アプリを毎日使用するユーザーの数。
定着(2~3 日) アプリの使用間隔が 2~3 日以内のユーザー数。
定着(4~7 日) アプリの使用間隔が 4~7 日以内のユーザー数。
定着(8~14 日) アプリの使用間隔が 8~14 日以内のユーザー数。
定着(15 日以上) アプリの使用間隔が 15 日以上のユーザー数。
通知開封 Notifications Composer によって送信された通知をユーザーが開くかどうかを追跡。
購入による収益 すべての ecommerce_purchase イベントと in_app_purchase イベントを合算した値。
AdMob の推定収益 AdMob からの推定収益額。
収益の推定総額 購入額と AdMob の推定収益を合算した値。
first_open ユーザーがアプリをインストールまたは再インストールした後、最初にそのアプリを開くときにトリガーされるアナリティクス イベント。コンバージョン プロセスの一環として使用されます。
notification_open Notifications Composer によって送信された通知をユーザーが開いたときにトリガーされるアナリティクス イベント。コンバージョン プロセスの一環として使用されます。

その他の指標

指標 説明
クラッシュの影響を受けていないユーザー テスト中に Firebase Crashlytics SDK によって検出されたアプリ内エラーが発生しなかったユーザーの割合。
notification_dismiss Notifications Composer によって送信された通知が拒否されたときにトリガーされるアナリティクス イベント(Android のみ)。
notification_receive アプリがバックグラウンドで動作している場合に、Notifications Composer によって送信された通知が受信されたときにトリガーされるアナリティクス イベント(Android のみ)。
os_update デバイスのオペレーティング システムがいつ新しいバージョンに更新されるかを追跡するアナリティクス イベント。詳細は、自動的に収集されるイベントをご覧ください。
screen_view アプリ内で表示される画面を追跡するアナリティクス イベント。詳細については、追跡のスクリーン表示をご覧ください。
session_start アプリ内のユーザー セッション数をカウントするアナリティクス イベント。詳細は、自動的に収集されるイベントをご覧ください。
user_engagement アプリがフォアグラウンドで動作している場合に、定期的にトリガーされるアナリティクス イベント。詳細は、自動的に収集されるイベントをご覧ください。

BigQuery へのデータのエクスポート

BigQuery の A/B テストに関連するすべてのアナリティクス データにアクセスできます。BigQuery では、BigQuery SQL を使用してのデータ分析、別のクラウド プロバイダへのデータのエクスポート、カスタム ML モデルでのデータの使用が可能です。詳しくは、BigQuery を Firebase にリンクするをご覧ください。

BigQuery のデータ エクスポートを最大限に活用するには、Firebase プロジェクトでお支払いプランに Blaze を選択し、従量課金制を採用する必要があります。BigQuery では、データの保存、ストリーミング挿入、データのクエリは有料ですが、データの読み込みとエクスポートは無料です。詳細については、BigQuery の料金または BigQuery のサンドボックスをご覧ください。

使用を開始するには、Firebase プロジェクトが BigQuery にリンクされていることを確認してください。左側のナビゲーション バーで [設定] > [プロジェクト設定] を選択し、[統合] > [BigQuery] > [リンク] を選択します。このページには、プロジェクト内のすべてのアプリの BiqQuery アナリティクス データ エクスポートを行う場合のオプションが表示されます。

テストの分析データをクエリで取得するには:

  1. アクティブなテストのリストから目的のテストを選択して、テスト結果ページを開きます。
  2. [テストの概要] ペインの more_vert コンテキスト メニューから、[BigQuery で表示] を選択します(無料枠のプロジェクトの場合、このオプションは使用できません)。

    BigQuery コンソールのクエリ コンポーザが開き、レビュー用にプリロードされたテストデータのクエリ例が自動的に生成され、表示されます。このクエリでは、テストがユーザー プロパティとしてエンコードされ、キーにテスト名、値にテスト バリアントが含まれます。

  3. クエリ コンポーザで [Run Query] を選択します。結果が下のペインに表示されます。

BigQuery の Firebase データは 1 日に 1 回しか更新されないため、テストページでは BigQuery コンソールで使用可能なデータよりも新しいデータが使用できる場合があります。