会社の業務では、サーバ側プログラムを触る人が Google Analytics を操作することがなかったり、Google Analytics で施策を検討する人が サーバ側プログラムを閲覧することがなかったりは当たり前に発生します。

個人的には Blog 運用を通して取得できる Google Analytics に記録されるデータに興味を持ってデータを見たり、解析したり、設定を変えてみたりしているので、サーバ側プログラムを作り、SQL でデータを抽出したりする人向けに、どのあたりに面白さを感じるのか伝えてみたいと思います。


対象読者

以下を対象読者としてまとめています。

  • サーバ側プログラムを書き、RDB に SQL を投げる Web エンジニア

短く Google Analytics についてまとめる

一般的な視点と、プログラマ視点で見た Google Analytics の違いをまとめます。

  • 一般的な視点
    Google が提供するアクセス解析ツールです。
    無料枠でできることが多く、小規模、中規模サイトであれば、無料枠で問題なく使えます。
    これがユーザー数にも繋がっていて、Web 上の情報が多く、書籍も多数出版されています。

  • プログラマ視点
    Measurement Protocol をベースとしたログ収集ツール、ログ Viewer です。
    Measurement Protocol とは、HTTP/HTTPSで Google Anallytics サーバーに POST、GET リクエストするための API です。
    サイト上に埋め込む Google Analytics タグ も内部では Measurement Protocol API を実行していて、
    PageView の計測の場合は、hit typePageView 設定して Measurement Protocol で Google Analytics サーバーにリクエストを送信しています。
    以下、Measurement Protocol の公式ドキュメントに概要が記載されています。
    Measurement Protocol の概要  |  アナリティクス Measurement Protocol  |  Google Developers


Google Analytics の基本機能の説明

Web エンジニア向けの機能の説明になります。
包括的ではないかと思いますが、気になりそうな部分を列挙していきます。

データ構造について

個人的な見解ですが、Google Analytics は基本的に以下のデータ構造となります。
"データ構造"

  • Google Analytics ログデータ
    Measurement Protocol の送信により、記録されたデータです。
    ヒット と呼ばれる単位で記録され、Google Analytics 上で集計、表示されるデータになります。

  • アフィニティカテゴリ
    プロパティの設定で広告向け機能をオン にすることで取得できる情報です。
    この情報は Google Analytics のヒット データと N 対 N 紐付きますが、個人の趣味趣向を特定できるデータとなるため、個人情報を特定する形でのデータの紐づけはできないデータになります。1

  • Google Search Console etc
    広告向け機能以外にも、Google のサービスとの情報を連携する機能があります。
    これらの情報は Google Analytics のヒット データと N 対 N 紐付き、個人情報に抵触しない限りは、制限はあるものの画面で閲覧することができます。
    Google Analytics の API での取得はできません。


ヒットについて

Google Analytics の記録単位である ヒットの種類について記載します。

  • ヒットの種類
    ヒットの種類について記載します。ヒットの種類が異なると Google Analytics 上で閲覧できるカテゴリが変わり、集計の方法が若干変わります。Qiita に参考になる記事がありましたので、リンクを記載しておきます。
    GoogleAnalyticsのga(‘send’,〜)でいろんなデータを送ってみよう

    • pageview
      ページビューを記録するために使用します。

    • screenview
      モバイル向けのスクリーンビューを記録するために使用します。
      ビューについて - アナリティクス ヘルプ の説明がわかりやすいかと思います。

    • event
      イベントを記録するために使用します。

    • transaction
      ネットショップなど決済回数を記録する目的で使用します。

    • item
      teratail の質問を読む限り、使えないのかもしれません。
      個人的に試したことがないので、謎のままです。
      Google Analytics - 拡張eコマースの、各種関数の使い方について|teratail

    • social
      SNS の共有ボタンでの共有を記録する目的で使用します。

    • exception
      例外を記録する目的で使用します。
      JavaScript の例外だけでなく Measurement Protocol でサーバ側からの記録できるのでどこでエラーになったか記録できるのかと思いますが、さすがにサーバ側から記録している人はあまりいないのかもしれません。

    • timing
      サイトの速度に関する指標を記録するために使用します。


ヒット以外の記録データ

ヒットの付帯情報として、以下の情報が付与できます。付与した情報は、APIで指定して取得することができます。


項目の追加

Google Analytics はデフォルトで記録可能な項目以外にユーザが任意で記録する項目を追加できます。
項目はカスタムディメンション、カスタム指標の設定が可能です。

  • カスタムディメンション
    区分値や、集計対象としない項目を設定するために使用します。無料版では20項目まで設定が可能です。
    SQL に置き換えると、GROUP BYWHERE に指定する数値以外の項目かと思います。
    個人を特定できる情報は設定はできないので、統計情報として収集して Google Analytics 上で分析に使用したい情報が設定の対象になります。
    会員サイトでの例を挙げるとすると以下のようなものが対象になるかと思います。

    • 趣味
    • メルマガのカテゴリ
    • 有料会員か、無料会員か
  • カスタム指標
    集計対象とする数値項目を設定するために使用します。 無料版では 20 項目まで設定が可能です。
    個人的にはあまり使用していないですが、以下のような用途で使用できるかと思います。

    • 見込みスコア
    • システム使用料の計算
  • オススメの設定
    Google Analytics のデフォルト設定だと、ヒット単位でのデータは集計されてしまい、取得できません。
    カスタムディメンションに、Client ID と、TimeStamp を設定するとヒット単位で取得できるようになるのでこの2項目を設定したほうがよいかと思います。
    以下の記事から上記2項目の設定方法がたどれます。
    GTMでGoogleアナリティクスのClient IDを取得する一番確実で楽な方法(2018年版) - 清水誠メモ

  • データインポート機能
    Google Analytics には拡張データをCSVインポートする機能があります。
    この機能で、カスタムディメンション項目を取り込むことができます。
    データ インポートについて - アナリティクス ヘルプ

