てくてくテック

気ままに開発のメモを書いていこうと思います。主にSwiftかと。

Google AnalyticsのDAUデータをスプレッドシートに自動インポートして、さらにSlackに通知する

はじめに

無料で簡単に使えるWebアクセスツールとしてGoogle Analyticsを利用している人は多いと思います。 Google Analyticsのページを見るだけでも色々なデータを見ることができて楽しいのですが、どうしてもエクセルやスプレッドシートなどの表計算ソフトに移して作業したくなる場面もあります。

そんな時に、わざわざGoogle Analyticsのページに行ってエクスポートしなくても自動でスプレッドシートに読み込む方法を今回はお話しします。 さらに、自動で読み込んだデータの一部をSlackに定期的に通知する方法についてもお話しします。具体的にはDAUの値を毎朝スプレッドシートに読み込んで最新のDAUをSlackに通知する仕組みを紹介します。

Google Analyticsをスプレッドシートに読み込み

スプレッドシートのアドオンを利用します。

Google Analyticsアドオンの取得

  1. メニューから アドオン>アドオンを取得 を開く f:id:k-s-9190118:20161005085157p:plain
  2. Analyticsで検索する
  3. +無料ボタンを押す
  4. 許可の確認ダイアログが出るので許可する

これでメニューのアドオンにGoogle Analyticsが追加されます。

レポートの作成

  1. アドオン>Google Analytics>Create new reportを押す f:id:k-s-9190118:20161005085713p:plain
  2. Reportの基本設定(図はDAUの場合)をする(レポート名の記入/Google Analyticsのアカウント指定/Metrics(指標)とDimensions(区切り)の指定) f:id:k-s-9190118:20161005085918p:plain
  3. Create Reportボタンを押す

すると、Report Configurationというシートが作成されます。ソートや期間指定などの細かい設定はここでできます。

Run reports

  1. アドオン>Google Analytics>Run reportsを押す
  2. Report Statusのダイアログが表示されるので成功していることを確認する

これでDAUというシートが作成されて7日分(Report Configurationの設定値)のDAUデータがimportされます。

f:id:k-s-9190118:20161005213050p:plain

ソートする

デフォルトのままだと日付が昇順(古い順)になるので日付の降順(新しい順)にしたいです。 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();

SpreadsheetAppgetActiveSpreadsheet()メソッドを使うことで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の値が飛びます。
f:id:k-s-9190118:20161005214730p:plain

スケジューリング

今までの作業でスプレッドシートにGoogle Analyticsのデータをインポートして、その結果の値をSlackに通知する仕組みはできました。しかしながら、このままだと自分で実行ボタンをインポートと通知の2回押さないといけません。なので、毎朝定期実行するスケジュールを立てましょう。

Google Analyticsからの自動インポート

  1. アドオン>Google Analytics>Schedule reportsを押す
  2. Enable reports to run automatically.にチェックを入れる
  3. Schedule reports to run every day between 7 a.m. - 8 a.m.とする
  4. Save

GASからSlackへ定期通知

  1. 時計見たいなアイコンを押す
  2. トリガーが設定されていません。今すぐ追加するにはここをクリックしてください。を押す
  3. 実行のところをdauReportにする
  4. 時間主導型にする
  5. 日タイマーにする
  6. 午前8時 ~ 9時にする(Google Analyticsからの自動インポートより後にする)
  7. 保存

f:id:k-s-9190118:20161005221822p:plain

これだけです。注意点としては定期実行が1時間単位での指定なのでGoogle Analyticsからの自動インポートGASからSlackへ定期通知の時間をずらす必要があります。