Furyu

[フリュー公式] Tech Blog

フリュー株式会社の技術ブログです

2016年07月5日

araki

モバイルアプリABテストの手法比較:GTM&GA vs Firebase Remote Config

コンテンツ・メディア第1事業部の荒木です。ピクトリンクというアプリのAndroid版を開発しています。今回は、Google I/O 2016 で新しく生まれ変わったFirebaseを使ったABテストと、従来の方法であるGoogle Tag Manager (GTM)とGoogle Analytics (GA)を連携させて行うABテストの違いを見ることで、新しいFirebaseの強みと弱みを考えてみたいと思います。

ちなみに、この記事はumeda.apk #1でLT発表した内容をもとに書かれております。発表スライドは以下です。また、記事の最後にumeda.apkの様子についても書かせていただきます。

https://speakerdeck.com/takuaraki/b-testing-gtm-and-ga-vs-firebase

ABテストの流れ

GTM&GAでもFirebaseでもABテストの流れは、以下の三つのステップに分けられます。

  1. ABを出し分けるためのWebコンソールでの設定
  2. ABを受け取るためのアプリの実装
  3. テスト結果の解析

今回は、上記の三つのステップについてGTM&GAとFirebase Remote Configを比較したいと思います。

1. Webコンソールでの設定

GTM&GA

GTMのWebコンソールで「Google アナリティクスのウェブテスト」という変数を設定することで、ABの出し分けをすることができます(詳しく知りたい方は、 Google Tag Manager でAndroidアプリのABテスト -ABの出し分け- をご覧ください)。変数の設定画面は以下のようになっています。

GTM設定画面1

まだまだあります。

GTM設定画面2

結構長いですね。具体的には、GAとの連携部分やテストの詳細設定が項目数を増やしています。

Firebase Remote Config

FirebaseでABの出し分けをする際は、Remote Configを利用します。Remote Configとは、特定のキーに対する値をWeb上で自由に設定して、アプリに渡すことができるサービスです。アプリのアップデートをせずにWeb上で値を変えるだけで、ユーザーに見せる文言を変更したり、ゲームの難易度を調整したりできます。また、Remote Configには、ユーザーごとに違う値を渡す機能があります。ABテストではこの機能を利用してABの出し分けを行います。Remote Configの設定画面は以下のようになっています。

5. 条件の値を入力

先ほどと比べると、非常にシンプルな印象を受けるのではないでしょうか。Webコンソールで設定する項目を説明します。

パラメータ

パラメータとは、キーと値のペアのことです。たとえば、キーに”hoge”を指定したら値として”fuga”がもらえるという設定ができます。今回は、キー値”pattern”でデフォルト値”A”がもらえる設定を行います。

条件

条件とはパラメータにつけることができるもので、特定の条件を満たしたときだけ”hoge”キーで値として”piyo”がもらえるという設定ができます。たとえば、キー値”pattern”でデフォルトでは値として”A”を渡すが、半分のユーザーには”B”を渡したい場合、以下のように条件を追加してパラメータに追加し、条件達成時の値を”B”としてやれば、ABの出し分けができます。

2. 条件の追加

2. AB受け取りの実装

各手法の初期化とABの値の受け取りをJavaで実装します。

GTM&GA

初期化の流れは、

  • TagManagerインスタンスの生成
  • コンテナID(GTMのWebコンソールで取得)とデフォルト値(リモートからの値取得失敗時の値)の設定
  • リモートからの値取得完了時のコールバック設定

となっています。また、ABの値の取得にはContainer#getString(String key)が利用されています。

Firebase Remote Config

初期化の流れはGTM&GAとかなり似ています。

  • FirebaseRemoteConfigインスタンスの生成
  • デフォルト値(リモートからの値取得失敗時の値)の設定
  • リモートからの値取得完了時のコールバック設定

違う点は、GTMにおけるコンテナIDの設定に相当する部分がないことです。

