概要
毎月1本くらいは記事書こうねとか、有給が上手に取れなくて期限が来る前にまとめてバタバタ取ると大変なので毎月1回は取ろうねーとか
定期的にやらないとダメだけど忘れがちなものとか、アンケートとか
リマインドしててもリマインドしてることすら忘れちゃうので、チームみんなまとめてリマインドするスクリプトを作りました。
スプレッドシートで管理することで、自分だけじゃなくて他の誰かが気づいて追加できて運用できるってのがなかなかいいと思ってる。
あと個人的に○○さんはもう終わってるのかっていう追い込みが効いてる。
TODO管理するSpreadsheetのフォーマット
以下のフォーマットでTODO
って名前で作ってスクリプトエディタにソースコードを貼ると多分動きます。
ソースコード
gas
var SPREADSHEET = SpreadsheetApp.getActiveSpreadsheet();
var SHEET = SPREADSHEET.getSheetByName('TODO');
var SLACK_WEB_HOOK_URL = 'ここにウェブフックのURL';
var TODO_SHEET = 'TODOが管理されてるシートのURL';
function main() {
const today = new Date();
// 営業日以外はおとなしくしとく。
if (!isBusinessDay(today)) {
return;
}
const message = getReminderMessage()
if (message.length) {
message += "\n\n対応お願いします。"
message += "\n" + TODO_SHEET
postSlack(message)
}
}
function getReminderMessage() {
const range = SHEET.getRange('3:1001');
const today = new Date();
var message = []
range.getValues().forEach(function(row, rowIndex){
const notCompatible = []
if (typeof(row[1]) == 'object' && row[1].getTime() < today.getTime()) {
row.forEach(function(e, index) {
if (e == '未対応') {
notCompatible.push(getName(index+1))
}
})
if (notCompatible.length) {
message.push(row[0] + "の期日です。")
message.push(notCompatible.map(function(e) { return "<@" + e + ">" }).join(" "))
}
}
})
if (message.length) {
message.push("\n\n対応お願いします。")
message.push("\n" + TODO_SHEET)
}
return message.join("\n")
}
// 2行目に書いてるslackID取得するやつ
function getName(index) {
const slackIdRow = '2'
const range = SHEET.getRange(wmap_column_convert(index) + slackIdRow);
return range.getValue()
}
//列番号のアルファベット列名変換
function wmap_column_convert(colmun_number) {
var result = SHEET.getRange(1, colmun_number);
result = result.getA1Notation();
result = result.replace(/\d/,'');
return result;
}
// 営業日かどうか
function isBusinessDay(date){
if (date.getDay() == 0 || date.getDay() == 6) {
return false;
}
var calJa = CalendarApp.getCalendarById('ja.japanese#holiday@group.v.calendar.google.com');
return calJa.getEventsForDay(date).length === 0
}
function postSlack(message) {
var jsonData =
{
"link_names" : 1,
"text" : message
};
var payload = JSON.stringify(jsonData);
var options =
{
"method" : "post",
"contentType" : "application/json",
"payload" : payload
};
UrlFetchApp.fetch(SLACK_WEB_HOOK_URL, options);
}
slackのユーザーIDの取得方法
ユーザの詳細画面出してメニューっぽいところ押したらコピーできるみたい
参考
Google Apps Scriptで営業日を判定してトリガーを作成する方法
スプレッドシートで管理しているタスクをSlackにリマインドする方法