7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Firebaseイベントを集計した Looker Studioのレポートを 毎日Slackに自動投稿させてみる

Last updated at Posted at 2024-04-01

弊社のアプリにおいて、日毎の新規ユーザー・アクティブユーザー等のレポートをSlackに自動投稿させたいなーと思い、その仕組みをサクッと作ってみました。

大まかな構成

Google Looker Studioでレポート作成

毎朝メールでレポート送信する設定にしておく

GASで該当メールを見つけて添付ファイルを取得し、Slackに投稿

前提

今回の対象アプリでは、FirebaseのAnalyticsを利用してアプリの各種イベントを記録・送信しています。
それを、Firebaseコンソールでの設定でGoogle Analytics(GA4)に連携し、Looker Studio 上でそのデータと連携させることで、SQLなどを書かず、データポータルからイベントを参照・集計してレポートを作成することができます。

Looker Studio上で簡易なレポートを作成

  • メールで送信されるレポートの画像は、データポータルのデザインそのままになります。デフォルトのレポートサイズのままだと、Slack上に表示されるサイズになった際に文字が小さく見づらくなってしまったので、今回は表の文字サイズを大きくして、画像が縮小されても内容が分かる様ようにしました(元のレポートサイズを小さくしておく手もありますが)
  • あまり情報が多くても見づらいので、現状、1レポートは1ページのみ=画像1枚のみ にしています

Looker Studio上のレポートはこんな感じ(数字は隠してます)

レポートメール送信

  • Looker Studio上の 共有>配信のスケジュール で、毎朝8時に自分自身宛にメール送信するように設定

Slackでのメール受信設定

  • Slackに投稿する方法として、Email利用と、SlackのAPIを利用する方法があるようでしたが、APIではToken取得など面倒そうだったので、もう少し簡単に扱えるEmail投稿を利用しています。
  • Slackでは、投稿したい該当チャンネルの設定で、メール投稿を有効にしておきます。するとチャンネル専用の投稿用のメールアドレスが発行されるので、そのメールアドレスにメールを送信すると、送信メールの内容がSlackの該当チャンネルに投稿されます。

GAS(Google Apps Script)でメール送信プログラムを書く

  • Looker Studioから配信されるレポートメールでは、PDFとJPGの両方が含まれているので、直接そのままSlackにメール投稿させず、一度自分のアドレスで受信し、GASでそのメールを検知、画像入りの本文をSlackにメール投稿するようにしています。

以下、GASの内容です。

function main(){
  //メールから画像取得
  attachment = search_from_email_attachments();
  
  //Slackの投稿先のとなるchで発行した投稿用のメールアドレス
  let address = "XXXXXXXXXXXXX@hogehoge.slack.com"; 
  
  // 自分のアドレスからSlack宛に送るメールのタイトル。分かりやすい名前で適当に。
  let mailTitle = "XXXXのユーザー数レポート";
  
  // Slack上で見やすい様に適当にサイズ調整したimgタグ 
  let mailText = "<img src='cid:inlineImg' width=500>";
  //オプションでhtmlファイルとし、srcタグで利用する画像も指定する
  let options = {
   "htmlBody":mailText,
   "inlineImages":
    {
      inlineImg:attachment
    }
  };
  
  //MailAppで宛先、件名、本文、添付ファイルを引数にしてメールを送付
  res = MailApp.sendEmail(address, mailTitle, mailText, options);
  Logger.log(res);
}

function search_from_email_attachments() {
  // Datastudioからスケジュール配信されたメールを取得(条件に一致する最新のメールを一件取得)
  var Threads = GmailApp.search('from:"looker-studio-noreply@google.com" subject:((レポートのタイトル))', 0, 1);
  var messages = Threads[0].getMessages();
  var message = messages[messages.length - 1];

  // メールから画像を取得
  var attachments = message.getAttachments();
  for(attachment of attachments){
    Logger.log(attachment.getName());
    if (attachment.getName().indexOf('.jpg') > 0) {
      return attachment;
    }
  }
}

試しに実行したら、こんな感じでSlackに投稿されました!

これを毎朝9-10時の間に実行されるようGASでトリガー設定したので、自動で毎朝Slackに投稿されています:grinning:

参考

7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?