やりたいこと
タスクをGoogle Todoリストに入力していたのですが、入力だけしてTodoリストの確認を忘れることが多くありました。
そこでGASを使って、通知するようにしました。
具体的には一時間おきにTodoリストをチェックし、当日締め切りのタスクをSlackに通知しています。
※Todoリストの機能でできる可能性はありますが、今回は勉強を兼ねてGASで作りました
少々見苦しい書き方もありますが、備忘録として書いておきます。
処理の流れとしては以下です。
① 通知メッセージの作成
② Slack通知
①通知メッセージの作成
function createTodoMessage() {
// マイタスクのデータ取得
const tasks = Tasks.Tasks.list("XXX").items;
// 期限切れのタスクを抽出
var expiredTasks = [];
for(var i = 0; i < tasks.length; i++){
var task = tasks[i];
if (task.due !== undefined) {
const taskTime = task.due.toString().slice(0,10).replace(/\-/g,'');
const now = new Date();
const tomorrow = now.getFullYear() * 10000 + (now.getMonth() + 1) * 100 + now.getDate() + 1;
if(Number(taskTime) < tomorrow) expiredTasks.push(tasks[i]);
};
}
// 期限切れタスクがなければnullを返す
if(expiredTasks.length == 0){
return null;
}
// タスクのtitleをつなげる
var message = '';
expiredTasks.forEach(function (task, i) {
const index = i + 1;
message += "task" + index +": " + task.getTitle() + " ,\n"
});
return message;
}
(補足)
- 全体的にこちらのページを参考にさせていただきました。https://www.virment.com/use-google-tasks-from-script/
- 最初にタスクの抽出をしています。"XXX"に個人のGoogle tasksのIDをいれると自分のTodoリストと紐付けられます。
- タスクに設定された日が当日以前のものを抽出して、メッセージを作成してます。
②slack通知
function sendHttpPost(message){
const url = "XXX";
const postData = {
'text': message,
};
const options = {
'method' : 'POST',
'payload' : JSON.stringify(postData)
};
const response = UrlFetchApp.fetch(url, options);
Logger.log(response)
}
(補足)
- ポスト部分は公式のページを参考にしました。https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app
- 最初の"XXX"にslackのWebhook URLを貼り付けます。
定時実行の設定
上記の関数をmyFunctionから呼び出し、myFunctionを一時間おきに実行するようトリガーを設定しました。
function myFunction(){
const message = createTodoMessage();
Logger.log(message);
if(message !== null){
sendHttpPost(message);
}
}
まとめ
Google Todoリストから情報を抜き出し、当日までのタスクを一定時間ごとにSlackに通知するようにしました。
タスクが完了したら、google Todoリスト側で完了することで通知が止まります。