Edited at

スプレッドシートで管理しているKPIをSlackに自動投稿するGoogle Apps Scriptを作ってみた

More than 3 years have passed since last update.

運営中のPlayer!のKPI管理として、SlackへのKPI自動投稿を行うようにしました!


Slackへの自動投稿

DAUの前日比がプラスなら:thumbsup:、前日比がマイナスなら:thumbsdown:というふうにメッセージを出しわけてます。

スクリーンショット 2015-06-26 21.07.52.png


この記事の構成

僕が書いたコードを全て記載した上で、2部構成に分けて説明します。

1.Google Apps ScriptでSlackのチャネルに投稿するのに必要な作業

2.スプレッドシートから値を取得し、投稿メッセージを作成するのに必要な作業


まずは、コードを全てお見せする


コード.gs

// 共通部分

var slack = {
postUrl: 'https://slack.com/api/chat.postMessage',
token: '', // Slackのtoken
channelId: "", // SlakckのチャネルのID
userName: "お好きな名前で!!", // botの名前
}

var postMessage = function(text) {
UrlFetchApp.fetch(slack["postUrl"], {
"method" : "post",
"payload" : {
token: slack["token"],
channel: slack["channelId"],
username: slack["userName"],
text: text
}
});
}

// 数値元によって変更する箇所
function myFunction() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[];

var dauvalues = sheet.getSheetValues()*100;
var daybeforevalues = sheet.getSheetValues()*100;

var dau = dauvalues.toFixed()
var daybefore = daybeforevalues.toFixed()

if ( daybefore > 0 ){
postMessage("本日のDAUは" + dau + "%で、前日比" + daybefore + "%なんですわ(:thumbsup: ՞ਊ ՞):thumbsup:");
}else{
postMessage("本日のDAUは" + dau + "%で、前日比" + daybefore + "%なんですわ(:thumbsdown: ՞ਊ ՞):thumbsdown:");
}
}


細かく確認していきます!


1.Google Apps ScriptでSlackのチャネルに投稿するのに必要な作業


Slackへの投稿に必要な用意:

まず、Google Apps Scriptのエディターを開いたら、このライブラリをダウンロードしてください!

非常に便利ですので、このSlackkAppを作ってくださった方は、僕にとって神様です。


  • Google Apps ScriptのライブラリSlackApp(Library Key:M3W5Ut3Q39AaIwLquryEPMwV62A3znfOO)

参考:Slack BotをGASでいい感じで書くためのライブラリを作った

さて、ダウンロードがすんだところで、共通部分のポイントをお伝えします!


コード.gs

// 共通部分

var slack = {
postUrl: 'https://slack.com/api/chat.postMessage',
token: '', // Slackのtoken
channelId: "", // SlakckのチャネルのID
userName: "お好きな名前で!!", // botの名前
}

var postMessage = function(text) {
UrlFetchApp.fetch(slack["postUrl"], {
"method" : "post",
"payload" : {
token: slack["token"],
channel: slack["channelId"],
username: slack["userName"],
text: text
}
});
}


ポイントは2つです!!

まず、1つ目は、こちら

token: '①', // Slackのtoken

Slackのtokenは、Slack Web APIのAuthenticationでTeam,Userを確認して、ボタンを押すと発行されます。

僕のtokenはxoxp-○○○○○○○○○-○○○○○-○○○こんな感じでした!

このxoxp-○○○○○○○○○-○○○○○-○○○をコピペすればオッケーです。

次に、2つ目は、こちら

channelId: "②", // SlakckのチャネルのID

SlackのチャネルIDの取得方法は、

まずchannels.listの上部にあるTesterをクリックし、tokenを確認して、Test Methodを押します。

次に、Test Methodの下部にばぁ〜とでてきた文章の中から、自分が投稿したいチャネルの名前(name)を見つけ、その1つ上にあるidをコピーすればオッケーです!

僕が投稿したチャネルIDは英数字を含む文字列でした。

※注意点としては、チャネル名(#generalなど)ではないということです!

これで、共通部分の説明は完了しました!


2.スプレッドシートから値(DAUと前日比)を取得し、投稿メッセージを作成するのに必要な作業

次に、数値元によって適宜変更していただく必要がある箇所です。

※今回の注意点としては、スクリプトエディターは、KPI管理を行っているスプレッドシートから開いています。


数字管理の状況説明

Player!のDAUと前日比は、Googleスプレッドシートの1つのシートの、ある特定のセルに%表示されています。

dailyスプレッドシートのDAUシートの、3行目の2列目がDAU、3行目の3列目が前日比という感じです。

イメージ図

day
DAU
前日比

2015/6/26
○○.○○%
+○○.○○%

そこで、(2.1)特定のスプレッドシートの特定のセルから値を取得して、(2.2)その値を使って投稿メッセージを作成をします。


2.1 特定のスプレッドシートの特定のセルから値を取得

function myFunction() {

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[③];

この部分で、スクリプトエディターを開いたスプレッドシートを指定して、DAUを管理しているシートを指定しています。

そして、DAUを管理しているスプレッドシートが一番左から何番目にあるかを数えます。

1番左なら、ss.getSheets()[0];

左から4番目なら、ss.getSheets()[3];

と対象の数字をに記入すれば、引っ張りたいシートを指定できます。

 var dauvalues = sheet.getSheetValues(④)*100;

var daybeforevalues = sheet.getSheetValues(④)*100;

特定のセルを指定して、その値(DAUと前日比)を取得をした後、ちょっとこざいくしてます。

Player!の場合、DAUは特定のセルに表示されますので、

getSheetValues(3,2,1,1)といったように指定してます。

④の箇所の書き方は、このドキュメントを参考にしてください:https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet#getSheetValues(Integer,Integer,Integer,Integer)

また、なぜ*100があるかというと、sheet.getSheetValues(④)の取得したDAU及び前日比の値が0.○○○○○○○○○○○○○○となっており、Slackへの投稿メッセージを○○.○○%とするのに必要という理由です。

 var dau = dauvalues.toFixed(⑤)

var daybefore = daybeforevalues.toFixed(⑤)

先ほど取得し、こざいくをした値は○○.○○○○○○○○○○○○○○となっているので、小数桁を制限するためにtoFixed(⑤)をしています。

小数2桁:toFixed(2)

小数5桁:toFixed(5)

となりますので、目的の小数桁をに記載してください。

これらの作業により、DAUと前日比の取得、加工が完了しました。


2.2 取得した値を使って投稿メッセージを作成

 if (  daybefore > 0 ){

postMessage("本日のDAUは" + dau + "%で、前日比" + daybefore + "%なんですわ(:thumbsup: ՞ਊ ՞):thumbsup:");
}else{
postMessage("本日のDAUは" + dau + "%で、前日比" + daybefore + "%なんですわ(:thumbsdown: ՞ਊ ՞):thumbsdown:");
}
}

ここでは、前日比がプラスの場合、マイナスの場合とでメッセージの出し訳を行なっております。


自動投稿のための時間設定

Player!の場合、これを毎日10時に自動投稿しています。

この時間の設定は、スクリプトエディターのリリーストリガーで管理しています!

こうして無事、自動投稿が完成です!

スクリーンショット 2015-06-26 21.07.52.png