1. はじめに
これまで Google Calendar から Notion へは自動でタスクが作成・更新できるようにしていました。こちらのシステムは GAS で作成しており、来月販売される私が執筆した書籍に掲載されています。興味があったらご覧ください。
一方、Notion 側のタスクは Google Calendar には同期していませんでした。これは GTD でよくある2分で終わるようなタスクをカレンダーに登録したくないためです。また、ポーリングは Notion 側のシステムにも負荷をかけるので、あまり実施したくないという気持ちもあります。
GTD では「いつかやる」タスクが急に予定が決まり、「カレンダー」タスクに変わることがあります。Notion では日付をつければいいだけですが、Google Calendar に登録することを忘れ、よくダブルブッキングをしてしまっていました。
今日、昼に思い立ってショートカットを使ってさっと作ってしまいました。意外と便利だったので、ここで公開します。「説明はどうでもいいから早く使わせてください」という人は、こちらからショートカットを取得して、以下の質問に答えれば使えます。
- インテグレーションキー (タスクデータベースにコネクトしているもの)
- タスクデータベースとのタイトルプロパティの名前
- タスクデータベースの日付プロパティの名前
あとは、ページを開いて共有ボタンを押すだけです。macOS の場合には、リンクをコピーしてから、ショートカットを起動してもいいです(ショートカットキーを割り当てると楽です)。
2. スクリプトの紹介
まずは、入力部分です。共有シート、クイックアクションなどからページ URL を受け取ります。macOS の場合にはクリップボードからも取得します。取得した URL から最初に ? 以降のオプションを取り除き、末尾の page_id を取り出します。この定数は page_id
という名前をつけています。また、最後の3つは質問で回答してもらう定数です。それぞれ、以下の名前をつけています。
-
NOTION_API_KEY
-
title_property_name
-
date_property_name
次に取得した page_id
からページを取得します。最初に取得したページの id を取得します。この結果には id
と名前をつけています。この id
が存在しない場合には、正しい URL ではなかったということで処理を止めます。
「その他の場合」はページが取得できた時です。そのため、まずタイトルの文字列を連結します。装飾などをしている場合には、Rich text の配列になっているので、それらの plain_text を連結します。
次に日付プロパティを確認し、date.end と date.start の値を取得します。それぞれ start_str
、end_str
と名前をつけます。もし、start_str の値がなければ日付が設定されていないということなので、ここで処理を中止します。
「その他の場合」は日付が設定されていることになります。start_str という文字列を日付に変換します。これには start_date
という名前をつけます。
start_str
が時刻を含むかどうかは T
という文字が含まれるかどうかでわかります。T
が含まれなければ終日イベントです。この時、end_str
が設定されていなければ、end_date
は start_date
と同一のものを入れます。含まれている場合には、end_str
から日付型の end_date
を作成します。最後にこれらの情報でカレンダーを登録します。なお、私の Google Calendar 同期の都合で、メモに id:ページid というデータを記述しています。
その他の場合は時刻が存在しているイベントです。終日イベントとほぼ同様ですが、end_date
は start_date
の 1 時間後の時刻にしています。それ以外は全て同じなので、カレンダーの部分は省略します。通知だけ15分前にしています。
3. 動作の様子
動作の様子を昼に Twitter に紹介しました。
また、心配だったのでアンバサダーの田村さんにもテストしてもらいました。
ということで大丈夫そうなので、これで公開します。