ahoy導入の経緯と課題
ahoyはRailsアプリケーションにアナリティクスツールを組み込むためのgemで、Railsアプリケーション上でユーザ行動ログを取得し、保存することができます。データの保存先としてActiveRecordを選択することができるので、最小構成のインフラでも簡単に導入することができます。また、Railsアプリケーションの一部として動くため、Google Analyticsへの接続を制限している環境のユーザの行動も補足することができるというメリットもあります。
開発中のRailsアプリケーションは認証用のライブラリとしてdeviseを利用しており、お客様と社内のスタッフをテーブル単位で分けています。ahoyは標準では複数のモデルに対応していないため、導入するにあたってこの問題を解決する必要がありました。
GitHub上に、deviseの複数のユーザモデルに対応させたいというIssue( Multiple Devise models · Issue #38 · ankane/ahoy · GitHub )が上がっており、 polymorphic関連で解決する、というgemの作者からの回答があるのですが、その具体的な手続きまでは書かれていません。 今回はその手順をまとめました。
ahoyの導入方法
公式のREADMEか、わかりやすいQiita記事を読んでください。
複数のdeviseのモデルのユーザをトラッキングする設定の手順
ここでは、deviseのユーザモデルが、staff, cutomerの二種類あるとして話を進めます。
まずREADMEのcustom user methodにあるように、コントローラ内でアクセス中のユーザのデータにアクセスするための設定を変更します。
# config/initializers/ahoy.rb Ahoy.user_method = ->(controller) { current_staff || current_customer }
Ahoy::Visit, Ahoy::Eventのモデルのbelong_toの部分をポリモーフィック関連に置き換えます。
# event.rb class Ahoy::Event < ApplicationRecord include Ahoy::QueryMethods self.table_name = 'ahoy_events' belongs_to :visit belongs_to :user, optional: true, polymorphic: true end # visit.rb class Ahoy::Visit < ApplicationRecord self.table_name = 'ahoy_visits' has_many :events, class_name: 'Ahoy::Event' belongs_to :user, optional: true, polymorphic: true end
データベースに保存するので、カラムの追加が必要ですね。追加しましょう。
class AddUserTypeToAhoyVisitsAndEvents < ActiveRecord::Migration[5.2] def change add_column :ahoy_visits, :user_type, :string, after: :visitor_token add_column :ahoy_events, :user_type, :string, after: :visit_id end end
また、eventに保存されるデータにカラムを追加する手続きが必要になります。
# config/initializers/ahoy.rb class Ahoy::Store < Ahoy::DatabaseStore def track_event(data) data[:user_type] = controller.current_staff ? 'Staff' : 'Customer' super(data) end end
以上で完成です。 あとは、好きなページにトラッキングコードを入れることで、複数のユーザモデルに対応した状態でユーザの行動を分析できるようになります。
自己紹介
浜田です。開発に関わるいろんなお仕事とサーバのお守りを担当しています。