はじめに
この記事はSlackとGAS / Googleスプレッドシートを使って、
簡易なタスク振り分けを自動化しようという試みです。
そして振り分けしたタスク担当者に「今日はあなたが担当者ですよ」と通知してあげる仕組みになります。
小さいアプリケーション作りたいけどDBとか立てるのもな…という怠惰な方は
スプレッドシートを擬似DBにしちゃいましょう!
Slackの準備
まずSlackの任意のチャンネルで右上の歯車(設定ボタン)をクリックします。

アプリを追加をクリックすると、以下の画面で検索フォームが現れるので、
そこでincommingと打ち込んで出てくるIncoming Webhookを追加してください。
するとブラウザが開き以下の画面が表示されます。
そうしたらSlackに追加をクリックします。
すると以下の画面が出てくるので、
インテグレーションの設定のチャンネルへの投稿に投稿したい任意のチャンネル名を入力したら、
Webhook URLをコピーしておいてください。
とりあえず、Slackの設定はこれで終わりです。
GASを開く
GASの使い方は単純で、今回はGoogle Driveから作っちゃいましょう。
まずは自分のアカウントでGoogle Driveを開き、
New+ボタンからメニューを開き、More、そしてGoogle Apps Scriptを選択します。
すると別タブでエディターが開くので、適当に名前だけ変えていったんおいておきます。
Googleスプレッドシートを作る
GASと同じ手順でGoogleスプレッドシートを開いたら、以下のように書きます。
二行目の担当者のところは、そのユーザーのSlack User IDを記載します。
<@user_id>で指定してあげることで、メンションを飛ばすことができるからです。
SlackUserIdはSlackのユーザーのプロフィールからコピーすることができます。
そしてここのURLもコピーしておきましょう。すぐに使います。
GASでスクリプトを書く
さて、今回は日回しの前提で担当者の順番でタスクが割り振られることにします。
また、ちょっと複雑にして二人のペアを1日の担当者ということにしましょう。コードは以下の通りです。
var postUrl = 'SlackのWebhook url';
var username = '定例業務(日時)'; // 通知時に表示されるユーザー名
var icon = ':droplet:'; // 通知時に表示されるアイコン
var message = ''; // 投稿メッセージ
var sheetUrl = 'スプレッドシートがあるURL'; //スプレッドシートのURL
var nameRow = 2; // UserIDがある行
var achievementRow = 3; // 実積がある行
var assign = []; // 担当者の配列
var sheet = SpreadsheetApp.openByUrl(sheetUrl).getSheets()[0]; // シート
var check = false; // ループ処理のため
var columnCount = 2; // ヘッダーをのぞく
function myFunction() {
while(assign.length != 2) { // 担当者は2人まで
var checkValue = sheet.getRange(achievementRow, columnCount).getValue();
if (checkValue=="") { // taskをやっていない人がいたら
var who = sheet.getRange(nameRow, columnCount).getValue();
if (who != "") { //そこに名前があったら
assign.push(who);
check = true;
sheet.getRange(achievementRow, columnCount).setValue('DONE'); // タスク担当したことを記入する
} else { // タスクが一周したら
columnCount = 1;
sheet.getRange(achievementRow, 2, 1, sheet.getLastColumn()).clearContent(); // 実積の列をリセットする
}
}
columnCount++;
}
message = assign[0] + 'と' + assign[1] + 'が本日の担当者です。';
var jsonData =
{
"username" : username,
"icon_emoji": icon,
"text" : message
};
var payload = JSON.stringify(jsonData);
var options =
{
"method" : "post",
"contentType" : "application/json",
"payload" : payload
};
UrlFetchApp.fetch(postUrl, options); // API送信
}
}
試しに実行してみましょう。(認証を求められるから許可しておく)
うまくできていれば、Slackのチャンネルに通知がいくはずです。
スケジューラーの設定
あとはスケジューラーに設定してあげるだけでOK。

時計のアイコンをクリックして、スケジューラーを追加。
こんな感じで時刻を設定してあげれば、自動で通知がいくようになります。
アレンジとして、土日祝日を除きたい、という場合であれば
https://qiita.com/Panda_Program/items/31f331fd4c2f3cfab333
こういったものを追加してあげれば良いでしょう。
Slack + GASを使ってみて
すごい単純な自動化をさせたい、サーバーを立てたりDBを作るほどでもない、という場合とても重宝します。
JSを書いている人ならGASはとても馴染みがある言語なので、それほど困ることもないでしょう。
もう少し複雑なこともできそうなので、時間があったら勉強してみたいと思いました。