LoginSignup
72
93

Ruby on RailsでPV数を計測する

Last updated at Posted at 2018-05-09

株式会社TECH LUCKという会社で代表兼エンジニアをしている齊藤です。

記事を投稿する機能があるサイトなどでは、PV数の多い順に記事を順位づけて表示したいという時があると思います。
Railsではあるモデルに紐づいたレコードのPV数を計測することができる impressionist というgemがあります。
プロジェクトで使用したついでに、impressionist の導入方法をまとめておきました。

Gemのimpressionistをインストール

Gemfileに以下の記述をして、bundle installしましょう。

Gemfile
gem 'impressionist'
bundle install

impressionists_tableを作成

次に、 impressionist が用意している impressionsテーブル を作成するために、以下のコマンドをターミナルで実行しマイグレーションファイルを作成しましょう。

rails g impressionist

以下のような表示が出れば、マイグレーションファイルの作成ができています。

create  db/migrate/20180508141931_create_impressions_table.rb
create  config/initializers/impression.rb

実際にテーブルを作成しましょう。

rake db:migrate

PV数を計測したいテーブルに関連したモデルとコントローラに記述を加える

わかりやすいように、本記事ではTwitterのようなサービスを考えて実装を行っていきます。
tweets_controller.rb の中で、動かしたいアクションに対して impressionist というアクションを追加します。
例えば、ある特定のツイートを誰かが押して、詳細をみた際にPV数を計測したい場合は以下のように、showアクションに impressionist をつけます。

tweets_controller.rb
class TweetsController < ApplicationController
  impressionist :actions=> [:show]

  def show
    @tweet = Tweet.find(params[:id])
  end
end

また、該当のアクション内に以下の記述をします。
PV数は様々な方法で計測することができますが、今回は同じ人アクセス(同じブラウザからアクセス)した複数回、同じ記事をみた場合は1PVと数えることにしました。

tweets_controller.rb
  def show
    @tweet = Tweet.find(params[:id])
    impressionist(@tweet, nil, unique: [:session_hash])
  end

計測したいモデルに、以下の記述をします。

tweet.rb
class Tweet < ApplicationRecord
  is_impressionable
end

以上で設定は完了です。
実際にブラウザでPV数を確認するには、以下の記述をします。

show.html.erb
<%=  @tweet.impressionist_count %>

show.html.erb にPV数が出てきたら完了です。
※同じブラウザからアクセスしてもPV数は変わらない設定なので、違うブラウザからアクセスしてみてください。

72
93
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
72
93