15
14

More than 5 years have passed since last update.

【Railsで】Vanityのセットアップ【A/Bテスト】

Last updated at Posted at 2013-03-07

※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

インストール

Gemfile
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向けに設定する。

vanity.yml
development:
  adapter: redis
  database: redis://localhost:6379/0

このあたりは以下URLを参考に雰囲気で。
http://vanity.labnotes.org/configuring.html

vanityを適用する

config/environments/developent.rbを変更する(各環境ごとに必要になると思う)。

developemt.rb
# 以下を追加
Vanity.playground.collecting = true

app/controller/application_controller.rbを変更する。

application_controller.rb
class ApplicationController < ActionController::Base
  # 以下を追加
  use_vanity :current_user

  # ... 以下色々続きます

current_userでユニークなアクセスかどうかを識別する、らしい。

【余談】嵌った話

Rails初心者なもので、そもそもcurrent_userが何なのかわからず、とりあえず書いてみたら、エラーになった。
バグを回避するため、application_controllerには即席のcurrent_userを追加して事なきをえる。

application_controller.rb
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を追加する。

vanity_controller.rb
class VanityController < ApplicationController
  include Vanity::Rails::Dashboard
end

ルーティングを設定する。

routes.rb
# 以下を追加
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を追加する。

post.rb
metric "Post" do
  description "おお!おおおおお!!!"
end

※イマイチ使い方がわかってない。

experiments/post_labels.rbでA/Bテスト用のデータを入れる。

post_labels.rb
ab_test "Post labels" do
  description "投稿画面へのリンクテキストを比較"
  alternatives  '記事を投稿する', 'ブログを投稿する', 'つぶやく'
  metrics :post
end

A/Bテストと言いつつ、2パターン以上用意できる。

表示に対応するビューとコントローラーに組み込む

まず表示する側に組み込もう。
Getting Startedに則って開発しているとおそらく app/views/posts/index.html.erb に投稿画面へのリンクがあるはずだ。
それを以下のようなリンクに変更する。

index.html.erb
<!-- リンク部分のみ表示 -->
<a href="<%= new_post_path %>"><%= ab_test :post_labels %></a>

表示を確認してみよう。
同一セッションのユーザーは3パターンのどれかが永続的に表示されているはず。
別のブラウザを開くか、vanity_idというクッキーを削除することで、確率により他の文言も表示される。

次に、測定する側の記述を追加する。
コンバージョン対象のアクションに対応しているコントローラーを見つけて、以下のように一行追加すれば完了。
この例ではフォーム投稿画面の app/controllers/posts_controller.rb が該当する。

posts_controller.rb
  def new
    @post = Post.new
    # 以下の一行を追加
    track! :post

これで計測されるようになる。
色んな方法でアクセスしてみた後、ダッシュボードを確認すると反映されているはず。

終わりに

今のところ本番に上げてないし、あくまでも開発環境までの話。
ここからさらに問題が起きるかもしれなくて不安。
データベースにはmongoDBも使えるらしい。

RailsもRubyもあまりよく理解していなかったので、一歩進むごとにはまった。
今でもこれが正しいのかさっぱりわからない。

あと長すぎて、途中で文体が変わったことに気付かなかった。

15
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
14