Firebase A/B Testing でアプリのA/Bテストを実施する

# Firebase A/B Testingとは
Firebase Remote Config の仕組みを使い、A/Bテストを設定、評価するための機能です。
ユーザ体験を最適化するのに役立つだけでなく、収益やユーザー定着率などの指標を最大化するための検証をおこなうこともできます。
なお、 通知（メッセージング）についても A/Bテストを実施することができますが
本記事では Remote Config テストについてのみ記載します。
※2019年8月時点の情報です。Firebase A/B Testingはベータ版のため変更になる場合があります。

# Firebase A/B Testing の仕組み

> <img width="400" alt="Diagram-AB-Testing-IO-v2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/68702/e224dc05-c61c-ffbe-9964-a6b482fe50d5.png">

（Diagram-AB-Testing-IO-v2.png は https://firebase.google.com/docs/ab-testing/ より引用）



## Targeting : 対象ユーザについて
Google Analytics for Firebase から複数条件により定義することができます。
また、Firebase Predictions により自動的に作成されるグループに属するユーザのみに対象を制限することもできます。
全体に影響が出ないように大半のユーザをコントロールグループ（従来のUI / 機能が表示されるグループ）に含め、一部のユーザーのみでテストを実施することで、テストによる影響範囲を狭めることができます。

## Measurement : 評価について
テスト作成時に最適なパターンを選択するためのメイン指標を設定します。
この指標は Google Analytics for Firebase で計測しているイベントから選択します。
また、その指標に加えて他の指標（クラッシュの影響を受けていないユーザー、定着）を追跡することもできます。
指標1つだけでなく、他の指標を加味して検証することで本当に最適な体験となっているか確認することができます。

# テストの作成方法

## テストの作成画面を開く
<img width="253" alt="スクリーンショット 2019-08-28 15.34.04.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/68702/8eb82d4f-69b2-3cd8-dbc4-b0ddf66a35af.png">
Firebaseコンソールから [拡大] -> [A/B Testing]をクリック。

<img width="323" alt="スクリーンショット 2019-08-28 15.40.36.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/68702/df4d5001-e86c-3595-acad-25b5f600dc69.png">
画面上に表示されている [テストを作成] をクリックし、Remote Configをクリック。


## テストの設定

### 基本
<img width="923" alt="スクリーンショット 2019-08-28 15.42.37.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/68702/b7977a8e-8d48-2209-28de-1df0e44b11e4.png">
テストの [テスト名] と[テストの説明]（省略可）を入力し、[次へ]をクリック。
テスト名は複数同時にテストすることを想定して命名する必要があります。

### ターゲット設定
ターゲット設定ではテスト対象の絞り込みをおこないます。

<img width="921" alt="スクリーンショット 2019-08-28 15.42.50.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/68702/301157ea-9f82-f743-5e73-9032c31143f4.png">
[アプリ] からテスト対象となるアプリを選択します。
[かつ] をクリックすることで下記の項目でさらに絞り込むことができます。

<img width="294" alt="スクリーンショット 2019-08-28 16.25.20.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/68702/505cb526-4488-cfc3-ad5c-30db04b6f1b7.png">
一部の地域やユーザー層にテストを実施し、評価をみてからロールアウトさせることができるようになっています。

<img width="876" alt="スクリーンショット 2019-08-28 16.22.15.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/68702/3f98f3d1-05df-cf4d-2edf-a20b853c2fe0.png">
さらに露出率を設定することができます。デフォルト値は5%で1% ~ 100%まで設定することができます。
すべてのユーザをテスト対象としたい場合は、100%を設定します。

<img width="296" alt="スクリーンショット 2019-08-28 16.22.24.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/68702/8c526e89-15e2-9699-7a39-c6463578b7cd.png">
テストを有効にするためのアクティベーションイベントを設定（省略可）。
イベントは Google Analytics for Firebaseのイベントから選択するこができ、
設定したイベントをトリガーしたユーザーのみがテスト対象となります。
設定が完了したら [次へ] をクリック。

