背景
掃除当番の指名を自動化する前は単純にslackのCustomize Your TeamにあるslackBotに名前を設定しておいて、毎回呼び出してました。ランダムで表示されるし、あれはあれで便利ですよね。
ただ、それは今日がゴミの日だと認識してないと発生しません。
そして今日はなんのゴミの日なのか。そもそも今日は何曜日なのか、、、
もはや日付の認識が曖昧になってきます。(え
そんなわけで、指定した曜日に自動的にランダムで担当者を指名して、尚且つ捨てるゴミを指示してくるslackBotを作成しました。
ゴール
1.決まった曜日・時間に自動で担当者をランダムに選出する
2.投稿する曜日が何のゴミを捨てる日なのか指示してもらう
3.弊社は2フロアあるので、階層毎に指名したい
4.基本的にめんどくさいことなので、やんわりお願いする感じにしたい。可愛い女の子にお願いされたい<ここ大事!
コード
基本的にYamottyさんの下記ストックを参考に、ゴミ捨ての種類と担当を2名を追加するカスタマイズしました。
ですので、コード内容の詳細はぜひこちら参照してください。
毎週のお掃除当番をSlackへランダムで通知する
感謝です。社内に秩序を与えてくれました笑
function postSlackMessage(content) {
var token = PropertiesService.getScriptProperties().getProperty('xoxp-XXXXXXXX');//slackトークの指定
var slackApp = SlackApp.create(token);
var options = {
channelId: "#general",
userName: "指名するありす",
icon_url: "http://i.imgur.com/einH6Tw.png",
message: content
};
slackApp.postMessage(options.channelId, options.message, {username: options.userName,icon_url:options.icon_url});
}
//SpreadSheetの取得
var ss = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/XXXXXX"); //SpreadsheetのURL
var sheet = ss.getSheetByName('シート1'); //Spreadsheetのシート名(タブの奴)
var Sheet = SpreadsheetApp.getActiveSpreadsheet()
var lastrow = Sheet.getLastRow();
var lastcol = Sheet.getLastColumn();
var sheetdata = Sheet.getSheetValues(1, 1, lastrow, lastcol);//がさっと取得
function GOMI() {
//Math.random() * {リストの人数増えたら 数字を変える}
//1人目↓
var row = Math.floor(Math.random() * 21);
Logger.log(row);
var Name = sheetdata[row][0];
var row2 = Math.floor(Math.random() * 21);//NameのrowをRandomで取得
//2人目↓
var row_b = Math.floor(Math.random() * 21);
Logger.log(row_b);
var Name2 = sheetdata[row_b][0];
var row_b2 = Math.floor(Math.random() * 21);//NameのrowをRandomで取得
//捨てるゴミの種類↓
var item = Sheet.getSheetValues(7,5,1,1);
postSlackMessage("今日のゴミ捨ては『" + item + "』で、\n 7F当番は……『" + Name + "』で、5F当番は……『" + Name2 + "』だよん!\nゴミの溜まるオフィスは🙅🙅\n\n\nゴミが多いようなら2人で協力してね💓",
{
});
}
完成図
投稿までの流れ
1.Spreadsheetからslackに投稿する方法は下記をもって割愛します。
GASを活用してGoogleAnalyticsの数値をslackに自動投稿する
2.指名される人間の名前をSpreadsheetに記入
A1セルから下に名前を入力していけばOKです。
人数が増えたらMath.random()以降の数値を調整すればOKです。
確かセル内に記入がある所まで取得する関数があったので、それを加えて上げれば調整不要ですかね?
3.今日の曜日と、曜日に紐付いた内容を指定する
内容的にはこんな感じ
E1 =TODAY()
→今日の日付を取得して
F1 =TEXT(E1,"ddd")
→日付を曜日に直して
F3~G5に曜日とゴミ捨ての種類を書いて、、、
E7 =VLOOKUP(F1,F3:G5,2,FALSE)
→該当の曜日に何を捨てれば良いのかVLOOKUPしてあげる
4.投稿内容とセルを指定する
postSlackMessagで投稿内容を記入すればOK
詳しい書き方は下記URLの「投稿までの流れ」の5を参照
GASを活用してGoogleAnalyticsの数値をslackに自動投稿する
5.GASで投稿時間を設定する
リソース>現在のプロジェクトのトリガー
より投稿時間を設定出来ます。
終礼が19時なので、終礼前に合わせてトリガーを設定しておきます。
まとめ
こうして社内に秩序が生まれました。
slackのCustomize Your TeamにあるslackBotの存在に気づく前はじゃんけんだったり、机が汚い人だったり、謎の指名だったりとカオスでしたが、自動化されることにより、大分効率化された気がします笑
そういえば最近Twitterで乱数のコクに関して話題になりましたが、確かにランダムであるはずなのですが、人間の認識的にランダムなのか不安になることは多々あります。是非コクを出して行きたいですね。
アニメーションの監修で、「 Random();の代わりに、(Random()+Random()+Rrandom()+Random()+Random())/5.0f; を使うと、動きにコクが出る」と言ったら、ピュアオーディオ扱いされるのですが・・・これは根拠のあるアルゴです。
— 深津 貴之 (@fladdict) 2016年11月3日