Firebase Remote Config を使用して Unity ゲームの A/B テストを実装する

1. はじめに

この Codelab では、Firebase Remote Config を使用してゲームを計測するで変更したサンプルゲーム MechaHamster: Level Up with Firebase エディションの A/B Testing を使用して Remote Config テストを作成する方法を学びます。

Remote Config を使用した A/B Testing では、アプリの UI、機能、エンゲージメント キャンペーンに対する変更を、幅広いオーディエンスに展開する前に、対象オーディエンスでテストできます。テスト結果は、次のような目的にも利用できます。

  • 収益や維持率などの主要な指標を改善するパラメータ値のパターンを特定する。
  • ユーザーのどのサブグループがどのバリエーションを好むかを調べます。
  • テストデータを収集して保存し、さまざまなパラメータ値を設定した場合の影響について追加の分析を行います。

これが A/B Testing の本質です。Remote Config 用にインストルメント化されたコードを使用して、Remote Config の条件(Google アナリティクスのユーザー プロパティを含む)、ロールアウトの割合、アナリティクスのコンバージョン イベント、およびこれらの組み合わせに基づいて、クライアントが受け取る値を制御するテストを開始できます。

まず、ユーザー アクションに基づいてユーザー プロパティを設定し、テストの対象とするユーザーを制限する条件を実装します。次に、Google アナリティクスのユーザー プロパティを使用して、テストの対象となるクライアントを決定する A/B Testing テストを作成します。そして最後に、そのデータを使用してオーディエンスについて理解を深めます。

学習内容

  • インストゥルメント化された Remote Config 値を使用して A/B Testing を設定する方法
  • A/B テストへの参加条件の一部として Google アナリティクスのユーザー プロパティを使用する方法

前提条件

必要なもの

  • iOS または Android のビルドをサポートする Unity 2019.1.0f1 以降

2. デバッグ メニューの有効化

プロジェクトでデバッグメニューが非表示になっています。このメニューにアクセスするためのボタンがゲームに存在しますが、現在有効になっていません。MainMenu プレハブからアクセスするには、ボタンを有効にする必要があります。

  1. Unity エディタで [Project] タブを選択し、[Assets] の下にある [Hamster] > [Prefabs] > [Menus] を展開し、[MainMenu] をクリックします。

Unity エディタの [Assets]\n[プロジェクト] タブ。ハムスター、プレハブ、メニュー

  1. プレハブ階層で、DebugMenuButton という名前の無効なサブオブジェクトを見つけてクリックし、[Inspector] タブで開きます。

Unity エディタにメインメニューが表示され、DebugMenu が\n 無効化されています。

  1. [Inspector] タブで、左上の [DebugMenuButton] を含むテキスト フィールドの横にあるチェックボックスをオンにして有効にします。

チェックボックス付きの\nDebugMenuButton の [Inspector] タブ

  1. プレハブを保存します。

エディタまたはデバイスでゲームを実行すると、メニューにアクセスできるようになります。

3. Remote Config サブメニューを有効にする

  1. Unity Editor の [Project] タブで、[Assets] > [Hamster] > [Prefabs] > [Menus] を展開し、DebugMenu オブジェクトをダブルクリックしてエディタの [Hierarchy] タブで開きます。

    Assets、Hamster、Prefabs、Menus に\n ネストされた DebugMenu アイテム
  2. [Hierarchy] タブで階層を展開し、[DebugMenu] > [Panel] の下にある [Remote Config Actions] というラベルの付いたサブオブジェクトをクリックします。

Remote Config のアクションは Canvas、DebugMenu の下に\n ネストされています

  1. Unity の [Inspector] タブで、オブジェクト名を含むテキスト フィールドの左側にあるチェックボックスをオンにして、[Remote Config Actions] を有効にします。

Remote Config を含む Unity エディタ\nDebugMenu のパネルでアクションが有効になっている

このオブジェクトには、Set Bored Of Subtitle と Set Comes Subtitle という名前の 2 つの GameObject の子があります。どちらも DebugMenu.cs の既存の未実装メソッドを呼び出すように構成されています。

4. 字幕のオーバーライドをアプリ内のデフォルトにリセットする

