【Rails】Gem:impressionistを使ってPV数の実装
ページビュー数(PV数)を出すのに簡単に計測できるGemがあったので紹介!
impressionistとは
閲覧数を簡単にカウントすることができるGem。ユーザーが特定のページを閲覧した回数を記録するために使用。例えば、ブログの記事の閲覧数や商品の詳細ページの閲覧数を追跡する際に使うことができる。
使用準備
gemのインストール
Gemfileに以下を記載。
gem 'impressionist'
参照ページによっては「バージョンを指定しないとエラーがでる」と記載があるが、指定しなくても問題なかった!
bundle installをする。
bundle install
マイグレーションファイル生成
以下によって、impressionsテーブルのマイグレーションファイルが作成される。
rails g impressionist
マイグレーションの実行
rails db:migrate
impressionistを使用する準備はOK!
実装
モデルへの記載
閲覧数をトラッキングしたいモデルに impressionist
メソッドを追加する。
今回は"投稿"に対して実装。
class Post < ApplicationRecord
# gem:impressionableの使用
is_impressionable
コントローラへの記載
今回は、以下2点の閲覧数を表示させる。
- 投稿(post)単体のPV数
- ユーザーの全ての投稿のPV数
1. 投稿単体のPV数
:
def show
@post = Post.find(params[:id])
# 同セッションでの重複閲覧をカウントしない
impressionist(@post, nil, unique: [:session_hash])
:
end
ビュー数を追跡したいコントローラのアクションで、impressionist
メソッドを呼び出す。
単純なビュー数カウントなら、impressionist(@post)
でもOKだが、同じセッション内での重複閲覧をカウントしたくなかったので、オプションを指定してあげる。
impressionist(@post, nil, unique: [:session_hash])
のようにすることで、同じユーザーが同じページを複数回閲覧しても、1度しかカウントされない。
2. ユーザーの全ての投稿のPV数
:
def show
:
@posts = @user.posts
@total_views = @user.posts.sum(&:impressionist_count)
ユーザーのコントローラでユーザーの投稿情報を取得する。
また、@total_views
変数を使って、ユーザーの全ての投稿の閲覧数を合計する。
Viewへの記載
あとは対応するビューファイルで呼び出してあげるだけ。
デザイン実装前なので簡単な表示例だけど、アレンジして使用ください!
1.投稿単体のPV数
impressionist_count
ヘルパーを使用する。
<i class="fas fa-eye"></i>
<%= @post.impressionist_count %> Views
こんな感じ。
2. ユーザーの全ての投稿のPV数
<p class="mr-3">Views:<%= @total_views %></p>
こんな感じ。
参照
以上、impressionistの使い方でした!
妻の実家に帰省中ですが、ご飯もりもりでお腹いっぱいです。
太って帰ることになりそう
Discussion