また、ABの値の取得はFirebaseRemoteConfig#getString(String key)で行っています。この点もGTM&GAに似ていますが、GTMではリモートからの値取得完了時にContainerHolderのインスタンスを自作のシングルトンクラス(ContainerHolderSingleton)に保存しておく手間があるので、若干Firebaseの方がシンプルになっています。

3. テスト結果の解析

GTM&GA

GTMとGAを連携させた場合は、イベント送信時に自動的にそのイベントのセッションがどのパターンであるか(AであるかBであるか)の情報を付与してくれます。また、コンバージョン率やBのコンバージョンがAを上回る確率も計算して、GAのコンソールに表示してくれます。以下は、GAの「ウェブテスト」から見られる画面の例です。

GAテスト結果表示

Firebase Remote Config

Firebase Remote ConfigはAかBかの値をアプリに渡すだけなので、あるユーザーがAを受け取ったのかBを受け取ったのかの情報はイベント送信時に送る必要があります。Firebase Analyticsで送信する場合は、以下のようにカスタムパラメータを付与してイベント送信する必要があると思われます。

また、コンバージョン率の計算や統計的な解析なども自力で行う必要があります。私なら、Firebase AnalyticsとBigQueryを連携させて解析する方法をとると思います。

比較のまとめ

ここまで、ABテストの流れに沿ってGTM&GAとFirebase Remote Configを比較してきました。比較の結果をまとめると、

  1. Webコンソールの設定:Firebaseの方がシンプルである
  2. AB受け取りの実装:FirebaseはGTM&GAと似ている(Firebaseの方が若干シンプルである)
  3. テスト結果の解析:Firebaseは自前でやる必要がある

となりました。Firebaseの強みは、とにかくシンプルであることだと感じました。逆に、シンプルであるがゆえ、高度なことをするときは自分たちで考える必要がある点は抑えておきたいと考えました。

おまけ umeda.apk #1 について

突然ですが、京都はとても住みやすいところです。自転車でどこにでもいけるし、よいお店がたくさんあるし、観光地なので見るところもたくさんあります。そんな京都で私は働いているのですが、一つ困っていることがあります。それは、Android開発者の集まる勉強会が少ないことです。これは京都に限らず関西全体の話です。関西モバイルアプリ研究会という素晴らしい勉強会が京都を中心に開かれていていますが、こちらはiOSとAndroidの両方を対象にしているので、純粋にAndroidアプリ開発者の集まりとなるとなかなか見つかりません。そんな状況の中、umeda.apkという勉強会が6月17日にサイバーエージェントさんの大阪支社で開催されました。

 

この勉強会は、shibuya.apkという渋谷で開催されているAndroidアプリ開発者の勉強会を関西でもやろうということで開催されたそうです。第一回なので、どのような勉強会になるか分かりませんでしたが、日本有数のAndroidアプリ開発者の方が登壇されると知り、すぐに参加を決めました。#1のメインテーマは Google I/O 2016 の報告で、Building for Billions、Firebase、Android in Car、Awareness API、Project Tango、Google I/O セッションまとめ、設計の話(Bento vs Burrito)などの発表がありました。

 

発表を聞いた印象として、どの発表も非常に分かりやすかったです。参加前には、自分が理解できない高度な発表かもしれないと不安を抱いていましたが、Android開発をやっていて最新情報にも多少興味をもっている人なら十分ついていける内容でした。次回は8月に開催予定らしいので、また参加したいと思います。関西でAndroidアプリ開発をされている方は、是非参加してみてください。


2016年05月26日

araki

Google Tag Manager でモバイルアプリのABテスト -ウェブテストの目的-

コンテンツ・メディア第1事業部の荒木です。ピクトリンクというアプリのAndroid版を作っています。今回は、Google Tag Manager(以下、GTM)でAndroidアプリのABテストを効果的に行うためにウェブテストの目的を設定します。ちなみに今回の記事の内容は、Androidアプリに限らずiOSアプリでも使えます。

GTMによるモバイルアプリのABテスト開始方法については、前回の記事(Google Tag Manager でAndroidアプリのABテスト -ABの出し分け-)を参照してください。