前の Codelab では、パラメータのデフォルト値を JSON としてオーバーライドし、条件を使用してさまざまなバリアントを提供しました。この Codelab の一環として、作成した条件を削除してアプリ内デフォルトを再度導入し、A/B Testing の結果のみでオーバーライドします。

アプリ内デフォルトを再度有効にするには:

  1. Firebase コンソールの Remote Config ページを開き、subtitle_override パラメータの横にある鉛筆アイコンをクリックして、[パラメータを編集] サイドパネルを開きます。
  2. 削除する条件の横にある [X] アイコンをクリックします。
  3. 残りのデフォルト値の横にある [Use in-app default] 切り替えボタンをオンにします。

Remote Config パラメータ エディタからの条件の削除

  1. [保存] をクリックして変更を保存し、[変更を公開] をクリックして変更を公開します。Remote Config ページの [変更を公開] オプション

5. デバッグ関数でユーザー プロパティを設定する

次に、事前構成済みで実装されていない Google アナリティクス関数の関数本体を DebugMenu.cs([Assets] > [Hamster] > [Scripts] > [States] にあります)に記述します。

これらの関数は、ユーザー プロパティを設定します。ユーザー プロパティはユーザーベースのセグメントを記述する方法であり、ゲームのサブタイトルについてユーザーがどう感じているかを記録するために使用されます。

SetUserBoredOfSubtitleSetUserEnjoysSubtitle を実装するには、DebugMenu.cs で既存のバージョンを見つけて、次のように上書きします。

void SetUserBoredOfSubtitle()
{
  Firebase.Analytics.FirebaseAnalytics.SetUserProperty("subtitle_sentiment", "bored");
}
void SetUserEnjoysSubtitle()
{
  Firebase.Analytics.FirebaseAnalytics.SetUserProperty("subtitle_sentiment", "enjoys");
}

アプリが Google アナリティクスを使用して正しく設定されている場合は、これらの関数のいずれかを呼び出して、Remote Config の条件でプロパティを利用できるようにします。モバイル デバイスから SetUserBoredOfSubtitle を呼び出すには、ゲームを開始し、メインメニューの [Debug Menu] ボタンを押してから、[Set Bored of Subtitle] を押します。

6. カスタム ディメンションを作成する

次に、subtitle_override のさまざまな字幕バリエーションを設定して、どの字幕が最も効果的かを調べます。ただし、A/B テストでは、現在の字幕(subtitle_sentiment で記録されている)に対して「退屈」という言葉が含まれるユーザーのみにこれらのパターンを配信します。

カスタム ディメンションを使用して、アナリティクス イベントでカスタム パラメータを作成し、トラッキングします。詳しくは、カスタム ディメンションとカスタム指標をご覧ください。

新しいカスタム ディメンションを作成するには:

  1. Firebase コンソールを開き、[アナリティクス] メニューを展開して、[カスタム定義] を選択します。
  2. [カスタム定義] ページで、[カスタム ディメンションを作成] をクリックします。
  3. [新しいカスタム ディメンション] ウィンドウで、ディメンション名を「字幕の感情」に設定し、[スコープ] プルダウンから [ユーザー] を選択します。
  4. [ユーザー プロパティ] フィールドで [subtitle_sentiment.] を選択します。

7. A/B Testing テストをセットアップする

次に、2 ~ 3 日間のユーザー維持率を最適化するために、A/B Testing のテストを作成し、subtitle_override に異なる値を設定して比較します。

  1. まず、Firebase コンソールの Remote Config ページで、subtitle_override パラメータの [編集] を選択します。

[編集] オプションを表示する\nRemote Config ページの subtitle_override パラメータ。

  1. 表示された [パラメータを編集] ダイアログで、[新たに追加] をクリックします。

Remote Config の [パラメータの編集] ページの [新しいテストを追加] オプション。

  1. 表示されたリストから [テスト] を選択します。

Remote Config のパラメータ ページ: 新しい\n テストを追加

  1. テストの名前と説明を入力します。

テストの名前と説明\n セクション

  1. 次にターゲティング条件を選択しますまず、プルダウンからアプリを選択します。

