※2013/04/10に追記
RailsでA/Bテストを導入するならVanityよりもSplitをおすすめします!
RailsにA/BテストツールのSplitを導入する
Railsで軽いA/Bテストを実施できるVanityをインストールして動かしてみました。
https://github.com/assaf/vanity
参考にしたブログ。
http://face-do.blogspot.jp/2013/01/vanityrailsab-gemfile-gem-chanko-git.html
インストール
gem 'vanity'
bundle install
して入る。
Redisをインストール
標準のactive_record経由でsqlite3に書き込ませようとしたら、なかなかうまくできなくて嵌ったのでRedisに変更しました。
Redis入れたら素晴らしくスムーズに動く。
わたくしMacですので、$ brew install redis
完了でした。
Macではない方は各々のやり方でインストールすること。
セットアップ
参考ブログでは $ rails generate vanity
と $ rake db:migrate
してますが、ここではRedisを採用しているので不要です。
vanity.ymlでredisに向ける
config/vanity.ymlを作成してredis向けに設定する。
development:
adapter: redis
database: redis://localhost:6379/0
このあたりは以下URLを参考に雰囲気で。
http://vanity.labnotes.org/configuring.html
vanityを適用する
config/environments/developent.rbを変更する(各環境ごとに必要になると思う)。
# 以下を追加
Vanity.playground.collecting = true
app/controller/application_controller.rbを変更する。
class ApplicationController < ActionController::Base
# 以下を追加
use_vanity :current_user
# ... 以下色々続きます
current_userでユニークなアクセスかどうかを識別する、らしい。
【余談】嵌った話
Rails初心者なもので、そもそもcurrent_userが何なのかわからず、とりあえず書いてみたら、エラーになった。
バグを回避するため、application_controllerには即席のcurrent_userを追加して事なきをえる。
class ApplicationController < ActionController::Base
protect_from_forgery
use_vanity :current_user
protected
def current_user
session[:user_id]
end
end
実際に動いているアプリケーション(すでにユーザー管理系があるもの)に追加したときは、上記のようなコードは不要だった。
テストで作った空のRailsには必要でした、という話。たぶん。
ダッシュボードの設定
app/controller/vanity_controller.rbを追加する。
class VanityController < ApplicationController
include Vanity::Rails::Dashboard
end
ルーティングを設定する。
# 以下を追加
match '/vanity(/:action(/:id(.:format)))', :controller=>:vanity
localhost:3000でアプリを立ち上げているのであれば、
http://localhost:3000/vanity
でアクセスできる。
お試しのA/Bテストを追加する
公式のGetting Startedで作成するBlogで試してみよう。
- 投稿フォーム画面へのリンク文言でA/Bテスト
- 実際に投稿フォーム画面が表示されたら記録する
A/Bテスト用のファイルを用意する
vanityではexperimentsディレクトリ内のファイルを元にテストするので、新しくexperimentsディレクトリを作成すること。
- experiments/post_labels.rb
-- A/Bテスト用の文字列と、どの指標に対応しているか指定する - experiments/metrics/post.rb
-- 指標用のファイル
experiments/metrics/post.rbを追加する。
metric "Post" do
description "おお!おおおおお!!!"
end
※イマイチ使い方がわかってない。
experiments/post_labels.rbでA/Bテスト用のデータを入れる。
ab_test "Post labels" do
description "投稿画面へのリンクテキストを比較"
alternatives '記事を投稿する', 'ブログを投稿する', 'つぶやく'
metrics :post
end
A/Bテストと言いつつ、2パターン以上用意できる。
表示に対応するビューとコントローラーに組み込む
まず表示する側に組み込もう。
Getting Startedに則って開発しているとおそらく app/views/posts/index.html.erb
に投稿画面へのリンクがあるはずだ。
それを以下のようなリンクに変更する。
<!-- リンク部分のみ表示 -->
<a href="<%= new_post_path %>"><%= ab_test :post_labels %></a>
表示を確認してみよう。
同一セッションのユーザーは3パターンのどれかが永続的に表示されているはず。
別のブラウザを開くか、vanity_idというクッキーを削除することで、確率により他の文言も表示される。
次に、測定する側の記述を追加する。
コンバージョン対象のアクションに対応しているコントローラーを見つけて、以下のように一行追加すれば完了。
この例ではフォーム投稿画面の app/controllers/posts_controller.rb
が該当する。
def new
@post = Post.new
# 以下の一行を追加
track! :post
これで計測されるようになる。
色んな方法でアクセスしてみた後、ダッシュボードを確認すると反映されているはず。
終わりに
今のところ本番に上げてないし、あくまでも開発環境までの話。
ここからさらに問題が起きるかもしれなくて不安。
データベースにはmongoDBも使えるらしい。
RailsもRubyもあまりよく理解していなかったので、一歩進むごとにはまった。
今でもこれが正しいのかさっぱりわからない。
あと長すぎて、途中で文体が変わったことに気付かなかった。