71
93

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Ruby on RailsでPV数を計測する

Last updated at Posted at 2018-05-09

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

DXプロジェクト、開発プロジェクト、Rails開発などでお困りごとがありましたら弊社HPからご相談をいただけますと幸いです。
以下のような問題に対応することが可能です。

  • プロジェクトでRailsエンジニアが足りなくて困っている
  • Railsのバージョンアップをしたいがノウハウ・リソースが足りなくて困っている
  • オフショア開発をしているが、要件の齟齬やコード品質が悪いので改善したい

また、Railsエンジニアも募集しておりますので、興味がありましたら弊社HPからご連絡いただけますと幸いです。

前提

記事を投稿する機能があるサイトなどでは、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数は変わらない設定なので、違うブラウザからアクセスしてみてください。

71
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
71
93

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?