LoginSignup
5
6

More than 5 years have passed since last update.

GASを活用して掃除当番をランダムで指名するslackBotを作成する

Last updated at Posted at 2016-11-24

背景

掃除当番の指名を自動化する前は単純にslackのCustomize Your TeamにあるslackBotに名前を設定しておいて、毎回呼び出してました。ランダムで表示されるし、あれはあれで便利ですよね。

ただ、それは今日がゴミの日だと認識してないと発生しません。
そして今日はなんのゴミの日なのか。そもそも今日は何曜日なのか、、、
もはや日付の認識が曖昧になってきます。(え

そんなわけで、指定した曜日に自動的にランダムで担当者を指名して、尚且つ捨てるゴミを指示してくるslackBotを作成しました。

ゴール

1.決まった曜日・時間に自動で担当者をランダムに選出する
2.投稿する曜日が何のゴミを捨てる日なのか指示してもらう
3.弊社は2フロアあるので、階層毎に指名したい
4.基本的にめんどくさいことなので、やんわりお願いする感じにしたい。可愛い女の子にお願いされたい<ここ大事!

コード

基本的にYamottyさんの下記ストックを参考に、ゴミ捨ての種類と担当を2名を追加するカスタマイズしました。
ですので、コード内容の詳細はぜひこちら参照してください。
毎週のお掃除当番をSlackへランダムで通知する
感謝です。社内に秩序を与えてくれました笑

GOMI.gs
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人で協力してね💓", 
     {
      });
}

完成図

弊社は2フロアなので、階層毎で担当者を割り振ってます。
スクリーンショット 2016-11-24 20.47.30.png

投稿までの流れ

1.Spreadsheetからslackに投稿する方法は下記をもって割愛します。

GASを活用してGoogleAnalyticsの数値をslackに自動投稿する

2.指名される人間の名前をSpreadsheetに記入

A1セルから下に名前を入力していけばOKです。
人数が増えたらMath.random()以降の数値を調整すればOKです。
確かセル内に記入がある所まで取得する関数があったので、それを加えて上げれば調整不要ですかね?

3.今日の曜日と、曜日に紐付いた内容を指定する

Spreadsheetを整える
スクリーンショット 2016-11-24 21.05.07.png

内容的にはこんな感じ
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時なので、終礼前に合わせてトリガーを設定しておきます。
スクリーンショット 2016-11-24 21.19.28.png

まとめ

こうして社内に秩序が生まれました。
slackのCustomize Your TeamにあるslackBotの存在に気づく前はじゃんけんだったり、机が汚い人だったり、謎の指名だったりとカオスでしたが、自動化されることにより、大分効率化された気がします笑

そういえば最近Twitterで乱数のコクに関して話題になりましたが、確かにランダムであるはずなのですが、人間の認識的にランダムなのか不安になることは多々あります。是非コクを出して行きたいですね。

乱数にコクを出す方法について


5
6
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6