Google Analytics Advent Calendar 2015の説明文に
Google社のWebトラッキングツール、Google Analyticsのことについて。
とありますが、Googleアナリティクスは、ユニバーサル・アナリティクスになって、Webだけに適用範囲を止めないマーケティング・ツールとなっています。
実際に、Webトラッキング用のライブラリ以外に、Google社はAndroid/iOSやUnityといったプラットフォーム向けのライブラリを提供しています。さらに、どんなプラットフォームであっても、HTTPリクエストさえ実行できれば利用可能なMeasurement Protocolというデータ送信方法も準備されています。
今回は、Measurement Protocolを使って、Web以外の世界の計測にもGoogleアナリティクスを導入してみましょう、というお話です。
Measurement Protocolとは何か
Googleアナリティクスにデータを送信するための方法の1つで、詳細はGoogle公式の開発者向けヘルプ - アナリティクス Measurement Protocolに記載されています。
Measurement Protocolでは、
POST /collect HTTP/1.1
Host: www.google-analytics.com
v=1 // Version.
&tid=UA-XXXXX-Y // Tracking ID / Property ID.
&cid=555 // Anonymous Client ID.
&t=pageview // Pageview hit type.
&dh=mydemo.com // Document hostname.
&dp=/home // Page.
&dt=homepage // Title.
のようなHTTPリクエストを送信することで、Web以外のプラットフォームからでも、Googleアナリティクスにページビューデータを送信することができます。
送信することができる値の種類は、上記のパラメーターだけでなく、Measurement Protocol のパラメータ リファレンスに掲載されているパラメーターを利用することができます。
さらに、ユニバーサル・アナリティクスでは「カスタムディメンション」「カスタムメトリクス」という項目を使って、任意のパラメーターを作成することができるようになっています。計測したい対象に合わせて、任意のパラメーターを作成してデータを送信すると、後からGoogleアナリティクスのレポートを見た時に少し分かりやすくなります。
指定されたフォルダ以下の各ファイルのサイズ情報を送信する例
今回は、Rubyスクリプトを用いて、特定フォルダ以下の全ファイルのファイルサイズをGoogleアナリティクスに送信してみます。
require 'staccato'
require 'date'
module MeasurementProtocolSample
class FileSizeTracker
def initialize(hostname, path)
@hostname = hostname
@path = Pathname.new(path)
@datetime = DateTime.now
end
def files
Dir.glob("#{@path}/**/*").collect do |file|
stat = File.new(file).stat
filepath = file
filepath = file + '/' if stat.ftype == 'directory'
{
:path => filepath,
:size => stat.size,
:type => stat.ftype,
}
end
end
def send_to(tracking_id)
tracker = Staccato.tracker(tracking_id)
self.files.each do |file|
pageview = Staccato::Pageview.new(tracker, {
path: file[:path].gsub(@path.to_s, ''),
hostname: "#{@hostname}:#{@path}",
campaign_source: 'Measurement Protocol',
campaign_medium: '(none)',
campaign_name: @datetime,
})
pageview.add_custom_metric(1, file[:size])
pageview.add_custom_dimension(1, file[:type])
pageview.track!
end
end
end
end
tracker = MeasurementProtocolSample::FileSizeTracker.new('MyServer3', '/var/www/analytics')
tracker.send_to('トラッキングID')
簡単に解説します。
まず、Measurement Protocolの送信には、Rubyの便利なライブラリ「Staccato」を利用しています。
また、送信するデータは、ホスト名として、該当のサーバー名+計測対象のルートディレクトリまでのパスを設定しています。そして、計測URLとして各ファイルのパスを設定してみました。
そして、ファイルサイズをカスタムメトリクスとして登録して、送信しています。その他ディレクトリか否かをカスタムディメンションに設定して送信してみました。
こういった、どの項目をどのようなデータとしてGoogleアナリティクスに送信するべきか?は、Googleアナリティクスに詳しくないと難しい問題ですが、仕様さえ把握してしまえば簡単です。
他にどんな活用方法がある?
上記のように、Webとは全く異なるプラットフォームからGoogleアナリティクスにデータを送信することができます。このMeasurement Protocolを用いれば、リアルデバイスのセンサーで取得したデータをGoogleアナリティクスに送信することも可能です。
POSレジと連動させたり、ビーコンを使って人の往来をトラッキングすることができるようになります。自分は、体重計が記録したデータを、Measurement Protocolを使って、Googleアナリティクスにデータ送信しています。当然、体重や体脂肪率といったデータをカスタムメトリクスとして作成し、送信しているので、いつでも過去の自分の体重などのデータをGoogleアナリティクスを通して見ることができます。