Edited at

毎週のお掃除当番をSlackへランダムで通知する

More than 3 years have passed since last update.


前提


  • 毎週のゴミ捨て担当をランダムで可愛く自動通知してくれるBOTがほしい!

  • GAS x Slackでかんたん実装

  • いつもながらSlackApp神


今回のアウトプット


  • 毎週決まった日付・時間帯に、

  • 下記のようなGoogleSpreadSheetからNameとFaceをrandomで抽出し、
    image

  • Slackへ以下のような通知を送る
    image


事前準備


  • こんなシートを作っておく
    image


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つ。


    1. いちいちgetRangeでセル指定して 、getValueで取得して…という処理を行うと、都度APIに負荷がかかり処理が重くなる。それを避ける事ができる。

    2. 要素を増減した場合でも、選択範囲を変更する必要がない(これはgetlastRowgetLastColumnで範囲指定しているからですね)




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の範囲で取得したかったため、上記のような記載となっていますが、より動的な記述に変更可能ですね。


トリガー


  • 後は上記のscriptを走らせたい周期でトリガーを設定しましょう。タイトルに毎週と書きましたが、うちでは毎週月、木の朝9:00~10:00の時間帯に走らせています。
    image


コメント


  • オフィス内での定期的な連絡業務などは自社でどんどんSlack x GASで自動処理しています。

  • このTips自体よりはこういった組織運営の小さなところへも使える技術を適用していく組織文化を大事にしていきたいなと思う次第。