モバイル・アプリでイベントトラッキングを行い、その結果を、自サービスの管理画面から見たいと思った。
自前でイベントトラッキングの仕組みを構築するのは、やりがいはあるが、大変な作業だろう。今回は、Google Analytics のイベントトラッキングを利用し、さらに、Ruby on Rails から 集計結果を取得する仕組みを構築した。

いまさら Google Analytics かよ・・・といった感じだが・・・

Google Analytics の全体像 を知る

Google Analytics の大まかな概要は、下記の公式ページが詳しい。
プラットフォームの概要

API は大きく3つに分かれる。

User IDを有効にしておく

Google Analytics は、User IDを設定する仕組みが存在する。トラッキングする際に User ID を設定しておけば、ユニークユーザー数を集計することも、イベントの合計数を集計することもできる。

User ID について

イベントトラッキングを試す

まずはイベントトラッキングを使ってみることから初めた。実際にはモバイル・アプリでトラッキングすることになるが、先んじてAngular.js で簡単なテスト・ツールを作った。ボタンを押せばイベントが飛ぶ。

API を試す

Googleは膨大なAPI を提供している。Google Analytics に限っても膨大なAPI がある。使うAPI の選定と、パラメータの設定方法を確認する。Googleが提供する APIs Explorerを見る。

Google APIs Explorer

今回は、Google Analytics API v3 の analytics.data.ga.get を使う。
APIs Explorerを使って API を試しに実行してみると、JSONが取れた。

注目するのは、metrics、dimensions、filters だ。設定できる値は、何を設定すれば良いのかは、下記のリファレンスに書いてある。

https://developers.google.com/analytics/devguides/reporting/core/dimsmets

例えば、metricsga:users を設定すれば、ユニークユーザーで集計した値を取得できる。

Ruby から 実行する

Google API Client Library for Ruby

この Getting Started を見ながら進める。

https://developers.google.com/api-client-library/ruby/start/get_started

Developer Consoleにプロジェクトを作り、Google Analytics API を有効にする。

https://console.developers.google.com/project

Google Analytics のレポートが、一般公開されていない場合、API Key でアクセスすることができない。OAuth 2 を使わなければならない。*OAuth クライアントID*を*サービスアカウント*で発行する。*サービスアカウント*の*メールアドレス*を、Google Analytics 上でメンバーに追加することでアクセス権限が与えられる。

Ruby のもっと具体的なサンプルコードは、Googleがgithubに公開している下記のコードを参考にした。

https://github.com/google/google-api-ruby-client-samples/blob/master/service_account/analytics.rb

注意が必要なのが、OAuth認証のさいの scope の設定だ。使うAPI によって必要な権限が異なる。GoogleAnalytics でレポートを取得するだけなら、上のサンプルコードのように設定すればいい。

:scope => 'https://www.googleapis.com/auth/analytics.readonly',

ここまでで、Google Analytics からデータの取得ができた。後はRubyコード上で好きに加工してやればいい。

制限

Google Analytics Reporting API には、呼び出し量などに制限がある。制限が気になる場合、適宜、キャッシュしてやればいいだろう。
制限は下記のリファレンスに書いてある。

https://developers.google.com/analytics/devguides/reporting/core/v3/limits-quotas

Google Analytics ならではのデメリットもある