GASで手軽にKPI通知Botを作る

Yagi氏:よろしくお願いします。グロービスでデータサイエンティストをやっている柳沼と申します。今日はよろしくお願いします。「SlackへのKPI通知Botを作ったらいろいろ捗った話」というタイトルで、今日は発表させていただきます。

まず軽く自己紹介をさせていただきます。

麴町の会社で働いています。去年新卒でグロービスに入りまして、今年で2年目になります。グロービスは今デジタルシフトを進めていて、動画でビジネススキルを学べる「グロービス学び放題」というサブスクリプションのサービスがあるんですが、主に業務ではその分析とか可視化レポーティングなどを担当しています。

今年は分析方面のスキルも高めていきたいなと思っていて、Kaggleなどに挑戦していければいいかなと思ってます。Twitterもやってるので、フォローしていただければすごくうれしいです。

今日話すことは、まず「なぜそのSlackへのKPI通知Botを作ろうと思ったのか」というところと、「どういうふうにやっているのか」という運用面の話。あと、「やった結果どういう効果が社内であったか」という話と、最後にプラスアルファで工夫しているポイントがいくつかあるので、そちらも紹介できればなと思います。

逆に今日話さないことなんですけど、詳しい実装には今回踏み込めないなと思っています。Qiitaに記事をあらかじめ書いていて、Twitterのトップページのほうにツイートを固定しているので、もし気になる方がいらっしゃいましたら、そちらを参照していただければなと思います。

導入のきっかけ

まず「なんでやろうと思ったのか」というところです。

2年前にデータ組織が立ち上がって、僕は今年ジョインしたんですけど、去年はけっこうデータがぐちゃぐちゃだったので、去年はデータ基盤の整備をがんばりました。もともとAWS AthenaにあったデータをBigQueryに移行したり、あとはデータのクレンジングとかをやったりしました。

今年はようやくデータを活用して、「いろんなところに影響を及ぼしていけるかな?」みたいなところなので、影響範囲を広げていきたいと思っていました。あとちょうど社内の勉強会でGoogle Apps Script(GAS)を習ったので。「これ使ったらSlackのKPI通知Botがけっこう簡単に作れそうだな」と思ったので、「やるか!」ということでやりました。

実際どのようにやっているかというところなんですけど、そのGoogle Apps Scriptを使ってSlackに通知しています。デイリーだと平日に送っていて、ウィークリーは毎週月曜ですね。マンスリーは毎月1日で、1日が土日とかだと次の月曜日に送られるようになってます。

これがSlackのメッセージの画面です。こういうアプリで通知するようにできていて、各サマリーの数字と、あと下に「DataPortalで詳細を見る」というところがあります。DataPortalっていうのがGoogleの、もともとDataStudioっていうような名前の無料のBIツールだったんですけど、そちらにダッシュボードを用意しているので、詳しい数字が知りたい人はここをポチッと押して、そちらに跳べるようになっています。

おそらく知らない方もいらっしゃると思うので、Google Apps Scriptについても軽く説明させていただくと、サーバーレスでJavaScriptを実行できる環境で、無料で使えます。本来はGsuiteのサービス同士を数行のコードで連携させるというのが売りで、例えばGoogleカレンダーの予定をぜんぶGoogleスプレッドシートに吐き出すみたいなことをやれるものだったんですけど、外部APIも叩けるということで、今回はそちらの用途で使っています。

あと、定期実行のトリガーですね。「毎週何曜日」とか「何分おき」とかを簡単に設定できるので、今回に最適だなということで使ってます。

実行の流れ

流れをざっと説明しますと、BigQueryにクエリを投げて結果を返す部分と、あとSlackのメッセージを組み立てるっていう部分です。

ここでBigQueryから得たデータをどんどん入れ込んでいくという状態です。

あとSlackのメッセージビルダーというものがあって、「ここにJSONを投げ込むと、Slack上でこういうふうにプレビューされます」というのがあるので。ここを見ながらやっていくとけっこう捗りました。

それで、Slackへのポストは5行くらいで書けます。

あとはトリガーを仕込んで、毎週何曜日とか毎月何日というのが設定できるので、それをGI上でポチポチやるとできます。詳しくは記事を見ていただければと思います。やった結果、数値に関する話題が社内で増えました。実際「今日この数値上がったね」とか「下がったね」とか、「けっこう高かったね」という話題が上がりました。

あとデータに関わりの薄い人ですね。例えばうちで言うと、動画のサービスをやってるんでクリエイターの方がいらっしゃるんですけど、そういう人ってけっこう日ごとの登録数とか、無料体験期間から有料契約への有料化率という指標に疎いみたいなところがあったんです。そういう人もデータを見るようになって、Slackのメッセージにスタンプをポチって押してくれるようになりました。

あと、数値感の定着ですね。数値感っていうのは、毎日毎日数値を見ることになるので、「あの数値はこのくらい」みたいなだいたいの範囲が定着してきたので、ここから変化を検知して「なんでこの数値は今日こんなに高いんだろう」みたいなのが議論に発展していければいいかな、というふうに思ってます。

工夫しているポイント

最後、工夫しているポイント。3つあるんですけど、「親しみやすいキャラ」と「カスタムコメント」と「割合の数値は分母を見せる」というところを、ちょっと工夫してます。

1番の「親しみやすいキャラ」ですけど、これはできるだけ多くの人にやっぱり見てもらいたいなって思って。無機質なものだとアレ(良くない)ですよね。これ(KPI通知マン)はネーミングセンスの問題もあるかもしれないですけど(笑)。

(会場笑)

シンプルでわかりやすいかなって思って、「KPI通知マン」という名前で(笑)、実際にグロービスのSlackにはこの人がいます。毎日KPIを通知してくれています。

あと「カスタムコメント」というところで、毎日毎日同じコメントで投稿されるとやっぱり無機質に感じてしまって、見る人が飽きちゃうという課題があると思うので、コメントの部分をその日の有料ID数とか有料化率とか登録数とかによって変えます。

例えば登録数がめちゃくちゃ多かったら「登録数が多かったな、今日は!」みたいなコメントになったり、継続率が低かったら「継続率、低いんじゃないか?」みたいなコメントを実装しています。これらはIf文で書いてるんですけど、なるべく見る人を飽きさせない工夫をしています。

最後の「割合の数値は分母を見せる」というところなんですけど、割合の数値ってけっこう日ごとでブレて、日によってめちゃくちゃ低かったり高かったりして、そこに振り回されるとあんまり本質的じゃないと思います。

なので例えば施策を打った人が、うちで言うと無料体験期間が10日間あるんですけど、10日後にちゃんと有料化しているのかなっていうのを、「トライアル終了ID数」っていう母数を見せることで、そっちのほうに思考がいくように工夫しています。

まとめさせていただくと、GASを使うとめちゃくちゃ簡単に定期的なSlackへのKPI通知ができるので、BigQueryにデータがある方とかは、本当にQiitaの記事のコードをコピペして、プロジェクトIDとかを変えるだけでたぶんそのまま使えるので、ぜひやってみてください。

それとKPI通知は、簡単にできるわりにすごく影響範囲が広かったり、社内にデータへの興味を持ってもらうためのインパクトが大きくて、すごくコスパがいいので、ぜひやってみてください。以上となります。ありがとうございました。

(会場拍手)