Google Analyticsの情報をSlackに連携する!

こんにちは。株式会社VALGOエンジニアのヌマです。
リモートワークがメインなので2022年頃に東京から地元の秋田に戻り業務を行っています。

背景


大企業、中小企業どの規模の会社でも自社のホームページへのアクセス情報は取得していると思います。
このアクセス情報をそのままにしてしまっていないでしょうか?
弊社もうまく活用できていなかったので、まずデータ活用に一歩踏み出せるように、閲覧数やセッション数などの数値をSlackに通知する仕組みを作成しました。

前提条件


  • Google Analyticsの設定は済んでいること
  • Slack APIを利用できるようになっていること

使用したもの


  • Google Analytics
  • Slack
  • Google スプレッドシート
  • Google Apps Script

実装


Google AnalyticsからGoogle スプレッドシートを経由してSlackに連携
実装イメージ

Google スプレッドシートにGoogle Analyticsの情報を連携する

Google スプレッドシートのアドオンを利用してGoogle Analyticsの情報を連携します。
アドオンは「GA4 Reports Builder」と検索し、Googleが提供しているアドオンをインストールします。

GA4 Reports Builderの画像
Google Analyticsの情報を連携するアドオン

拡張機能にアドオンが追加されたら「Create new report」をクリックし、作成するレポートをどのようにするかを指定します。

設定画面
レポート作成画面

MetricsとDimensionsの設定値は以下にしています。

項目名設定値
MetricsscreenPageViews,sessions
DimensionspageLocation,pagePath,pageTitle

レポート作成後、「Run reports」でGoogle AnalyticsからGoogle スプレッドシートに連携できます。

データ連携を行う画面
Run reportsでデータ連携を行う

Google スプレッドシートの内容をSlackに連携する

Google スプレッドシートにGoogle Analyticsの情報を出力することができたらこの情報をSlackに連携します。

SlackのAPIを利用するためにGoogle Apps Script(GAS)を利用します。

Slackへ連携する文章をGoogle Apps Scriptの方でも作成できますが、誰でも対応できるように”サマリ”シートの”A1″セルに入力されるようにして連携を行いました。

具体的には以下のコードを作成しました。

function analyticsNotice() {
  var activeSpreadsheet = SpreadsheetApp.getActiveSpreadsheet(); 
  var activeSheet = activeSpreadsheet.getSheetByName('サマリ'); 
  //Slackに連携する文章はすべて"サマリ"シートの"A1"に格納しています。
  var slackText = activeSheet.getRange('A1').getValues();
  sendSlack(slackText[0]);
}

function sendSlack (slackText){
  var webHookUrl = "https://slack.com/api/chat.postMessage";
  //アクセストークンやチャンネルIDはセキュアに対応しています
  const accessToken = PropertiesService.getScriptProperties().getProperty("slack_token");
  const channelId = PropertiesService.getScriptProperties().getProperty("channel_id");
  
  const headers = {
    Authorization: "Bearer " + accessToken,
    "Content-type": "application/json"
  };
  var jsonData =
    {
      //好きな絵文字をアイコンにできます。
      'icon_emoji' : ':good:',
      //メッセージを入力しています。
      "blocks":[
        {
          "type" : "section",
          "text":{
            "type" : "mrkdwn",
            "text" : slackText[0]
            }
          }
      ],
      //好きなユーザー名に変更できます。
      "username" : "Analytics通知",
      "channel": channelId
    };
  var payload = JSON.stringify(jsonData);
  var options =
    {
      "method" : "post",
      "headers": headers,
      "contentType" : "application/json",
      "payload" : payload,
    };
  UrlFetchApp.fetch(webHookUrl, options);
}

GA4 Reports BuilderのアドオンとGoogle Apps Scriptも定期実行させることで月一度のPage Viewの結果をランキング形式で出力することも可能です。

無事にSlackに連携されました

つまずき


日本語が文字化けする

日本語が文字化けしてSlackで表示されている
テスト時のslack画面

セルに格納されているテキストが配列内にあるのが原因でした。
出力するテキストは配列の一つ目に入るのでslackText[0]と指定しました。

改行ができない問題

テキストが改行されずに表示されている
テスト時のslack画面

\nでは改行されませんでした。
代わりにセル内で改行できるchar(10)を利用してセルで改行したテキストをSlack APIに渡すことで解決しました。

アドオンがスケジュール設定した時間に実行されない

データ連携を行う画面
Schedule reportsでスケジュール実行する

スケジュール実行の設定を毎月1日の12時から13時に設定していましたが、
実際には翌日2日の4:52に実行されました。

通知を出したい時間から逆算して設定してあげる必要があります。

まとめ(感想)


今回はGoogle Analyticsの情報を気軽に扱えるようにGoogle スプレッドシートを利用した方法を紹介いたしました。

もっと活用するには、Google Cloud Platform(GCP)を利用することで、大規模言語モデル(Large Language Model)としてGeminiを利用するような方法もあるかと思いますが、まずはスモールスタートでもよいので始めることが重要になってきます。

ぜひこの記事を参考に情報の利活用の第一歩を踏み出しましょう。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です