Index

RailsのGemパッケージ 「 ahoy 」を用いたアクセス解析 + システム活用

アクセス解析なら基本はGAタグを入れ込めば良い訳ですが、解析した内容に応じて 何らかの判定や分岐を行いたい場合にahoyが利用可能です。

出来る事として - バックエンド側でのVisitorの記録、分析 - フロント側でのイベントの検知

などです。

ahoyを使わなくても出来る作業ですが、rails-adminと合わせて、簡易的に訪問者やイベントのデータを見る事が出来ます。

ahoy公式

1 インストール、準備

Rail7以上を対象に進めています。

gem "ahoy_matey"

bundle install

$ bin/rails generate ahoy:install
create  config/initializers/ahoy.rb
create  app/models/ahoy/visit.rb
create  app/models/ahoy/event.rb
create  db/migrate/20220305232204_create_ahoy_visits_and_events.rb

bin/rails db:migrate を忘れずに

config/initializers/ahoy.rb

Ahoy.api = true #change true

For Rails 7 / Importmap, add to config/importmap.rb:

Rail7以上の場合に追加 config/importmap.rb

pin "ahoy", to: "ahoy.js"

app/javascript/application.js:

import "ahoy"

これでrails-admin上でも Events Visits を確認することが出来るようになります。

2 イベントを設置してみる。

2-1 サーバー側でイベントを記録

例えば作成したArticlesコントローラーのアクションを計測するには下記のようにします。

app/controllers/articles_controller.rb

  after_action :track_action

  private
  def track_action
    ahoy.track "Ran action", request.path_parameters
  end

閲覧したページのタイトルを取得

  def show
    @article = Article.find(params[:id])
    ahoy.track "Viewed Article", title: @article.title

    # @category_name = @article.category.name
  end

全体を監視する場合は app/controllers/application_controller.rb にafter_actionと関数を設置しましょう。

2-2 VISITイベントを元にアクセス解析をする。

下記のようにすればイベントの内容をサーバー側で取得可能です。

@visits = Ahoy::Visit.includes(:events).all

@visits.each do |visit|
 # visit.ip
 # visit.user_agent
    visit.events.each do |event|
        # event.name
        # event.properties 
    end
end

3 jsとしてテンプレート側に設置

3-1 直接ボタンイベントに記載する場合。

シンプルにbutton設置

<button class="btn btn-primary" onClick="ahoy.track('check',{data:'トップへ戻るイベント'});location.replace('/')">トップへ</button>

3-2 ページのクリックを継続する

link_to に設定したdatasetを取得してイベントとして記録しています。

テンプレ


<%= link_to "TESTCLIKCLASS", root_path , data: {test: "test click"},class: "btn btn-primary", id: "testclickclass" %> ```` 追加するjs ```js <script> document.querySelector("#testclickclass").addEventListener("click",function(e){ ahoy.track("buttonclick",e.target.dataset); }); </script>

4 設定の変更 > 新規訪問の感覚、Bot無視

initializers/ahoy.rb

# 新規訪問の間隔を変えたい
Ahoy.visit_duration = 30.minutes

# ↓はBotを計測する場合、通常は設定しないので、そのままで良し
# Ahoy.track_bots = true

5 活用パターンの構築

トークン番号が発行されますので、トークンの末尾の番号に応じて、A,B データを出力みたいな形が可能です。

コントローラーに記載

    # 現在のトークンを取得
    @ahoy = ahoy.visit_token
    # そのトークンのIDを取得
    @checkahoy =  Ahoy::Visit.where(visit_token: @ahoy).pluck(:id)
    # 過去のトークンIDのイベントを取得
    # イベントを1つも踏んでない場合は[]、踏んでる場合は[30,37]などイベントのIDが表示
    @event = Ahoy::Event.where(visit: @checkahoy).pluck(:id)

テンプレートに表示して確認してみましょう。

<%= debug @ahoy %>
<%= debug @checkahoy %>
<%= debug @event %>

例えば上記のようにすれば、ahoyで指定されたサイクル(Ahoy.visit_duration = 30.minutes 等)に 初めて、訪れたのか、もしくは複数回訪れてるかなどが検証できます。 それに合わせてデータの集計や表示の出し分けなどが可能になります。

最新記事一覧

続きを見る

関連コンテンツ

カテゴリー一覧

TOP フルスタックエンジニアを目指すに方々へ 2022年2月12日 カテゴリを付けれるようにする。