Google AnalyticsのDAUデータをスプレッドシートに自動インポートして、さらにSlackに通知する
はじめに
無料で簡単に使えるWebアクセスツールとしてGoogle Analyticsを利用している人は多いと思います。 Google Analyticsのページを見るだけでも色々なデータを見ることができて楽しいのですが、どうしてもエクセルやスプレッドシートなどの表計算ソフトに移して作業したくなる場面もあります。
そんな時に、わざわざGoogle Analyticsのページに行ってエクスポートしなくても自動でスプレッドシートに読み込む方法を今回はお話しします。 さらに、自動で読み込んだデータの一部をSlackに定期的に通知する方法についてもお話しします。具体的にはDAUの値を毎朝スプレッドシートに読み込んで最新のDAUをSlackに通知する仕組みを紹介します。
Google Analyticsをスプレッドシートに読み込み
スプレッドシートのアドオンを利用します。
Google Analyticsアドオンの取得
- メニューから
アドオン>アドオンを取得
を開く Analytics
で検索する+無料
ボタンを押す- 許可の確認ダイアログが出るので許可する
これでメニューのアドオン
にGoogle Analyticsが追加されます。
レポートの作成
アドオン>Google Analytics>Create new report
を押す- Reportの基本設定(図はDAUの場合)をする(レポート名の記入/Google Analyticsのアカウント指定/Metrics(指標)とDimensions(区切り)の指定)
Create Report
ボタンを押す
すると、Report Configuration
というシートが作成されます。ソートや期間指定などの細かい設定はここでできます。
Run reports
アドオン>Google Analytics>Run reports
を押す- Report Statusのダイアログが表示されるので成功していることを確認する
これでDAUというシートが作成されて7日分(Report Configurationの設定値)のDAUデータがimportされます。
ソートする
デフォルトのままだと日付が昇順(古い順)になるので日付の降順(新しい順)にしたいです。
adonのドキュメントを読むと -
をつけると降順になるようです。
なので、Report Configuration
シートのSort
行に-ga:date
と記入してください。
これでRun reports
を再度走らせると結果が降順になります。
最新のDAUをSlackに通知する
ここではGoogle Apps Script (GAS)からSlackに通知を飛ばしますが、その方法に関しては
昨日の投稿(GASからIncoming Webhooksでslackに通知を投げる)を参照してください。
以降は上記リンクを見たものとして進めます。
なおGASのスクリプトはスプレッドシートに紐付いているものとします。
コード
function dauReport() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var row = 16; var column = 2; var dau = ss.getSheetByName("DAU").getRange(row, column).getValue(); var message = "昨日のDAUは・・・" + dau + "だよ!!!\n"; // このメソッドは下記を参照 // http://toosaa.hatenablog.com/entry/2016/10/05/0800000 sendHttpPost(message, username); }
コード解説
Spreadsheetオブジェクトの取得
該当コード
var ss = SpreadsheetApp.getActiveSpreadsheet();
SpreadsheetAppのgetActiveSpreadsheet()
メソッドを使うことでSpreadsheetオブジェクトを取得して変数ssに代入している。
このため、下記の条件を満たす必要があります。
なおGASのスクリプトはスプレッドシートに紐付いているものとします。
なお、スプレッドシートに紐付いていないGASスクリプトからSpreadsheetオブジェクトを取得するなら
var ss = SpreadsheetApp.openById(id);
や
var ss = SpreadsheetApp.openByUrl(url);
があります。
DAUの値取得
該当コード
var row = 16; var column = 2; var dau = ss.getSheetByName("DAU").getRange(row, column).getValue();
新しい順にソートしているため、最新の日付は16行目となります。(本当は取得したい日付から行をとるとかやった方がいいのかもしれないです)また、DAUの数値は2列目です。よって、上記のコードはDAU
シートの最新の日付DAU値を取得するコードとなります。
下記に利用されているクラスとメソッドについて簡単にまとめます。
- SpreadsheetオブジェクトのgetSheetByName(String) メソッドは、名前の通りSheet名からSheetオブジェクトを返すメソッドである。
- SheetオブジェクトのgetRange(row, column)メソッドは指定した行列のRangeオブジェクトを返すメソッドである。
- RangeオブジェクトのgetValue()メソッドはそのcellの値を返すメソッドである。
通知テスト
関数を選択からdauReport
を選択して三角アイコンの実行ボタンを押すとSlackにDAUの値が飛びます。
スケジューリング
今までの作業でスプレッドシートにGoogle Analyticsのデータをインポートして、その結果の値をSlackに通知する仕組みはできました。しかしながら、このままだと自分で実行ボタンをインポートと通知の2回押さないといけません。なので、毎朝定期実行するスケジュールを立てましょう。
Google Analyticsからの自動インポート
アドオン>Google Analytics>Schedule reports
を押すEnable reports to run automatically.
にチェックを入れる- Schedule reports to run
every day
between7 a.m. - 8 a.m.
とする - Save
GASからSlackへ定期通知
時計見たいなアイコン
を押すトリガーが設定されていません。今すぐ追加するにはここをクリックしてください。
を押す- 実行のところを
dauReport
にする - 時間主導型にする
- 日タイマーにする
- 午前8時 ~ 9時にする(Google Analyticsからの自動インポートより後にする)
- 保存
これだけです。注意点としては定期実行が1時間単位での指定なのでGoogle Analyticsからの自動インポート
とGASからSlackへ定期通知
の時間をずらす必要があります。