📈

Google Apps Script(GAS)を使って、Looker Studioで作成したレポートをSlackに定期配信する

2023/12/09に公開

こんにちは。株式会社ZOZO 計測プラットフォーム開発本部 計測アプリ部 iOSブロックの@na9ainです。

Looker Studioは、Google AnalyticsやBigQueryなどと接続して、グラフや表が自動で更新されるレポートを作成できる超便利な無料ツールです。

https://cloud.google.com/looker-studio

しかし、たった1つだけ弱点があります。そう、レポートの配信方法がメールのみなのです。

そこで、本記事では、Google Apps Scriptを使って、Looker Studioで作成したレポートをSlackに定期配信する仕組みを紹介します。

完成イメージ

先に完成イメージを共有します。


ZOZOFITというアプリの日次レポート

こちらの例では、アプリのアクティブユーザー数や問い合わせ数などの重要指標を日毎に可視化したレポートをLooker Studioで作成し、それを毎日12:00にSlackのチャンネルに配信しています。

定期配信する仕組み

全体像

仕組みの全体像はこちらです。

スケジュールの設定


Looker Studio

Looker Studioでは共有 > 配信のスケジュールからメールの宛先・件名・時刻・頻度などを設定することができます。


Google Apps Script

Google Apps Scriptではトリガー > トリガーを追加から実行する関数・時刻・頻度などを設定することができます。

このとき、Looker Studioのメール配信が、Google Apps Scriptのトリガー実行よりも必ず前になるように設定するよう、注意してください。

Google Apps Scriptで実行するスクリプト

Google Apps Scriptで定期実行するスクリプトの例がこちらです。

post_daily_report.gs
/**
 * Gmailから特定の送信者と件名を持つ最新のメールの添付ファイルリストを取得する
 * @return {GoogleAppsScript.Gmail.GmailAttachment[]} 添付ファイルのリスト
 */
function getLatestAttachmentsFromEmail() {
  var searchQuery = 'from:"looker-studio-noreply@google.com" subject:Daily Report';
  var threads = GmailApp.search(searchQuery, 0, 1);
  var messages = threads[0].getMessages();
  var latestMessage = messages[messages.length - 1];

  return latestMessage.getAttachments();
}

/**
 * Slackに添付ファイルをアップロードする
 * @param {GoogleAppsScript.Gmail.GmailAttachment} attachment アップロードするファイル
 * @return {GoogleAppsScript.URL_Fetch.HTTPResponse} Slack APIのレスポンス
 */
function uploadFileToSlack(attachment) {
  var SLACK_TOKEN = 'XXXX-XXXX-XXXX-XXXX'; // Slack Appのトークン
  var SLACK_CHANNEL_ID = 'XXXXXXXX'  // SlackのチャンネルID
  
  // 2日前までのデータを集計してレポートを作成しているため、2日前の日付を取得している
  var twoDaysAgo = new Date();
  twoDaysAgo.setDate(twoDaysAgo.getDate() - 2);
  var formattedDate = Utilities.formatDate(twoDaysAgo, 'Asia/Tokyo', 'yyyy-MM-dd');
  
  var payload = {
    token: SLACK_TOKEN,
    file: attachment,
    file_type: 'jpg',
    channels: SLACK_CHANNEL_ID,
    title: formattedDate, // ファイル名を日付にすることでSlackでファイル検索がしやすくなる
    initial_comment: 'Daily report is updated.'
  };

  var options = {
    'method': 'POST',
    'payload': payload
  };

  var response = UrlFetchApp.fetch('https://slack.com/api/files.upload', options);
  Logger.log(response);
  return response;
}

/**
 * main関数:Looker Studioから配信された最新のメールの添付ファイルリストを取得し、それらをSlackにアップロードする
 */
function main() {
  var attachments = getLatestAttachmentsFromEmail();
  attachments.forEach(function(attachment) {
    if (attachment.getName().indexOf('.jpg') > 0) {
      var response = uploadFileToSlack(attachment);
      Logger.log(response);
    }
  });
}

おわりに

Looker Studioでも、GASと組み合わせることで、有料版のLookerでしかサポートされていないSlackへの配信を実現することができます。

素敵なLooker Studioライフを!

補足

Looker Studioでメール配信する宛先をSlackチャンネルのメールアドレスにすればGoogle Apps Scriptを使わずに済むんじゃないかと思った方がいるかもしれません。

私も、Google Apps Scriptを使う前にこの方法を試してみたのですが、メールがそのまま共有される形になるため下記のような点が気になりました。

  • 余分な情報・空白が多く、見づらい
  • レポートを拡大して詳しく見るためには別ウィンドウを開く必要がある
  • 添付ファイルは削除されるため、ファイル検索ができない

Discussion