設定の概要

ウェブテストの目的は、各パターン(Aパターン、Bパターン)の優劣判定に使われます。GTMは、ウェブテストの目的を基準にして各パターンの優劣を判定します。GTMの「Google アナリティクスのウェブテスト」変数の編集画面から目的を設定することができます。

ウェブテストの目的

デフォルトでは、スクリーン数、セッションの長さ、例外数、クラッシュ数の四つから選ぶことができます。たとえば、スクリーン数をウェブテストの目的に設定していると、Google Analytics(以下、GA)で送信したスクリーン数が多いパターンが優秀と判定され、クラッシュ数を目的に設定していると、クラッシュ数が少ないパターンが優秀と判断されます。

GAの目標を作成する

さて、ここで特定ボタンのクリックイベントが多いパターンを優秀と判定したい場合を考えてみましょう。カスタムの目的を設定するには、GAの目標を利用します。GAにログインし、「アナリティクス設定」タブの「目標」を選択してください。このとき、アカウント・プロパティ・ビューがGTMのウェブテストと連携していることを確認してください。

GAの目標を選択

目標の設定画面に遷移したら、「+新しい目標」ボタンから目標の作成を開始してください。目標作成は「① 目標設定」「② 目標の説明」「③ 目標の詳細」の3ステップで実施します。

① 目標設定

「テンプレート」と「カスタム」から選びます。テンプレートは、プロパティ設定で指定されている業種で一般的に目標に設定されるものの候補を表示してくれるので、これから何を目標とすべきかわからないときに参考にしてください。今回は特定ボタンのクリックという目標がすでに決まっているので、「カスタム」を選択します。

② 目標の説明

ここでは、目標の名前とタイプを設定します。タイプとは目標の達成基準に関わるもので、全4種あります。以下は、各タイプの目標達成基準です。

  • 到達ページ:特定スクリーンへ到達したか
  • 滞在時間:滞在時間が設定した時間より長いか
  • ページビュー数 または スクリーンビュー数:1セッションあたりのPV数またはスクリーン数が設定した数より多いか
  • イベント:特定イベントが送信されたか

今回は、ボタンのクリックイベントを目標としたいので、「イベント」を選択します。

目標の説明

③ 目標の詳細

ここでは、 ②で選択した目標タイプごとの詳細設定を行います。今回は、イベントの目標詳細を設定します。イベントの詳細設定では、GAイベントのカテゴリ、アクション、ラベル、値についてそれぞれ条件を設定することができます。カテゴリ、アクション、ラベルは「等しい」「先頭が一致」「正規表現」で一致条件を設定します。値については、「超」「完全一致」「未満」で条件を設定できます。ここで設定した条件が全て満たされた場合に、目標達成となります。なお、空欄の条件は無視されます。

目標の詳細

GAの目標を目的に設定する

GAの目標作成が完了したら、GTMの設定に戻ります。「Google アナリティクスのウェブテスト」変数の編集画面で設定できるウェブテストの目的に、先ほど作成したGAの目標「特定のボタンをタップ」が追加されています。これを選択すれば、ボタンのクリック率が良いパターンが優秀と判定されるようになります。

GAの目標をテスト目的に

テスト結果の確認

テスト結果の確認は、GAで行います。GA左サイドメニューの「行動」→「ウェブテスト」から、ウェブテストの進捗や結果が確認できます。ウェブテストの目的で設定した基準の達成率(コンバージョン率)を元に、各パターンの優劣が判定されます。GTMの設定によっては、テスト終了時に成果の高いパターンに自動で固定したり、テスト中に徐々に成果の高いパターンに移行していくということが可能です。

ウェブテストの結果

おわりに

ウェブテストの目的を適切に設定することで、ユーザーの動向にリアルタイムに追従して、より適切な画面を出せるようになります。みなさんもウェブテストの目的を設定して、よりユーザーに楽しんでもらえるようなアプリを作りましょう!

以上です。