はじめに
NotionRubyMapping 67回目は昨日に引き続き、時間を含むタスクを Notion とカレンダーに一括で登録する Workflow を紹介します。anc というコマンドの後に記述する内容によって、時間を様々に登録できます。昨日は、Notion 側を解説したので、今日は残ったカレンダー側を解説します。今回は NotionRubyMapping は使わないのですが、ご勘弁を。
anc タスク名
→ 今日の日付でタスクを登録anc タスク名 4/29
→ 4月29日にタスクを登録anc タスク名 4/29 10:00
→ 4月29日 10:00 にタスクを登録anc タスク名 4/29 10:00 12:00
→ 4月29日 10:00 から 12:00 にタスクを登録anc タスク名 10:00
→ 今日の 10:00 にタスク登録anc タスク名 10:00 12:00
→ 今日の 10:00 から 12:00 にタスクを登録
Notion 側の処理
長くなりそうなので、今日は残りのカレンダー側の処理だけ解説します。
機能作成したキーワードはこちらです。特に何も変更はありませんが、一応再掲しておきます。
次の Run Script は昨日と同じですが、今回は /usr/bin/osascript (JavaScript) を選びます。
一画面に収まりきらないので、こちらにソースを掲載しておきます。スクリプトはそれほど難しいことはしていないと思います。
ObjC.import("stdlib"); function run(argv) { query = "{query}" let Calendar = Application("Calendar") let cal = $.getenv("NOTION_CALENDAR") let notionCal = Calendar.calendars[cal] var endTimeStr = null var startTimeStr = null // query を分割 let words = query.split(" ") // 最後のパラメータが時間かどうか var timeStr = words.slice(-1)[0] if (timeStr && timeStr.match("[0-9]+:[0-9]+")) { endTimeStr = words.pop() } // 時間が設定されていたら開始時間もあるかどうか調べる if (endTimeStr) { timeStr = words.slice(-1)[0] if (timeStr && timeStr.match("[0-9]+:[0-9]+")) { startTimeStr = words.pop() } else { startTimeStr = endTimeStr endTimeStr = null } } var dateStr = words.slice(-1)[0] // 日付が設定されていなければ今日にする if (dateStr.match("^[0-9]+/[0-9]+$")) { dateStr = new Date().getFullYear() + "/" + words.pop() } else if (dateStr.match("^[0-9]+/[0-9]+/[0-9]+$")) { dateStr = words.pop() } else { let timeNow = new Date() dateStr = timeNow.getFullYear() + "/" + (timeNow.getMonth() + 1) + "/" + timeNow.getDate() } // 日付・時間を除いた文字列から summary を作成 event = {summary: words.join(" ")} if (startTimeStr) { // 開始時間が設定されていたら時間を含めた日付を設定 let startTime = new Date(dateStr + " " + startTimeStr) var endTime if (endTimeStr) { // 終了時間が設定されていたら時間を含めた日付を設定 endTime = new Date(dateStr + " " + endTimeStr) } else { // 終了時間が設定されていなかったら開始時間の1時間後を設定 endTime = new Date(dateStr + " " + startTimeStr) endTime.setHours(endTime.getHours()+1) } event["startDate"] = startTime event["endDate"] = endTime let newEvent = Calendar.Event(event) notionCal.events.push(newEvent) } else { let date = new Date(dateStr) event["startDate"] = date event["endDate"] = date event["alldayEvent"] = true let newEvent = Calendar.Event(event) notionCal.events.push(newEvent) } }
おわりに
今回は、カレンダー側の処理を追加しました。これによって anc により Notion タスクと同時にカレンダーにもイベントが作成されるようになります。