アプリが選択された\nA/B Testing 構成のターゲティング ステップ

  1. 次に、[AND] をクリックして新しい条件を追加し、[ユーザー プロパティ]、[subtitle_sentiment] の順に選択します。表示されない場合は、手動で入力します。
  2. 現在の字幕の感情に「bored」が含まれるユーザーにのみ字幕を設定するため、[contains] を選択して「bored」と入力します。
  3. (省略可)上記の条件に一致するオーディエンスのうち、テストの対象とするユーザーの割合を選択します。[100%] を選択すると、簡単に制御できないランダム性を回避できます。

subtitle_sentiment が\n 選択された [A/B Testing] の [ターゲティング] セクション

  1. 次に、テストで最大化しようとする目標を選択します。[保持(2 ~ 3 日)] を選択します。

A/B Testing の目標のセクション

  1. 次に、テスト用のパラメータを設定し、さまざまな字幕のバリエーションを作成します。これらのパターンは、subtitle_sentiment に「退屈」が含まれるユーザーに A/B Testing が配信されるさまざまな値です。A/B Testing では、ユーザー維持率を最大化するのに最適なパターンが特定されます。
  2. パターン A に次のパラメータ値を入力します。
    {"text":"A: A game about a mechanical hamster","fontSize":8,"textColor":{"r":0.0,"g":255.0,"b":0.0,"a":255.0}}
    
  3. バリエーション B に次のパラメータ値を入力します。
    {"text":"B: A game about a mechanical hamster","fontSize":14,"textColor":{"r":255.0,"g":0.0,"b":0.0,"a":255.0}}
    
  4. 以下のように、整数のバリアントの比率を設定します。
    • ベースライン: 1
    • バリエーション A: 100
    • バリエーション B: 100
    これにより、ベースラインの重みの合計は 0.5%、パターン A の重みは 49.8%、パターン B の重みは 49.8% になります。バリアントの重み付けの設定\n セクションこれらのバリアントでは、201 回のうちの 1 回が字幕に飽きているユーザーに対しては A/B テストがデフォルトとして配信されますが、200 回または 201 回、タイトルは 2 つの新しい値のいずれかでオーバーライドされます。
  5. [テストを開始] をクリックして保存し、送信し、確認ポップアップで [開始] をクリックします。テストを開始するには\n[開始] をクリックしてください

8. Set User Property メソッドを実行して、

これで、ユーザーに関するさまざまなプロパティが設定されました。これらのプロパティを使用して、ゲームのロジックや表示方法を指定できます。

SetUserProperty メソッドをまだ実行していない場合や、enjoys に設定している場合は、ゲームを開くとデフォルトのサブタイトルが表示されます。

(再取得する前に)bored に設定すると、新しい値のいずれかが約 50 対 50 の比率で表示されます。

デバイスで A/B Testing のテストが開始された後も、テストで受け取る値は変更されず、インストールごとに永続的です。そのため、他の試験運用版の値のいずれかを受け取るには、同じデバイス/シミュレータにゲームを再インストールするか、新しいデバイス/シミュレータにゲームをインストールすることで、新たにインストールを作成する必要があります。

ユーザーベース全体で実施する実際の A/B テストでは、ベースラインに他のパターンと同程度の重み付けを設定します。しかし、この場合は、テストが機能していることを検証するため、かなり偏った確率を割り当てます。(1/201 のケースで)デフォルト値が引き続き表示される場合は、デバイス/シミュレータにゲームを再インストールしてください。

ユーザー プロパティを enjoys に戻しても値がベースラインに戻らないという効果もありますが、これも enjoys に切り替えて再インストールすることで変更できます。

9. お疲れさまでした

Remote Config の A/B Testing を使用してさまざまな Remote Config の値をテストして、それぞれの値がアナリティクスの指標に与える影響を確認できました。

学習した内容

  • インストゥルメント化された Remote Config 値を使用して A/B Testing を設定する方法
  • A/B Testing テストの承認条件の一部として Google アナリティクスのユーザー プロパティを使用する方法

次のステップ

テストが終了したら、プロジェクト内のテストのリストから 1 つを選択して、テストで何を行うかを決定できます。勝者を 1 つ選ぶか、それともさらにテストを実施しますか?