前提
- 毎週のゴミ捨て担当をランダムで可愛く自動通知してくれるBOTがほしい!
- GAS x Slackでかんたん実装
- いつもながらSlackApp神
今回のアウトプット
事前準備
GASコード
全貌
GoogleAppsScript
// 定義文
var slack = {
postUrl: 'https://slack.com/api/chat.postMessage',
token: '(A)', // Slackのtoken
ChannelId: "(B)", // Slackの投稿するCHannelID
userName: "今週のゴミ捨て当番だドン!", // botの名前
}
//シートの値を先にがさっと全取得する
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()
var lastrow = sheet.getLastRow();
var lastcol = sheet.getLastColumn();
var sheetdata = sheet.getSheetValues(1, 1, lastrow, lastcol);//がさっと取得
//NameとFaceをランダムで取得して、Slackへ送る
function OSOJIKUN() {
var row = Math.floor(Math.random() * 5) + 2;
Logger.log(row);
var Name = sheetdata[row][0];
var row2 = Math.floor(Math.random() * 5) + 2;//NameのrowをRandomで取得
var Face = sheetdata[row2][1];
var slackApp = SlackApp.create(slack["token"]);//FaceのrowをRandomで取得
var Message = slackApp.postMessage(slack["ChannelId"], "```" + "今週のゴミ捨て当番は…" + Name + "!頼んだドン!" + Face + "```", {username : slack["userName"]});
Logger.log(Message);
}
要素解説
定義文
- こちらの記事などとほぼ同じなので割愛します。SlackAppの使い方は一度覚えると非常に汎用性が高いのでオススメです。
シートの値を先にがさっと全取得する
GoogleAppsScript
//シートの値を先にがさっと全取得する
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()
var lastrow = sheet.getLastRow();
var lastcol = sheet.getLastColumn();
var sheetdata = sheet.getSheetValues(1, 1, lastrow, lastcol);//がさっと取得
- getSheetValuesを使用し、まずはシート全体の値を全て取得してしまいます。この利点は2つ。
- いちいち
getRange
でセル指定して 、getValue
で取得して…という処理を行うと、都度APIに負荷がかかり処理が重くなる。それを避ける事ができる。 - 要素を増減した場合でも、選択範囲を変更する必要がない(これは
getlastRow
やgetLastColumn
で範囲指定しているからですね)
- いちいち
NameとFaceをランダムで取得して、Slackへ送る
GoogleAppsScript
//NameとFaceをランダムで取得して、Slackへ送る
function OSOJIKUN() {
var row = Math.floor(Math.random() * 5) + 2;
Logger.log(row);
var Name = sheetdata[row][0];
var row2 = Math.floor(Math.random() * 5) + 2;//NameのrowをRandomで取得
var Face = sheetdata[row2][1];
var slackApp = SlackApp.create(slack["token"]);//FaceのrowをRandomで取得
var Message = slackApp.postMessage(slack["ChannelId"], "```" + "今週のゴミ捨て当番は…" + Name + "!頼んだドン!" + Face + "```", {username : slack["userName"]});
Logger.log(Message);
}
- rowをランダムで取得する際に
Math.random
メソッドを使います。*x
を記載した場合、0~xまでの整数を取得してくれます。 - 今回は
row = 2 ~ 7
の範囲で取得したかったため、上記のような記載となっていますが、より動的な記述に変更可能ですね。
トリガー
コメント
- オフィス内での定期的な連絡業務などは自社でどんどんSlack x GASで自動処理しています。
- このTips自体よりはこういった組織運営の小さなところへも使える技術を適用していく組織文化を大事にしていきたいなと思う次第。