【Rails】impressionistを使用してページビューやクリック数を追跡する方法

はじめに

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)に関連するインプレッションだけをカウントします。
  • 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アプリケーションに簡単にページビューやクリック数の追跡機能を追加できます。モデルとコントローラーに設定を追加するだけで、インプレッションを記録し、ビューで表示することができます。

カスタムインプレッションや集計機能を活用することで、詳細な分析も可能です。

関連記事

【Rails】Paranoiaを使用した論理削除(ソフトデリート)
# はじめに Paranoiaは、Railsアプリケーションで論理削除(ソフトデリート)を実現するためのGemです。 論理削除は、データベースのレコードを物理的に削除するのではなく、削除フラグを設定することで「削除済み」とみなす方法です。こ [...]
2024年7月20日 21:33
【Rails】activerecord-multi-tenantを使用したマルチテナントアプリケーションの作成
# はじめに マルチテナントアプリケーションでは、複数の顧客(テナント)が同じアプリケーションを利用するため、データの分離が必要です。 activerecord-multi-tenantは、このようなマルチテナント環境をサポートするための便 [...]
2024年7月18日 16:50
【Rails】RubyとRailsにおけるattr_reader, attr_writer, attr_accessorの概念と使用方法
# はじめに RubyとRailsの開発において、`attr_reader`,`attr_writer`,`attr_accessor`は非常に便利なメソッドです。これらは、クラス内でインスタンス変数に対するゲッターおよびセッターメソッドを簡単に [...]
2024年7月17日 18:11
【Rails】RubyとRailsにおけるyieldの概念と使用方法
# はじめに RubyとRailsにおける`yield`は、メソッドやテンプレートの中で動的にコードブロックを実行する能力を提供し、これによってコードの再利用性と拡張性が大幅に向上します。本記事では、RubyとRailsにおける`yield`の概 [...]
2024年7月17日 13:15
【Rails】AASMを使用してオブジェクトの状態遷移を効率的に管理
# はじめに Railsアプリケーションにおいて、オブジェクトの状態管理は重要な課題の一つです。AASM (Acts As State Machine) gemは、複雑な状態遷移を効率的に管理します。本記事では、AASMの基本的な使い方を解説して [...]
2024年7月16日 18:00
【Rails】RSpec + Swagger + rswagでアプリケーションのAPIをテストおよびドキュメント化する方法
# はじめに Railsアプリケーションの開発において、APIのテストとドキュメント化は重要な要素です。 RSpecはテストフレームワークとして広く利用されており、SwaggerはAPIの設計とドキュメント化を支援します。これらを統合するr [...]
2024年7月16日 14:27
【Rails】mailcatcherを使用して開発環境でメール送信をテストする方法
# はじめに mailcatcherは、開発環境でのメール送信をキャプチャするためのツールです。ローカルで送信されたメールをブラウザ上で簡単に確認できるようにします。mailcatcherをRailsアプリケーションで使用する方法について説明しま [...]
2024年7月15日 16:37
【Rails】meta-tagsを使用したメタタグの管理
# はじめに RailsアプリケーションでSEO対策を行うために、meta-tags Gemを使用してメタタグを管理する方法について説明します。 # メタタグの管理 ## meta-tags Gemのインストール まず、meta-t [...]
2024年7月15日 13:47