エンジニアがGoogle Analytics,Google DataPortalに30minで入門

# はじめに
(この会社からは)はじめまして！
株式会社マクアケにて、SESでサーバサイドエンジニアをやっているasazumaと申します。

Google Analyticsだけだと分かりづらい部分も、Google DataPortalを使うとGoogleのマーケティングツール全般がエンジニア脳で理解出来る様になるよ！という内容になります。

Web系のサーバサイドエンジニアをやっていると、サーバサイドアプリケーションの設計/コーディングの他にも、時にフロントエンド、時にインフラ、時にマーケティングといった感じで、結構マルチな世界に足を踏み入れる事になる方が多いのでは無いでしょうか？
その時、「非エンジニア向け」「非プログラマ向け」と言われると、なにか門前払いを食らった様な悲しい気持ちになりますよね(笑)

そんな訳で、今回は特に「非エンジニア向け」の多い分野であるマーケティングの、特にGoogle系のツールに関して、「エンジニアなんだけど、マーケティングは素人だよ！」という方に向けて記事を書いていきたいと思います！

# Google Analyticsの魅力をおさらい
Googleのマーケティングツールの中心に位置するのは、やはりGoogle Analytics(以下、GA)では無いでしょうか。

グラフィカルなダッシュボードに目が行きがちだと思いますが、このサービスの本来の魅力は、

1. ユーザ属性情報(年齢層、性別)など、Google側で保持しているデータを提供してくれること。
2. ログの書き込みをリアルタイムに受け付けてくれて、更にそのデータが検索可能な形態で保持されていること。
3. エクスポート、API通信、その他の方法で他システムと容易に連携可能であること。
4. 高度な集計方法等も色々と組み込まれており、手軽に使う事が出来る。
5. ログの量が膨大になっても、各種機能、性能が維持されること。

という部分にあるかと思います。

# GAを使わなかったら？
例えば、似たようなものをElasticsearchなどで構築しようと思ったら、

1. ユーザ属性情報(年齢層、性別)など、Google側で保持しているデータを提供してくれること。
  -> 基本的には自分達で取得した情報しか利用出来ない。
2. ログの書き込みをリアルタイムに受け付けてくれて、更にそのデータが検索可能な形態で保持されていること。
  -> 書き込みに関しては、fluentdやlogstashで別途解決しなければならない。
3. エクスポート、API通信、その他の方法で他システムと容易に連携可能であること。
  -> ある程度可能だと思う。
4. 高度な集計方法等も色々と組み込まれており、手軽に使う事が出来る。
  -> データをどの様に活用するのかは、自分で(統計用の複雑な)アルゴリズムを書くor導入しなければならない。
5. ログの量が膨大になっても、各種機能、性能が維持されること。
  -> ログの量が増えると、インフラ増強など自分で対応しなければならない。

という事になり、結構面倒な上に、全く同じ機能を得る事は不可能に近い事が理解出来ます。

という訳で、「ログサーバ立てて、調査クエリ叩くなんていつもの運用だし、マーケも同じ様に出来る気がするけど。」というエンジニアでも使う価値があるサービスである事が解りました。

# GAのタグ埋め込み
エンジニア向けの内容となりますので、「トラッキングコードをどうやって埋め込めば良いか」みたいな部分の詳細は敢えて省きます。
そこら辺の記事は沢山ありますし、エンジニアであれば苦労は多くないと思います。

要点だけ説明しますと、GAで指示されるJSを直接埋め込む方法と、Google Tag Manager(以下、GTM)というタグ管理ツールを利用する方法があります。
GTMの言うところのタグとは、「HTML上のスクリプトタグ」の事です。
GTMを使えば、ソースコードの方はクリーンに保ったまま、設定した配信条件(<=例えば、「/users/配下のURL」など)で設定した内容のJSを埋め込む事が可能になりますのでオススメです。

# あれ？何か使いづらい
先ほど、「グラフィカルなダッシュボードに目が行きがち」と言いましたが、逆にエンジニアだからこそ、GAの管理画面に拒絶反応を感じる人も多いのでは無いでしょうか？

その原因を私なりに分析すると、
- 「ユーザ」「集客」「行動」「コンバーション」が同一階層に並んでいるなど、粒度がハッキリしないサイドメニュー。
- 具体的な数字が頭に入ってくる気のしないざっくりしたデザインの折れ線グラフの多用。
- 「ユーザ」「集客」「行動」「コンバーション」って、そもそもどういうオブジェクトなのか把握出来る画面はどこにあるんだろう？
- 敢えてエンジニア用語を避けて通るかの様に(でも一般の方にも解りづらいカタカナ語で)独自に名付けられた謎の単語たち。

というところにあるかと思いました。

# どうすれば解り易くなるか
エンジニアとしては、Excelの様なレコードが縦に並んだビューに出来ると謎の折れ線グラフよりも解り易いのでは無いでしょうか。

そこで、今回は「Googleデータポータル」を使いたいと思います。(Google Analyticsの「カスタムレポート」でも、似たような事が可能かも知れません)
Googleデータポータルを使えば、Google Analyticsのデータを(ある程度)自由な形で閲覧する事が出来ます。

Googleデータポータルは、以前「Googleデータスタジオ」と呼ばれていたSaaSになります。
Googleデータポータルは、Googleが無償で提供するBI（ビジネス・インテリジェンス）ツールです。
BIと聞くと何だかワクワクしてきますよね！如何にもたんきｎ・・、もといビジネス貢献能力が向上しそうなワードです！

# Google DataPortalを使っていく

先ず、上に幾つか表を示すアイコンがあるので、これをクリックして、下のワークスペースをクリックする事で好きなグラフを作る事が出来ます。
折角なので、Excelの様なテーブル形式のものから使うのが判り易いのでは無いでしょうか。

