👀

【Rails】Gem:impressionistを使ってPV数の実装

2023/08/11に公開

ページビュー数(PV数)を出すのに簡単に計測できるGemがあったので紹介!

impressionistとは

閲覧数を簡単にカウントすることができるGem。ユーザーが特定のページを閲覧した回数を記録するために使用。例えば、ブログの記事の閲覧数や商品の詳細ページの閲覧数を追跡する際に使うことができる。

使用準備

gemのインストール

Gemfileに以下を記載。

Gemfile
gem 'impressionist'

参照ページによっては「バージョンを指定しないとエラーがでる」と記載があるが、指定しなくても問題なかった!

bundle installをする。

ターミナル
bundle install

マイグレーションファイル生成

以下によって、impressionsテーブルのマイグレーションファイルが作成される。

ターミナル
rails g impressionist

マイグレーションの実行

ターミナル
rails db:migrate

impressionistを使用する準備はOK!

実装

モデルへの記載

閲覧数をトラッキングしたいモデルに impressionist メソッドを追加する。
今回は"投稿"に対して実装。

models/post.rb
class Post < ApplicationRecord
  # gem:impressionableの使用
  is_impressionable

コントローラへの記載

今回は、以下2点の閲覧数を表示させる。

  1. 投稿(post)単体のPV数
  2. ユーザーの全ての投稿のPV数

1. 投稿単体のPV数

controllers/posts_controller.rb
  :
  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数

controllers/users_controller.rb
  :
  def show
  :
    @posts = @user.posts
    @total_views = @user.posts.sum(&:impressionist_count)

ユーザーのコントローラでユーザーの投稿情報を取得する。
また、@total_views変数を使って、ユーザーの全ての投稿の閲覧数を合計する。

Viewへの記載

あとは対応するビューファイルで呼び出してあげるだけ。
デザイン実装前なので簡単な表示例だけど、アレンジして使用ください!

1.投稿単体のPV数

impressionist_count ヘルパーを使用する。

xxx.html.erb
<i class="fas fa-eye"></i>
<%= @post.impressionist_count %> Views

こんな感じ。

2. ユーザーの全ての投稿のPV数

xxx.html.erb
<p class="mr-3">Views:<%= @total_views %></p>

こんな感じ。

参照

https://qiita.com/ryo___eng/items/a525f80398210d0486b7

https://qiita.com/mattan5271/items/bec2040f766fc7b079a0


以上、impressionistの使い方でした!

妻の実家に帰省中ですが、ご飯もりもりでお腹いっぱいです。
太って帰ることになりそう

Discussion