データ可視化について

データ可視化方法 には以下があります。

  • Google Analytics 上で閲覧する。
    デフォルトの指標、ディメンションを用いた可視化は Google Analytics が View を提供しています。
    デフォルトのView 以外でデータを閲覧したい場合は、カスタムレポートを使うことで対応できます。
    ただ、指標、ディメンションは意識する必要があり、指標となる項目をディメンションとして設定する間違いをおかすと Google Analytics 上ではうまく扱えないデータになります。

  • Gooogle Analytics AddOn を使って、データを取得し Google スプレッドシート 、Google Data Portal で可視化する。
    [Google Analytics - Google スプレッドシート アドオン] (https://chrome.google.com/webstore/detail/google-analytics/fefimfimnhjjkomigakinmjileehfopp?hl=ja) を使うと スプレッドシート 上にデータを取り出すことができます。一度外部に取り出してしまえば、指標、デイメンションの制約はなくなるので、自由にデータを可視化できます。
    ただ、データ取得件数に上限があり、上限を超えるデータ取得をする場合は Google Apps Script と組み合わせて使うなど工夫が必要になります。

  • Google Data Portal を使う
    Google Data Portal には Google Analytics の コネクターがあり直接データを取り出して可視化できます。
    指標、ディメンションの制約は変わりませんが、別のデータソースを1つのダッシュボードに描画できるため、別のデータソースと組み合わせでデータを閲覧したい場合は便利かもしれません。

  • Big Query を使う
    有料版の機能になりますが、Google Analytics のデータを Big Query にエクスポートできます。
    課金を意識する必要がありますが、Big Query 上で データを加工、集計したり、Google Data Portal で可視化ができるようになります。

  • API でデータを取得
    Google Analytics には API があるので、API 経由でデータを取得することができます。
    取得したデータは加工して、RDB に保存できるので、プログラムの作成工数はかかりますが、柔軟に可視化に対応ができます。


Google Analytics Extention

Google Analytics の拡張機能について説明します。

タスク

Google Analytics の send コマンドには、Task と呼ばれる 拡張ポイントが準備されています。
この拡張ポイントに JavaScript の処理を実装することで、ついでに何かする、処理自体を書き換えることができます。
タスク  |  ウェブ向けアナリティクス(analytics.js)  |  Google Developers
タスクは、gtag.js では使用できないようなのでタスクを使いたい場合は、現状は analytics.js を使用する必要があります。


プラグイン

Google Analytics には、プラグインと呼ばれる機能があり、プラグインを実装して機能を追加することができます。
プラグインを作成する  |  ウェブ向けアナリティクス(analytics.js)  |  Google Developers
タスクは基本動作を拡張するイメージに対して、プラグインは、独立した機能の追加です。
プラグインも、gtag.js では使用できないようなのでタスクを使いたい場合は、現状は analytics.js を使用する必要があります。


過去にまとめた記事

GAIQ を取得した際に、似たような記事を書きました。
コンテキストは少し違いますが、以下もよろしければご確認ください。


HTTP サーバのアクセスログと何が違うのか?

HTTP サーバのアクセスログと取得可能な情報の差異について記載します。
以下の点が異なります。

  • Bot のアクセスが除外されている
    Bot、 クローラのアクセスを除外する チェックを ON にしていればですが、アクセスログ上記録される Bot、クローラのアクセスは Google Analytics 上では除外されます。これは人間のアクセスに限定してアクセスを見たい場合に便利です。

  • Client 側の情報も記録されている
    ページ滞在時間、直帰率 等、Client 側の情報もないと取得が難しい情報も記録されています。

  • 無料版だとサンプリングが行われる
    これはデメリットですが、Google Analytics の無料版の場合、ある程度アクセス数が多くなると、情報がサンプリングされてしまい正確な情報が取得できなくなります。このような場合は生ログを確認したほうがいいかと思います。

  • 取得回数に制約がある
    アクセスログだと、取得するのに制約はないですが、無料版の Google Analytics の場合、API を使用して取得しようとすると 1日 5万回の制約があります。
    API の実行の仕方によっては、達しそうな回数ですので、機能を実装する際は意識しておいたほうがよさそうです。

  • 記録データを Google 広告との連携に使える
    記録したデータを元にユーザーりすとを作ると、そのリストを Google 広告のリマーケティングリスト として使用できます。


個人的に面白いと感じるポイント

  • Measurement Protocol でサーバ側や、Web サイトの外での取得データを Google Analytics に送付できること
    Measurement Protocol で、サーバ側のプログラムからイベントを記録したり、Web サイト外で起きたイベントも記録ができます。
    HTTP 通信ができれば、どこからでも記録ができるので、単なるロガーとして様々なデータの記録ができるかと思います。

  • サイトの速度を記録しておく
    Speed Index を カスタムディメンション もしくは、カスタム指標に設定して、直帰率等との相関見れるのはおもしろいかなと思います。


参考

以下、文書作成中に見ていた記事のリンクです。


スライドにした。

この文書を、スライドにして、Speader Deck に UPしました。
よろしければご確認ください。

以上です。


  1. 実際に紐づけができる設定で API の実行、画面操作を行うと、API の場合はエラー、画面操作時は取得データ 0 件 になります。 

コメント

カテゴリー