Furyu
[フリュー公式]

Tech Blog

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

2016年05月17日

araki

Google Tag Manager でAndroidアプリのABテスト -ABの出し分け-

コンテンツ・メディア第1事業部の荒木です。 今回は、Google Tag Manager を利用してAndroidアプリでABテストをするために、AパターンとBパターンをアプリで出し分ける方法を紹介したいと思います。

Google Tag Manager とは

Google Tag Manager(以下、GTM)は、タグと呼ばれるウェブサイトに埋め込む解析用のコードを管理するためのツールです。たとえば、Google Analytics用の共通タグを各ページに埋め込んでおけば、イベント名などの設定を全てウェブ上で実施できるといったメリットがあります。

GTMでABテストをするメリット

Google AnalyticsとアプリのプログラムだけでABテストの仕組みを作ることは可能です。しかし、GTMによるABテストには、少なくとも以下のメリットがあります。

  • テスト結果の解析を自動で行って、成果の高いパターンに移行してくれる
  • ABテスト用のGAイベント送信が不要である
  • ABテストの開始条件(アプリバージョンや、日時)をプログラムに書かなくて良い

GTM自体のメリットと同様、テストの設定とプログラムを独立できるというのが良い点です。

コンテナの作成

実際にタグの管理を行うために作成するものがコンテナです。GTMではコンテナの設定によって、タグを管理します。 初めてGTMにログインしたときは、アカウントとコンテナを一つずつ作成することになります。今回は、コンテナの使用場所として「Android」を選択します。

アカウントとコンテナの作成

Google Analytics と連携する

コンテナと Google Analytics (以下、GA)を連携させることで、ABテストの設定ができるようにします。GTMのページ上部の「管理」タブをクリックすると表示される画面で、「外部アカウント リンク」をクリックすると、以下のような画面になります。ここで、GTMにログインしているGoogleアカウントが持っているGAアカウント(持っていない場合は新しく作ってください!)とGAのプロパティが選択できるようになっているので、連携させたいものを選んでください。

GAとの連携

ABテスト用の変数を作成する

さて、いよいよABテストの設定です。ABテストをするためには「Google アナリティクスのウェブテスト」という変数を作成する必要があります。変数とは、アプリに動的に取り込む値を設定したり、アプリから送るデータのフィルタリングに利用される、名前と値のペアです(今回は、アプリに取り込む値の設定に使います)。画面左の「変数」を選ぶと以下のような画面になるので、「新規」をクリックします。

変数の新規作成

変数の作成画面は以下のようになっています。変数の種類に「Google アナリティクスのウェブテスト」を選んでください。

変数の設定

つづいて、各種設定の大まかな説明をします。詳細オプションや有効化のタイミングについては、今回は割愛させていただきます。

Google アナリティクスのアカウント・プロパティ・ビュー

GAとの連携部分です。

ウェブテストの目的

このテストで何を成果とするかを選択します。デフォルトでは、スクリーン数、セッションの長さ、例外数、クラッシュ数の四つしか選べませんが、GAの目標を設定しているとテストの目的に設定することができます。たとえば、特定ボタンのクリックイベントや、ユーザーの課金状況などを設定することもできます。

パターン

ここがABを出し分ける仕組みになります。パターンとは key と value のペアでjsonデータのようになっています。ここで、各パターンで使いたい値を定義していきます。たとえば、アプリのテキスト領域に「Aパターンです。」「Bパターンです。」と出し分けたい場合は、Aパターンで{'text' : 'Aパターンです。'}、Bパターンで{'text' : 'Bパターンです。'}と定義しておけば、アプリ側で「text」という key の値を取得した時に、「Aパターンです。」または「Bパターンです。」のどちらかの値を得ることができます。

コンテナを公開して、ダウンロードする

コンテナは公開することで初めて動作します。画面の右上に「公開」ボタンからコンテナを公開することを忘れないようにしましょう。公開したら、画面上部「バージョン」タグから公開したバージョン(最初は1)を選んでください。以下のような画面になるので、右上の「アクション」→「ダウンロード」をクリックするとGTM-XXXXXXというバイナリファイルがダウンロードされます。

コンテナのダウンロード

ここまでが、GTMでの設定になります。

