Ruby から Google Analytics のデータを取得する

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

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

Google Analytics の全体像 を知る

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

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

  • Collection : データを収集・送信するSDK・API
  • Configuration : アカウントの設定や、ビューの設定など、Webからできること
  • Reporting : データを集計するAPI

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 ならではのデメリットもある

  • データ反映が遅い。Google Analytics はデータが反映されるまでに24時間程かかることもある。
  • UserID の値は取り出せない。Analytics内部でしか利用出来ない。