<img width="1120" alt="スクリーンショット 2018-12-14 17.54.00.png (383.1 kB)" src="https://img.esa.io/uploads/production/attachments/7424/2018/12/14/40649/7af48bf1-081b-424a-8038-860a244cee63.png">

そうすると、右側にそのグラフのプロパティ一覧の様なものが出てきます。
<img width="159" alt="スクリーンショット 2018-12-14 17.54.40.png (64.9 kB)" src="https://img.esa.io/uploads/production/attachments/7424/2018/12/14/40649/7fdfb898-a1cc-4e66-8bc3-98149ac4bd15.png">

この部分は、スマホアプリやゲームエンジンのIDEや、Adobeの各種デザインツールや、クリスタルレポート等、汎ゆるRADツールで共通なUIなので判り易いですね！
先ずは、「ディメンション」から設定しましょう。

GAの説明を拝借すると、
> アナリティクスのレポートは、すべてディメンションと指標の組み合わせに基づいて構成されます。
> ディメンションはデータの属性です。たとえば、ディメンション「市区町村」はセッションの性質を表し、「横浜」、「川崎」などセッションが発生した市区町村を指定します。ディメンション「ページ」は、閲覧されたページの URL を表します。
> 
との事ですが、解るような解らないような感じですので、私の言葉で再定義します。
```
ディメンションとは、
「レコードの単位(=論理プライマリキー)」
「一般的なデータのテーブルビュー形式での縦軸」です。
```
非正規な状態でフワフワ漂っているセッションデータを、ディメンションの単位で集計し、区切り、表示する事で、テーブルの様に扱う事が出来るようになります。

次に、指標を設定してみましょう。GAの説明を拝借すると、

> 指標はデータを定量化したものです。指標「セッション」はセッションの合計数です。
> 指標「ページ/セッション」は、セッションあたりの平均閲覧ページ数です。

との事ですが、これもよく解らないので私の言葉で再定義します。
```
指標とは、
「レコードのカラム」
「一般的なデータのテーブルビュー形式での横軸」です。
```

この時、もの凄く注意すべき事があって、Google Analyticsの説明を拝借すると、

> ディメンションと指標の有効な組み合わせ
> すべての指標がすべてのディメンションと組み合わせることができるわけではありません。(後略)
という部分です。

これはつまり、
```
特定の項目は、
実際にはユーザーオブジェクトに紐づくプロパティだったり、
セッションオブジェクトに紐づくプロパティだったりに近い形で持っているデータを、
なんか色んな事が自由に出来る風に見せる為に、
オブジェクトの垣根を取っ払って一つの巨大なテーブルに沢山のプロパティがある様な見せ方をしているから、
特定のプロパティを組み合わせて一つのビューテーブルにしようとすると、
意図しないリレーションになって、意味不明な数字が出たり、そもそも集計出来なかったりするからね！
```
という事です。

さて、恐ろしい事を言い出しましたが、正しいデータを取れるようにするには、どういう風に設定すればいいのでしょうか。
実は、Google DataPortalのディメンションや指標のセレクトボックスには見出しがついてグルーピングされています。「ユーザー」とか、「セッション」とかがそうです。

「全てのディメンションと全ての指標を同じグループから選択すればセーフティ」です。
しかし、それだと実用性のある表を作るのは難しいです。

実は、一部の指標はオブジェクトの垣根を超えてリレーションしているというか、上手く組み合わせて使う事が出来ます。
特に汎用性が高いのが「時間」のところにあるものをディメンションにする場合です。

必ずしも時間との組み合わせであれば上手く動くというものでも無さそうですが、時間をディメンションにし、「イベントトラッキング」グループから指標を設定したり、「ページトラッキング」グループから指標を設定することは有効である事を確認しました。

では、更にここに「フィルタ」も加えてみる事で、独自のファネルを作成してみましょう。
<img width="159" alt="スクリーンショット 2018-12-14 17.54.40.png (64.9 kB)" src="https://img.esa.io/uploads/production/attachments/7424/2018/12/14/40649/f6379b7d-f292-4092-a33d-ecbd74c2819d.png">

また、フィルタを挿入(グラフやテーブルを挿入するのと同じところから)することで、そのページ全体にフィルタをかけることが出来ます。
<img width="1349" alt="スクリーンショット 2018-12-14 17.59.46.png (28.8 kB)" src="https://img.esa.io/uploads/production/attachments/7424/2018/12/14/40649/d09fc583-0f20-40f0-82b9-90ef976178e9.png">

P. S. 
コンフィデンシャルな内容(テーブルだからモザイクかけたら何がなんだか解らない。)なので完成品をお見せ出来ないのが残念ですが、非常に簡単に作る事が出来ました！

# Google DataPortalについての考察
Google DataPortalは、
- MySQL等のRDBとデータ結合出来る。
- テーブル、グラフ、絞り込み検索などのUIを超簡単に作れる。
といった魅力がありますが、演算や出力の機能が弱い(出来ない訳ではない)のが使い辛いところです。

本来、BIでは、
データ取得 => データ結合 => データ演算(集計等) => データ表示 => データ出力
というフローを実現する必要があるかと思いますが、ど真ん中の演算機能が貧弱なことで、折角のデータ結合機能とデータ表示機能が、分断されてしまっているのが悲しいところです。

# まとめ
如何でしたでしょうか。
では、上記の内容をまとめてみたいと思います。
1. GAはオブジェクト構造が全然見えない部分が、GA初心者のエンジニアには使いづらい。
2. Google DataPortalを使えば、テーブルっぽく扱える。
3. 一度GA内部のデータ構造が解ってしまえば、GAの管理画面でも、APIでも同じ考え方で通用するので必要に応じて好きな方法でデータを取得出来る。

以上、有難うございました！