14
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Rails】Googleアナリティクスを導入する方法【簡単】

Last updated at Posted at 2020-11-11

今回開発し、リリース間近のWebサービスでデータ収集するために、Googleアナリティスクスを導入したのでその方法を紹介します。
google-analytics-railsというgemがありそちらを使う方法もあるのですが、githubで見てみると2017年の10月あたりで更新が止まっており(一応先月にReadmeは更新されてた)、不安だったので今回はgem無しで導入しました。

【前提条件】
・Googleアナリティクスに登録していること。(登録方法はこちら

#導入方法
Googleアナリティクス用の部分テンプレートを用意し、headタグで読み込むだけです。

layauts/_google_analytics.html.haml
%script{async: "", src: "https://www.googletagmanager.com/gtag/js?id=トラッキングID"}
:javascript
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  gtag('config', 'トラッキングID');
  if (#{raw current_user.to_json}) {
    gtag('set', {'user_id': #{raw current_user.to_json}.id});
  }
application.html.haml
!!!
%html
  %head
    %meta{:content => "text/html; charset=UTF-8", "http-equiv" => "Content-Type"}
    = stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload'
    = javascript_pack_tag 'application', 'data-turbolinks-track': 'reload'
    - if Rails.env.production?
      = render 'layouts/google_analytics'

ここでポイントになるのが、最後のif 文で、これはログインしている場合はcurrent_userをjsonに変換してデータを渡して上げているという点です。
また、エスケープ処理を回避させるためにActionView::Helpers::OutputSafetyHelperのrawメソッドを使っています。html_safeでも同じことができますが、nilだった場合に例外が発生してしまうのでrawメソッドが推奨されているようです。(Railsガイドを見てみると、To insert something verbatim use the raw helper rather tha calling html_safe:とあります。)

参考

最後まで読んでいただきありがとうございます!

日々学んだことをアウトプットしてます!何かのお役に立てれば幸いです。ご指摘などあればコメントいただけますと幸いです。

14
7
0

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
14
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?