参考にした記事一覧
Google Spread Sheetを読み込む方法:
https://kujirahand.com/blog/index.php?GAS%E3%81%A7%E4%BB%BB%E6%84%8F%E3%81%AE%E3%82%B9%E3%83%97%E3%83%AC%E3%83%83%E3%83%88%E3%82%B7%E3%83%BC%E3%83%88%E3%81%AE%E5%80%A4%E3%82%92%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%82%80
Slackに通知を飛ばす方法:
https://qiita.com/chihiro/items/c7b11abc78f5d806c3a8
概要
毎朝行う朝会で日毎にファシリを決めているのだが、「今日のファシリ誰だっけ?」と思い出している時間が勿体無いので、あらかじめ作成してあったSpread Sheetを活用し、Slackにその日のファシリは誰かを通知してくれるbotが欲しかったので実装してみました。ちなみに今回が初めてGAS(Google Apps Script)なるものを触りました。
実装したスクリプト
// スプレッドシートの読み込みに必要な変数群
var sheet = SpreadsheetApp.openByUrl('<あらかじめ作成してあったSpread SheetのURL>');
var rows = sheet.getDataRange();
var numRows = rows.getNumRows();
var values = rows.getValues();
// 曜日の取得に必要な変数群
var date = new Date();
var dayOfWeek = date.getDay();
var dayOfWeekStr = ["日曜日", "月曜日", "火曜日", "水曜日", "木曜日", "金曜日", "土曜日"][dayOfWeek];
// Slack通知に必要な変数群
var postUrl = '< Slack通知の際に必要なIncoming WebHooksのWebhook URL >';
var username = 'reminder';
var icon = ':ghost:';
function myFunction() {
for (var i = 1; i <= numRows - 1; i++) {
var weekdays = values[i][1];
if (dayOfWeekStr === weekdays) {
var message = '今日のファシリテーターは '+ values[i][2] + ' だす!';
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);
}
}
}
処理の流れ
ファシリ担当Spread Sheet
番号 | 曜日 | 担当 |
1 | 月曜日 | 社員A |
2 | 火曜日 | 社員B |
3 | 水曜日 | 社員C |
4 | 木曜日 | 社員D |
5 | 金曜日 | 社員E |
アウトプットイメージ
Slackに曜日に応じて「今日のファシリテーターは 社員Hoge だす!」と通知される
実装の説明
関数内の処理について主に説明します。
- Spread Sheetを一行ずつ読み込む
- Spread Sheetに記載してある曜日と本日の曜日を比べる
- 曜日に応じてメッセージに曜日に適した社員名を追加
- JSON.stringifyでJavaScriptの値をJSON文字列に変換
- Slack通知の前にSlack通知に必要なoptionsを作成
- Slack(外部サービス)を使用する場合、Web APIを利用し、「HTTPリクエストを送る」必要があるため、以下のメソッドを使用する必要があったので実装
UrlFetchApp.fetch(URL,[options]);