はじめに
impressionist Gemを使用してRailsアプリケーションでページビューやクリック数を追跡する方法について説明します。
実装方法
impressionist Gemのインストール
まず、impressionist Gemをインストールします。Gemfile
に以下の行を追加しbundle install
を実行します。
Gemfile
gem 'impressionist'
インストールのセットアップ
次に、必要なマイグレーションファイルを作成してデータベースをセットアップします。
% rails generate impressionist
% rails db:migrate
モデルの設定
impressionistを使いたいモデルに設定を追加します。例えば、Article
モデルでページビューを追跡する場合は以下のようにします。
app/models/article.rb
class Article < ApplicationRecord
is_impressionable counter_cache: true
end
counter_cache: true
counter_cache
オプションは、インプレッションの数をキャッシュするためのカラムをモデルに追加する設定です。これにより、インプレッションの数を効率的に取得できるようになります。
コントローラーの設定
次に、コントローラーでインプレッションを記録するために設定を追加します。ArticlesController
で記事の詳細ページのビューを記録する例を示します。
app/controllers/articles_controller.rb
class ArticlesController < ApplicationController
impressionist actions: [:show], unique: [:session_hash]
def show
@article = Article.find(params[:id])
impressionist(@article)
end
end
ビューの設定
ビューに表示するために、インプレッションの数を取得します。例えば、記事の詳細ページでビュー数を表示する場合は以下のようにします。
app/views/articles/show.html.erb
<p>
<strong>Views:</strong>
<%= @article.impressionist_count %>
</p>
<h1><%= @article.title %></h1>
<p><%= @article.content %></p>
カスタムインプレッションの設定
impressionistはカスタムインプレッションもサポートしています。例えば、特定のアクションや条件でインプレッションを記録する場合、以下のように設定します。
app/controllers/articles_controller.rb
class ArticlesController < ApplicationController
def show
@article = Article.find(params[:id])
impressionist(@article, "custom message", unique: [:session_hash])
end
end
impressionist(@article, "custom message", unique: [:session_hash])
impressionist
メソッドは、impressionist Gemから提供されるメソッドで、特定のオブジェクト(ここでは記事)に対してインプレッションを記録します。@article
- インプレッションを記録する対象のオブジェクト。ここでは、先ほど取得した記事オブジェクト。
"custom message"
- インプレッションに関連付けるカスタムメッセージ。これはデフォルトでは省略可能ですが、ここでは例として指定されています。このメッセージは、インプレッションレコードの
message
カラムに保存されます。
- インプレッションに関連付けるカスタムメッセージ。これはデフォルトでは省略可能ですが、ここでは例として指定されています。このメッセージは、インプレッションレコードの
unique: [:session_hash]
- インプレッションをユニークにするためのオプションです。ここでは、セッションごとに一意のインプレッションを記録します。
[:session_hash]
を指定することで、同じセッション内での重複したインプレッションが防止されます。
- インプレッションをユニークにするためのオプションです。ここでは、セッションごとに一意のインプレッションを記録します。
インプレッションの集計
インプレッションデータを集計することで、ページビューやクリック数を分析できます。例えば、特定の記事のユニークビュー数を取得するには以下のようにします。
@unique_views = @article.impressionist_count(filter: :all, column_name: :impressionable_type, distinct: :ip_address)
filter: :all
- インプレッションのカウントにおいて、全てのインプレッションを対象とすることを指定します。
filter
オプションには、インプレッションのフィルタリング条件を指定できます。all
は全てのインプレッションを意味します。
- インプレッションのカウントにおいて、全てのインプレッションを対象とすることを指定します。
column_name: :impressionable_type
- カウントに使用するカラムを指定します。ここでは、
impressionable_type
カラムを使用します。
- カウントに使用するカラムを指定します。ここでは、
impressionable_type
- impressionist Gemが使用する内部のカラムで、インプレッションがどのモデルに関連付けられているかを記録します。このカラムを使用することで、特定のモデル(ここでは
Article
)に関連するインプレッションだけをカウントします。
- impressionist Gemが使用する内部のカラムで、インプレッションがどのモデルに関連付けられているかを記録します。このカラムを使用することで、特定のモデル(ここでは
distinct: :ip_address
- ユニークビューの判定基準として、IPアドレスを使用します。これにより、同じIPアドレスからの複数のインプレッションは一つとしてカウントされます。
また、特定の期間内のインプレッションを集計するには、スコープを利用します。
start_date = Date.today.beginning_of_month
end_date = Date.today.end_of_month
@monthly_impressions = @article.impressions.where(created_at: start_date..end_date).count
まとめ
impressionist Gemを使用することで、Railsアプリケーションに簡単にページビューやクリック数の追跡機能を追加できます。モデルとコントローラーに設定を追加するだけで、インプレッションを記録し、ビューで表示することができます。
カスタムインプレッションや集計機能を活用することで、詳細な分析も可能です。