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

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

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

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


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


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

```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](https://qiita-image-store.s3.amazonaws.com/0/129273/7f8d2c79-0ba4-67a9-ef65-7f59565b9a54.png)

#投稿までの流れ
##1.Spreadsheetからslackに投稿する方法は下記をもって割愛します。
[GASを活用してGoogleAnalyticsの数値をslackに自動投稿する](http://qiita.com/do_taka08/items/2e57f957cd8e0f0a6d30#投稿までの流れ)

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

##3.今日の曜日と、曜日に紐付いた内容を指定する
Spreadsheetを整える
![スクリーンショット 2016-11-24 21.05.07.png](https://qiita-image-store.s3.amazonaws.com/0/129273/be7b28fb-a65b-3c38-c076-07f9a594c0fa.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に自動投稿する](http://qiita.com/do_taka08/items/2e57f957cd8e0f0a6d30#投稿までの流れ)

##5.GASで投稿時間を設定する
リソース＞現在のプロジェクトのトリガー
より投稿時間を設定出来ます。
終礼が19時なので、終礼前に合わせてトリガーを設定しておきます。
![スクリーンショット 2016-11-24 21.19.28.png](https://qiita-image-store.s3.amazonaws.com/0/129273/39436af8-bf4d-9c12-940f-a2cb1716d389.png)


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

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

[乱数にコクを出す方法について](http://togetter.com/li/1044668)
<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">アニメーションの監修で、「 Random();の代わりに、(Random()+Random()+Rrandom()+Random()+Random())/5.0f; を使うと、動きにコクが出る」と言ったら、ピュアオーディオ扱いされるのですが・・・これは根拠のあるアルゴです。</p>&mdash; 深津 貴之 (@fladdict) <a href="https://twitter.com/fladdict/status/794003595301556224">2016年11月3日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>