Help us understand the problem. What is going on with this article?

GoogleAnalyticsで簡単にABテストを行うRailsのGemを作ってみた

More than 1 year has passed since last update.

会社に自分が導入した、GoogleAnalyticsを使ってABテストを行う実装が大体固まって来たので、Rails用のGemとして切り出しました。
自分用メモ&社内共有用等を含めてGemの使い方を紹介します。

そもそも何故ABテストにGoogleAnalyticsをそのまま使うのか

まあ当時はGoogleOptimizeがなかったので、これしか方法がなかった、というのが答えなのですが、GoogleOptimizeが正式版になった今でも何故そっちに移行しないのかには理由があります。
GoogleOptimizeは自分は業務では使ったことが無いのですが、個人的に軽く使ってみた感じとしては、jsでいじれる範囲でのUI的な部分しかテストできないため、かなり限定的にしか使用できないように感じました。
UI部分のみの変更しかしないような場合はいいのですが、例えばレコメンドのロジックを変えてABテストを行いたいなどの場合には使用することが大変(やろうと思えばできなくはないです)なため、あえて移行する必要はまだ無いと考えています。
webマーケや企画系の人がサクッとUI変更だけ試すという場合にはOptimizeでもいいかもしれないですね。

作ったGemについて

https://github.com/ykogure/google_analytics_ab_test_on_rails
https://rubygems.org/gems/google_analytics_ab_test_on_rails

今回作成したGemでは、GoogleAnalyticsへセッション切り分け用のイベントトラッキングを送信する方法として、GoogleTagManagerを通す方法と、analytics.jsで直接イベントを送信する2種類の方法を選択できるようにしています。
自分のサイトに合わせて選んで下さい。

ちなみにGoogleTagManagerを使う方法では、自分が作ったGoogleTagManager用のGemのGTMonRailsを使うようになっています。

※下記記事にGTMonRailsの導入方法については記載されています
GoogleTagManagerを簡単に使うためのRails用Gemを作ってみた(GTMを使ったPV計測の設定方法)

導入&設定手順

Gemの導入

Gemfileに

Gemfile
gem 'google_analytics_ab_test_on_rails'

と書いてbundle installします。
インストール後、

rails g google_analytics_ab_test_on_rails:install

のコマンドを実行し、初期設定(configファイル生成等)を行います。

Gemの設定

生成されたconfig/initializers/google_analytics_ab_test_on_rails.rbでGemの設定を変更します。

sender

GoogleTagManagerかanalytics.jsか、イベントトラッキングの方法を選ぶ設定。
「:gtm」か「:analytics_js」を設定値に入れる。

tracking_event_category

GoogleAnalyticsのイベントカテゴリを設定する。
nilを設定した場合、"railsのコントローラ#railsのaction"が自動で設定される。

tracking_event_action

GoogleAnalyticsのイベントアクションを設定する。
nilを設定した場合、"ab_test"が自動で設定される。

tracking_event_label

GoogleAnalyticsのイベントラベルを設定する。
「{ab_test_name}」の部分に指定したABテストの名前が入り、「{ab_test_value}」にABテストの値が入る。

GoogleTagManagerの場合

https://qiita.com/ykogure/items/ebca38c038f996fb361f
この記事にあるGTMonRailsのGemの設定を行う。

次に、下記のトリガー・タグを設定すればGoogleAnalyticsへイベントを送信できます。

スクリーンショット 2018-02-13 13.41.57.png

スクリーンショット 2018-02-13 13.42.26.png

analytics.jsの設定

analytics.jsを使用する場合、

application.html.erb
<%= render_ab_test_analytics_js %>

bodyタグ内のanalytics.jsの計測タグより後に上記ヘルパータグを入れる。

ABテストを設定する

ABテストの開始

controllerやview
ab_test_start(:aiueo, ['A_pattern', 'B_pattern'])

上記のように記述することで、「aiueo」という名前のABテストを開始する事ができます。
ABテストの開始とは、1度目のアクセスの場合に、GoogleAnalytics側にABテストの名前と振り分け内容を含むイベントを送信することと、セッションに同じ内容を保存することです。

ABテストの振り分け

controllerやview
if get_ab_test_value(:aiueo) == 'A_pattern'
 # 処理内容A
else
 # 処理内容B
end

ABテストの開始の記述後、get_ab_test_valueで現在のセッションの振り分け内容を取得し、それに応じて処理を分岐させます。

また、振り分けに関しては、下記のように記述することも可能です。

controllerやview
ab_test_start(:aiueo, ['A_pattern', 'B_pattern']) do |ab_test_value|
  if ab_test_value == 'A_pattern'
   # 処理内容A
  else
   # 処理内容B
  end
end

ab_test_startメソッドについて

ab_test_start(:aiueo)

ABテストの振り分け候補を設定しない場合、デフォルトで'true'または'false'が文字列で設定されます。

ab_test_start(:aiueo, ['A_pattern', 'B_pattern', 'C_pattern'])

3パターン以上の振り分けも設定できます。

ab_test_start(:aiueo, {'A_pattern' => 1, 'B_pattern' => 9})

デフォルトの振り分け率は等確率でパターン振り分けを行いますが、上記のようにHashを設定することで、振り分け率を設定可能です。

ab_test_start(:aiueo, ['true', 'false'], event_category: 'カテゴリー')

config/initializers/google_analytics_ab_test_on_rails.rbでも設定可能ですが、場合に応じてab_test_startメソッド毎に上記のようにイベントカテゴリ・アクション・ラベルを設定可能です。

ABテストマネージャの設置

ABテストが設置されているかどうかや、ABテストの両パターンをテストするために切り替えたりすることのできる「ABテストマネージャ」を設置します。

applicatin.html.erb
<%= render_ab_test_manager %>

上記ヘルパータグを設置することで、画面上に固定で表示されるABテストマネージャを設置することができます。
実際には、ユーザー側に見えてしまうのは問題だと思いますので、適宜条件を指定して、管理者側しか見られないようにすることが必要になります。(IP制限等)

設定

デフォルトでは、ABテストマネージャは下部に固定されるものになっており、さらにABテストマネージャ自体のビューは変更できません。

rails g google_analytics_ab_test_on_rails:views position_top
rails g google_analytics_ab_test_on_rails:views position_bottom

上記のコマンドを実行することで、2種類のABテストマネージャ用viewファイルapp/views/google_analytics_ab_test_on_rails/_ab_test_manager.html.erbを作成することができる。
このviewファイルを変更することで、ABテストマネージャのviewを好きに変更できます。


これで一通り設定は完了です。
以下に計測方法の一例を書いておきます。

ただ、計測方法に関してはKPIや状況によって変わると思いますので、そこは適宜やってもらえればと思います。

計測方法

GoogleAnalytics側での計測方法を簡単に書いておきます。

スクリーンショット 2018-02-13 13.28.33.png

上記のようなセグメントを設定します。AパターンとBパターン等振り分けの分を作成します。

スクリーンショット 2018-02-13 13.30.51.png

そして、KPIがCVRの場合には、このように自分は「集客 > 概要」の項目で見ていることが多いです。
あとはセッションに対するコンバージョン数等の数値から、各パターンにおいて有意差があるかどうかt検定したりすればABテストの結果がだせると思います。

今後追加したい機能

  • 現状Gemに入っているABテストマネージャのビューは、自分が今会社で担当しているサイトに最適化してあるレイアウトのため、より汎用性の高いbootstrap用等のデフォルトビューの生成機能を追加したい。
  • 新しいGoogleAnalytics用のタグである、gtag.jsへの対応
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした