カレンダーだけでタスク管理する【Google Apps Script】
タスク管理は色々とアプリがあります。 ただ個人的に次の要件を満たすものがなかなかありませんでした。
- カレンダーベースで管理したい
- わざわざ専用アプリを立ち上げたくない
- 立ち上げて数ステップ手間を取るのが嫌
- もちろんタスクの実行漏れを防ぎたい
そこで普段予定を管理しているGoogleカレンダーでタスク管理をし、 タスク漏れを防ぐためにGoogle Apps Scriptを使うことにしました。
今回紹介する実現機能は
- Googleカレンダーを使用
- iPhoneでもAndroidでも、特に新しいアプリは使わずに、お気に入りのカレンダーアプリがそのまま使える
- カレンダーベースなので必然と期限が管理できる
- Google Apps Scriptで期限切れのタスクを自動管理する
- 期限になったら次の日へ予定を移動する
- 次の日に移動した予定をメール通知する
実現方法
- タスク管理用のGoogleカレンダーを作成
- 別途アカウントを作成するわけではなく、"カレンダー"を追加します
- Google Apps Scriptの導入
- カラのspreadsheetを作成
- Google Apps Scriptで今日が期限の予定を次の日に移すコードを書く
- 使い倒す
タスク管理用のGoogleカレンダーを作成
Googleカレンダーにアクセスします。
カレンダーIDを取得しておきます。
Google Apps Scriptの導入
Google Apps ScriptはGoogle Spreadsheetから作成できます。 Spreadsheet自体は使いませんが、カラのシートを作成しましょう。
Google Driveから作成します。
スプレッドシートを作成したら「ツール」→「スクリプトエディタ」と進みます。
コードは下記のものをコピペします。 (修正箇所が2点あります。)
/** * 次の日を返す * * @param baseDate Date型の基準日 この次の日を返す 時刻もそのまま引き継ぐ */ function getNextDate(baseDate) { var y = baseDate.getFullYear(); var m = baseDate.getMonth(); var d = baseDate.getDate(); var h = baseDate.getHours(); var mi = baseDate.getMinutes(); var s = baseDate.getSeconds(); return new Date(y, m, d + 1, h, mi, s); } /** * 指定されたカレンダーの指定された日の予定を次の日に移動する */ function moveTaskToNextDay(taskCalendarId, baseDate) { var taskCalendar = CalendarApp.getCalendarById(taskCalendarId); var events = taskCalendar.getEventsForDay(baseDate); var taskList = ''; for(var i = 0; i < events.length; i++){ var title = events[i].getTitle(); var s = events[i].getStartTime(); var e = events[i].getEndTime(); if (taskList.length > 0) { taskList += '\n'; } taskList += title; if (events[i].isAllDayEvent()) { taskCalendar.createAllDayEvent(title, getNextDate(s)); Logger.log('--------------'); Logger.log(getNextDate(s)); } else { taskCalendar.createEvent(title, getNextDate(s), getNextDate(e)); Logger.log('--------------'); Logger.log(getNextDate(s)); Logger.log(getNextDate(e)); } events[i].deleteEvent(); } return taskList; } /** * "ToDo"カレンダーの"今日"の予定を明日へ移動する * 時間型トリガー設定済み */ function moveTaskToTomorrow() { // タスクのカレンダー var taskCalendarId = 'XXXXXXXXXXXXX@group.calendar.google.com'; var baseDate = new Date(); var taskList = moveTaskToNextDay(taskCalendarId, baseDate); if (taskList.length > 0) { var to = 'YYYYYYYYYYYYYY@gmail.com'; var subject = '未完了タスクの更新通知'; var body = taskList + '\n\n上記タスクを明日へ繰り越しました。' MailApp.sendEmail(to, subject, body); } }
修正箇所1点目
var taskCalendarId = 'XXXXXXXXXXXXX@group.calendar.google.com';
の部分を先ほどメモしたカレンダーIDへ置き換えます。
修正箇所2点目
var to = 'YYYYYYYYYYYYYY@gmail.com';
の部分はタスクを繰り越したことを通知するメールアドレスを設定します。
メニューの「実行」→「moveTaskToTomorrow」と選択すると、タスクが繰り越され、その旨がメール通知されます。
使い倒す
自動実行
スクリプトエディタで、毎日自動的にプログラムが動くように設定しましょう。
自動実行の条件が設定できます。
「実行」はmoveTaskToTomorrow、「イベント」は時間主導型、日タイマーの午後の遅い時間を選択しましょう。
これで、タスクが自動繰り越しされます。
以上