Google Analyticsのデータを良い感じに集計して自動でレポートするまで

## はじめに

サービスをリリースすると、`DAU/MAU/CVRといったKPIやユーザーの利用傾向を自動でレポートしたい！` という要求があったり、自分自身でもそうしたいと思うことがよくあると思います。

その場合に一番簡単なのは、とりあえずGoogle Analyticsを仕込んで、GoogleAnalytics内でレポートを作成し、自動でメール配信する方法なのかなと思います。

ただし、Google Analytics内だけで完結させようとすると、細かなデータ集計や他のデータとの結合が難しい/できないという問題や、GoogleAnalyticsの習熟度が原因で、思い通りに集計/可視化できないことがよくありました。

また、`具体的にどのような数値を取得したいか`や`どのように数値を可視化するか`が決まって無かったり、時間が経つと要件が変わってしまって、一度作った仕組みが使えなくなってしまったりすることがよくありました。

なので、今回は自分が調べた中で、出来る限り手軽で、変更に柔軟に対応できそうな仕組みを試してみました。

## 仕組み

### 構成図

![スクリーンショット 2020-09-13 14.42.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/704621/84eaf3ce-f050-a7c4-0634-5c056bda852c.png)

今回実現した構成になります。
① ユーザーメトリクスをGoogleAnalyticsで集計
② Google Analytics単体では難しい集計や分析をスプレッドシート、Google Apps Scriptで行い、レポート用のデータ作成
③ 表やグラフを含むレポートをデータポータルで作成
④ データポータルのレポートをSlackに通知

### 最終的に出来るもの

実データを載せることが難しいので、サンプルデータを使ってレポートを作成しています。
Gmailの添付画像をSlackに通知した方が、明らかに解像度が良いことが確認できると思います。

|Slack通知結果|Slack通知の添付画像の一部|<参考>レポートを直接Slackに送った場合|
|---|---|---|
|<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/704621/dc0329aa-8307-8da1-c962-156f1223c54f.png" width="200">|<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/704621/586f0646-44e0-75d1-4f24-52568e92112c.png" width="200">|<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/704621/07550884-ceee-0598-d310-48391fca1ef6.png" width="200">|


### 上記の構成になった理由
1. Google AnalyticsやDataPortalだけでは、欲しいメトリクスを集計できなかったため、スプレッドシートを利用した
    1. スプレッドシートには、Google Analyticsアドオンがあり、NoCodeでメトリクスの取得が出来る。
    1. 機能を使いこなせれば簡単なのかもしれないですが、結局データポータルの計算フィールドを使用したりと、使いこなせるまで時間がかかりそうだった
    1. スプレッドシート&GoogleAppsScriptだと、JSが使えるので、柔軟に対応できる。ここで頑張れば、ほとんどのことはできそう！
1. Slack通知時に、レポートが綺麗に(高解像度)で見えるように、Gmailを利用した
    1. データポータルのレポートのURLをそのまま貼ると、荒いレポート画像が表示されてしまい、結局リンク先を見に行かないといけない
    1. そもそも公開範囲を絞っていると、Slack上でサムネイルが表示されない
1. 完全無料
    1. 今回使っているサービスは、基本無料なので、費用はかかりません 

## 最低限必要な知識

- Google Analytics
    - ただ使うだけなら、特に困ることはないかもしれませんが、最低限の知識を抑えておきたいなら以下を読んでおくと良いかもしれません。
        - [Google アナリティクス初級者向けコース](https://analytics.google.com/analytics/academy/course/6)
        - [Google アナリティクス上級者向けコース](https://analytics.google.com/analytics/academy/course/7)
    - メトリクス、ディメンションに関する情報は[Dimensions & Metrics Explorer
](https://ga-dev-tools.appspot.com/dimensions-metrics-explorer/)が参考になると思います。
- Google Apps Script
    - スプレッドシートの操作や、Slack通知の自動化をする時に利用しました。とりあえず触ってみれば、使えるようになると思います。

## 手順

以下の手順を参考にすれば、自動レポート通知ができるようになります。

### 手順① GoogleAnalytics導入

- 今回は既に導入済みでしたが、[GoogleAnalytics設定](https://qiita.com/_makun_/items/28cba0409675739e9917)が参考になると思います。

### 手順② データ集計/分析

#### Google Analyticsのデータをスプレッドシートに取り込む、データの取り込みを自動化(定期実行)する

- こちらも参考になる記事があるので、[GoogleAnalytics API Add-onを使って...](https://qiita.com/Yamotty/items/41a513fe9592ee0cd11a)の手順通りに実施すれば、スプレッドシート上に毎日データを取り込むことが可能になります。

#### データ集計/分析が必要な場合

- 今回は、vlookup等のエクセル関数やGoogle Apps Scriptを使って、スプレッドシートのデータを読み書きを行って、グラフ表示しやすいデータに加工しました。
- 久しぶりにvlookup等のエクセル的な関数を使いましたが、うまく使えれば、Google Apps Scriptのコード量が減るので、先ずスプレッドシート内でデータを一次処理して、必要があれば、Google Apps Scriptを使うという組み合わせが楽なのかなーと感じました。

### 手順③ 表、グラフ、レポートの作成

- データソースとして、Google アナリティクス、Googleスプレッドシートを選択すれば、データポータル内で扱えるようになります。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/704621/737d6559-d48e-732d-a243-11db8e7cfdff.png" width="800">

- 追加したデータソースを利用して、レポートを作成できたら、手順④に進みます。

### 手順④ Slackにレポート配信

こちらも参考にした手順がありますので、以下の記事を参考にすることで実現できます。

1. [Slack通知用のトークンの作成](https://qiita.com/ykhirao/items/3b19ee6a1458cfb4ba21)

1. [Google Data StudioのグラフをGASでSlack配信する](https://qiita.com/mida12251141/items/4d0add710de8985ef6b5)

1. Slack通知の定期実行
    1. 作成したGASを定期実行するトリガーを下記のように設定します。
    
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/704621/7b86626c-6104-2d05-243d-4d31e2335468.png" width="300">


#### 補足

- 上にも書いたように、[データポータルからSlackに直接通知する方法](https://www.ray-analytics.com/entry/2018/12/10/190000)だと、通知される画像が荒くなってしまうので、今回はGmailを経由させることにしました。

## 終わりに

- 冒頭の背景/制約 を前提として、自分が調べた範囲で一番楽で汎用性が高そうな構成で、サービスのKPIの自動レポート配信の仕組みを実現してみました。ただ、もう少し調べるともっと良い方法もありそうな気がするので、良いアイディアや参考文献があれば教えていただければと思います。
- データポータルのデータソースとして、Google Analyticsやスプレッドシート以外にも、様々なデータソースが選択できます。例えば、AWS/GCPの有名サービスとは簡単に連携できそうなので、必要になったら試してみたいと思います。※無料じゃなくなるけど。
- 本来実現したいことは、サービスをより良くすることなので、メトリクスの集計、通知は短時間で終わらせたいですね。。


## 参考

- [GoogleAnalytics API Add-onを使って...](https://qiita.com/Yamotty/items/41a513fe9592ee0cd11a)
- [Slack通知用のトークンの作成](https://qiita.com/ykhirao/items/3b19ee6a1458cfb4ba21)
- [Google Data StudioのグラフをGASでSlack配信する](https://qiita.com/mida12251141/items/4d0add710de8985ef6b5)
- [データポータルからSlackに直接通知する方法](https://www.ray-analytics.com/entry/2018/12/10/190000)