## 目標
目標ではA/Bテストの結果どちらが優れているかを比較するための指標を設定します。

<img width="919" alt="スクリーンショット 2019-08-28 16.22.41.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/68702/93cd3646-d5c3-b5c8-b5a3-dfeabf9d2801.png">

追跡するメインの指標を選択します。
指標は Google Analytics for Firebase で計測しているイベントから選択します。
また、追跡するその他の指標を設定することできます。
その他の指標はデフォルトでは「定着（4日〜7日）」、「クラッシュの影響を受けていないユーザ」がデフォルト選択されており、
最大で5つまで追加することができます。設定が完了したら [次へ] をクリック。

## バリアント
バリアントでは実施したいテストのパターンを定義します。

<img width="929" alt="スクリーンショット 2019-08-28 16.35.03.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/68702/0110a655-bd51-09c3-915a-aeed25df39f5.png">

### コントロールグループ
コントロールグループはテストと比較対象となるグループで、従来のUI・機能が表示されるグループです。

### Variant
新しいUI・機能をテストするグループです。Variant Aはテキストフィールドになっているので任意の名前に変更することができます。
[別のバリアントを追加] をクリックすることで、バリアントを増やすことができ複数パターンのテストが実施可能です。
**バリアントのユーザー数は均等になるように割り振られます。**
例） コントロールグループ、Variant A, VariantB, VariantCが存在する場合は25%ずつになるよう割当られます。

[パラメータ] をクリックし Remote Config で変更したいパラメータを選択。
値にパラメータに設定したい値を入力します。プレースホルダーにはそのパラメータのデフォルト値が表示されます。
アプリ側は設定した値でUI / 機能を分岐するように実装しておく必要があります。
設定が完了したら [確認] をクリック。

<img width="980" alt="スクリーンショット 2019-08-30 15.04.39.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/68702/0768b14f-e1b4-5836-9d80-3d0355c09c13.png">

このような画面が表示されれば設定完了です。
この段階ではテストは開始されておらず、[テスト開始]をクリックすることでA/Bテストを開始することができます。

## テストデバイスでの確認
設定・実装後に Firebase A/B Testing が期待どおり動いているか確認します。
テストデバイスの設定には FirebaseインスタンスIDトークン が必要になります。

設定完了後のページの [Details] をクリックし展開するとこのような画面になります。
<img width="962" alt="スクリーンショット 2019-08-30 18.59.37.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/68702/ad22cb0a-13fc-8c66-d363-3bd8186d2adb.png">

次に[テストデバイスを管理]をクリックしテストデバイスを追加します。

<img width="527" alt="スクリーンショット 2019-08-30 18.30.09.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/68702/f40a3b3d-0e0d-e6c0-29ac-2cc8f28f6419.png">

インスタンスIDトークンを入力し、その端末に反映させたいバリアントを選択後 [追加]をクリックします。
[保存]を押して設定完了です。
バリアントは指定したテストデバイスのみにしか反映されないため、安全に動作確認をおこなうことができます。

# 最後に
以上ですべての設定が完了しました。
テストを開始後の評価はFirebaseが自動的に集計し、グラフで表示されます。

アプリ側の実装はRemote Configによる分岐と
必要に応じてGoolge Analytics for Firebaseを設定するだけで良いので
簡単にA/Bテストを実施することができます。

対象の絞り込みと指標の設定がGUI上でき、プロダクトの改善に集中できるのでおすすめです。ぜひお試しください。

---
このページの一部は、[Google](https://developers.google.com/terms/site-policies)が作成および[共有した](https://developers.google.com/terms/site-policies)作品から複製され、
[Creative Commons 4.0 Attribution License](https://creativecommons.org/licenses/by/4.0/)に記載されている条件に従って使用されています。