Railsで自作したアプリケーションをネット上に公開して運用する場合、どれくらいアクセス数(ページビュー)があるのか気になるかと思います。
そこで今回は、最もポピュラーなツールであるGoogleアナリティクス(GA4)を用いて、自作アプリケーションのアクセス数を計測できるようにする方法についてまとめました。
その際、Adminユーザー(管理者)のアクセスはカウントされないようにしていきたいと思います。
よければ参考にしてみてください。
開発環境
- Ruby 3.1.2
- Ruby on Rails 7.0.4
- Bootstrap 5.2.3
- M1 Macbook Air 2020
- mac OS Monterey (ver. 12.4)
Googleアナリティクスタグ(GA4)の取得と設置方法
ここでは、下記を前提のもとに話を進めていきます。
- 自作アプリが完成している(デプロイ済み)
- Adminユーザー(Adminカラム)作成済み
- ユーザー認証はDeviseを使用
- 自作アプリのURLをGoogleに登録済み(Googleサーチコンソール)
- Google Analyticsアカウント作成済み
Googleアナリティクスタグ(GA4)の取得
タグを取得するためにはまず、プロパティを追加する必要があります。
プロパティの追加は以下の記事を参考に進めてみてください(説明が面倒なのでGoogle先生の力を借りますw)
作成したプロパティのメニューから「データストリーム」の欄を選択し、作成済みのストリームをクリック。
下の方の「タグの実装手順を表示する」をクリックして進み、「手動でインストールする」タブをクリックすると以下のようなGoogleタグが表示されます。
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-○○○○○○○○○○"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-○○○○○○○○○○');
</script>
このタグをコピーしておきます。
取得したタグをRailsアプリ(application.html.erb)に設置する
先ほどコピーしたGoogleタグを、Railsアプリのapplication.html.erb
の<head>
タグ内に設置します。
<!DOCTYPE html>
<html>
<head>
<title>山が好き旅が好き</title>
<meta name="description" content="山と旅が好きな管理人がお届けする、波瀾万丈な山旅ブログです。僕自身が体験したことをありのままに面白おかしく発信するよう努めるので、どうか真に受けずに肩の力を抜いてご覧ください。">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="turbo-visit-control" content="reload">
<%= csrf_meta_tags %>
<%= csp_meta_tag %>
<%= stylesheet_link_tag "application", "data-turbo-track": "reload" %>
<%= javascript_include_tag "application", "data-turbo-track": "reload", defer: true %>
/** Googleアナリティクス用タグ **/
<% if (current_user.admin == false || current_user.nil?) && Rails.env.production? %>
<script async src="https://www.googletagmanager.com/gtag/js?id=G-○○○○○○○○○○"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-○○○○○○○○○○');
</script>
<% end %>
</head>
<body>
・・・
</body>
</html>
これでアクセス数を計測できるようになります。
ただし、このままだと全体のアクセス数はカウントできても、ページごとの正確なアクセス数がカウントできません(GA4の仕様上)。
なので、もう少し手を加えます。
ページごとにタイトルタグの表示を変える
Googleアナリティクス(GA4)のタグを設置すると、アクセスされたページのタイトル(<title>
タグの中身)を取得し、ページごとのアクセス数をカウントしてくれます。
例えば当ブログの場合、以下のようにアクセスされたページのタイトル詳細とアクセス数が表示されます。
ただ、Railsアプリの場合、デフォルトでは表示するページに応じて<title>
タグの中身は変わらず一定のままです。
(何もしないと、どのページにアクセスしても常に同じタイトルが取得される。つまり、ページごとの正確なアクセス数をカウントできない)
そこで、表示するページに応じて<title>
タグの中身が変更されるよう、application.html.erb
の<head>
タグ内のコードに手を加える必要があります。
以下は僕の自作ブログの一例です。
<!DOCTYPE html>
<html>
<head>
/** 表示するページに応じてタイトルタグの中身を変更 **/
<% if current_page?(root_path) %>
<title>山が好き旅が好き</title>
<% elsif current_page?(profile_path) %>
<title>プロフィール</title>
<% elsif current_page?(categories_path) %>
<title>カテゴリー</title>
<% elsif (controller_path == "categories" && action_name == "show") %>
<title>カテゴリー:<%= @category.name %></title>
<% elsif (controller_path == "posts" && action_name == "show") %>
<title><%= @post.title %></title>
<% end %>
<meta name="description" content="山と旅が好きな管理人がお届けする、波瀾万丈な山旅ブログです。僕自身が体験したことをありのままに面白おかしく発信するよう努めるので、どうか真に受けずに肩の力を抜いてご覧ください。">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="turbo-visit-control" content="reload">
<%= csrf_meta_tags %>
<%= csp_meta_tag %>
<%= stylesheet_link_tag "application", "data-turbo-track": "reload" %>
<%= javascript_include_tag "application", "data-turbo-track": "reload", defer: true %>
/** Googleアナリティクス用タグ **/
<script async src="https://www.googletagmanager.com/gtag/js?id=G-○○○○○○○○○○"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-○○○○○○○○○○');
</script>
</head>
<body>
・・・
</body>
</html>
トップページ、プロフィール、カテゴリー、各投稿のタイトル、などアクセスがあったときにGoogleアナリティクスにカウントしてほしいページにのみ対処しています。
これでページごとの正確なアクセス数をカウントできるようになるはずです。
Adminユーザーのみカウントされないようにする
ただし、このままでは自分自身のアクセスもカウントされてしまいます。
自分自身のアクセスを除外する方法はいくつかありますが、今回は自分自身がAdminユーザーと仮定し、Adminユーザーのみアクセス数がカウントされないようにする方法について述べます。
方法は至ってシンプルで、Adminユーザーがログインしている間は<head>内のGoogleタグを非表示にすればいいだけです。
<!DOCTYPE html>
<html>
<head>
/** 表示するページに応じてタイトルタグの中身を変更 **/
<% if current_page?(root_path) %>
<title>山が好き旅が好き</title>
<% elsif current_page?(profile_path) %>
<title>プロフィール</title>
<% elsif current_page?(categories_path) %>
<title>カテゴリー</title>
<% elsif (controller_path == "categories" && action_name == "show") %>
<title>カテゴリー:<%= @category.name %></title>
<% elsif (controller_path == "posts" && action_name == "show") %>
<title><%= @post.title %></title>
<% end %>
<meta name="description" content="山と旅が好きな管理人がお届けする、波瀾万丈な山旅ブログです。僕自身が体験したことをありのままに面白おかしく発信するよう努めるので、どうか真に受けずに肩の力を抜いてご覧ください。">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="turbo-visit-control" content="reload">
<%= csrf_meta_tags %>
<%= csp_meta_tag %>
<%= stylesheet_link_tag "application", "data-turbo-track": "reload" %>
<%= javascript_include_tag "application", "data-turbo-track": "reload", defer: true %>
/** Googleアナリティクス用タグ **/
/** ログインしていないユーザー、もしくはAdmin権限のないユーザーの場合はGoogleタグが表示される **/
<% if current_user.admin == false || current_user.nil? %>
<script async src="https://www.googletagmanager.com/gtag/js?id=G-○○○○○○○○○○"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-○○○○○○○○○○');
</script>
<% end %>
</head>
<body>
・・・
</body>
</html>
これでAdminユーザーがログインしている間はアクセス数が計測されません。
一応、Googleアナリティクスの設定でも自身のアクセスをカウントしないようにできますが、IPアドレスを設定する必要がるため、常に場所を変えて作業する場合はあまり意味がないかと思います。
(スマホの場合はIPアドレスがコロコロ変わるので、そもそもやる意味がない)
その点、Adminユーザー(もしくは特定のユーザーのみ)を計測の対象外にしておけば、場所関係なく適用されるので便利かと思います。
以上。
コメント