Androidアプリで各パターンの値を取得する

ここからは、Android Studio での作業になります。

GTMをアプリに導入する

GTMは、GAのライブラリに含まれているので、build.gradledependencies に以下を追加してください。

また、GTMを利用するために必要なパーミッションは、android.permission.INTERNETandroid.permission.ACCESS_NETWORK_STATEなので、必要ならばAndroidManifest.xmlに設定しておいてください。

GTMの初期化

GTMを初期化して、ユーザーがAパターンかBパターンかを確定します。GTMの初期化は、以下のように書きます。アプリの初期化の際に、実施するのが良いと思われます。

ここで、GTM-XXXXXXは自分のコンテナID、R.raw.gtm_default_containerはコンテナを公開した後にダウンロードしたバイナリファイルです。バイナリファイルはres/rawディレクトリに配置すること、バイナリファイル名(元々は「GTM-XXXXXX」)が大文字を含まないようにリネームすることに注意してください(リネームしないとエラーになります)。また、取得したContainerHolderをアプリのどこからでも参照できるようにContainerHolderSingletonというシングルトンクラスを作って、セットしておきます。

値の取得

最後に値の取得を行います。

Container#getString(String key) メソッドで値の取得をすることができます。ここで取得できる値は、ユーザーがどのパターンであるかによって変わります。文言や色などのシンプルなデータなら、GTMから取得した値をそのまま表示すれば良いです。もし、レイアウト自体を大きく変えたい場合は、取得した値をフラグにして読み込むべきレイアウトのxmlを変えるという実装になると思います。

おわりに

この記事では、アプリでABパターンを出し分けるための方法を紹介しました。この時点では、まだテストの解析や開始条件の設定といったことがわからないと思います。それについては、また別の機会に紹介したいと思います。


2016年05月9日

sakata

JJUG CCC 2016 Springで登壇します!

Hello world! コンテンツ・メディア第1事業部のjyukutyoこと阪田です。

さて、5/21(土)に開催されるJJUG CCC 2016 Springで登壇することとなりました!私は17時から「Seasar2で作った俺たちのサービスの今」というセッションで話します。

http://www.java-users.jp/?page_id=2396#GH-6

JJUG CCCとは

JJUGとはJapan Java User Group(日本Javaユーザグループ)のことです。日本最大のJavaコミュニティで、4,500人以上の会員がいます。そのJJUGが主催する年に2回のコミュニティイベントがCCC(クロスコミュニティカンファレンス)です。参加者は会を追うごとに増えており、昨年秋のCCCでは当日700名ほどが集まったそうです。今回のCCCは5/21(土)9:30 ~ 20:00、場所はベルサール新宿グランドです。これだけの規模ですが、参加費は無料です。参加したい!という方はこちらから申し込めます。

https://jjug.doorkeeper.jp/events/43045

Seasar2で作った俺たちのサービスの今

弊社では長い間JavaプロジェクトではSeasar2を採用していました。しかし昨年にアナウンスがあり、2016/9/26にSeasar2がサポートを終了することとなりました。公式サイトにもそのことが掲載されています。

http://www.seasar.org/

もちろんサポートが終了するからといって使えなくなるわけではないのですが、新技術への対応などを考え別のフレームワークに移行する決断をしました。現時点で移行が完了した機能もあり、本番環境にて動作しています。このセッションでは、この移行において考えたことや判断理由、作業内容などを話します。詳しくは上記のリンクにあるセッション説明に書いていますので、ぜひ当日ご参加ください。

魅力的なセッション

私のセッションだけでなく、魅力的なセッションが多くあるのもCCCの特長です。日本唯一のJava Championである櫻庭さんのType Annotationのセッション、あのJenkinsを立ち上げた川口さんのJenkins 2.0のセッション、JCPのECメンバである数村さんのJavaデバッガのセッションなど、紹介しきれません。

関西からは私の他に一緒に関西Javaエンジニアの会(関ジャバ)を運営しているirofさんのテスト自動化のセッションや、関ジャバがよくお世話になっている椎葉さんのThymeleaf 3のセッションなどもあります!

参加して絶対に損をしないJavaイベントですので、みなさんもぜひご参加ください!