→
1. はじめに
今月、NotionTimeRecorder という GTD をサポートする Ruby/Tk アプリを提供しました。
https://hkob.notion.site/NotionTimeRecorder-GTD-template-8c4b5813dbbe4774a517314c9b20bafa
このアプリは以下の作業がボタンクリックだけで実現できるものです。
-
「次のアクション」に今日のタスクを表示
-
「次のアクション」のタスクのボタンをクリック
- 開始していないタスク: 開始時間を記録、ステータスを In progress に変更
- すでに開始しているタスク: 終了時間を記録、ステータスを Done に変更、ボタンを無効化
-
「次のアクション」のタスクのボタンをクリック
-
日付が設定されていないタスクは「いつかやる」タスクに表示
-
「いつかやる」のタスクのボタンをクリック
- 日付を今日に設定することで「次のアクション」に移動
-
「いつかやる」のタスクのボタンをクリック
-
昨日以前の未完了タスクは「やり残したタスク」に表示
-
「次のアクションに戻す」をクリック
- 全ての未完了タスクの日付を今日に変更することで、「次のアクション」に戻す
-
「次のアクションに戻す」をクリック
このアプリのおかげで、タスク管理がかなり楽になりました。
しかし、先週発表されたボタン機能のおかげで、ここでやっていたことが全て Notion の機能だけで完結してしまいました。今回は、テンプレートを配布するとともにどうやって作成したかを説明します。作成したテンプレートはこちらから取得できます。
2. プロパティの追加
テンプレートはほぼそのまま使えます。問題なのは「ボタン」では日付の終了時刻を設定できないことです。そこで、図のように「Finish time (for button)」という新規プロパティを用意しました。
3. Formula の変更
タスクは Google カレンダーと同期しているため、終了時刻が設定されているタスクもあります。すなわた全ての終了時刻を上で設定したプロパティに変更するのは面倒です。そこで、これまで終了時刻を計算するために使っていた Fisnish time フォーミュラを、Finish time (for button) のプロパティ値からも取得するように変更します。
empty(prop("Finish time (for button)")) ?
(or(empty(prop("Date")), formatDate(prop("Date"), "HHmm") == "0000") ?
prop("Date") :
((end(prop("Date")) == start(prop("Date"))) ?
now() :
end(prop("Date")))) :
prop("Finish time (for button)")
上記のフォーミュラで実施していることは以下のとおりです。
-
Finish time (for button) が空の時
-
日付が空か時間が設定されていない時
- 日付をそのまま返す
-
日付が設定されていて、終了時刻が設定されていない時
- 現在時刻を返す
-
終了時刻が設定されている時
- 終了時刻を返す
-
日付が空か時間が設定されていない時
-
Finish time (for button) が設定されている時
- Finish time (for button) を返す
これでカレンダーイベントで終了時刻が設定されていても、ボタンで終了時刻を上書きできます。
4. 次のアクションの設定
次のアクションはこんな感じになりました。Action チェックボックスが一番左にあり、アクション対応のものにチェックを入れられます。Details に状況が表示されています。
- カレンダータスクはカレンダーの終了時刻が使われます。
- 時間が設定されていないタスクは Not started と表示されます。
- Start action で開始したタスクは Action チェックがついたままになっています。終了時刻が設定されていないので、現在時刻が終了時刻として計算されるので、現在のタスクにかかっている時間を見ることができます。
NotionTimeRecorder の機能は、上の「Start action」と「End action」により代替されました。Start action では「日付が今日と一致」「Action にチェックがついている」タスクに対して、「ステータスをIn progress」、「日付を今」、「Finished time (for button) を空」に設定します。このとき、Action は変更しないので、そのまま End action で使うことができます。
一方、End action は以下のようになります。「日付が今日と一致」、「ステータスが In progress に一致」「Action にチェックがついている」タスクに対して、「ステータスをDone」「Finish time (for button) を今」「Action をチェックなし」に設定します。
5. いつかやるタスクの設定
いつかやるタスクはこんな感じになります。こちらも Action チェックボックスを左に配置しました。こちらも Next aciton に移動したいものにチェックを入れて、Move to Next action ボタンをクリックします。
Move to Next action は以下のようになります。こちらは「日付が未入力」「Action にチェックがついている」タスクに対して、「日付を今日」「Action をチェックなし」に変更します。移動したタスクをすぐに開始するかどうかは微妙なので、チェックは外すようにしています。
5. やり残しタスクの設定
Return to Next action ボタンは以下のようになります。「日付が今日より前」「ステータスが Not started か In progress」のタスクに対して、「日付を今日」「Actionをチェックなし」に設定します。タスクを実施中でやり残しになったものもあるので、Action のチェックなしを追加しています。
6. おわりに
NotionTimeRecoder アプリを起動する手間と、毎日 Reload する手間がなくなるので、かなり便利になります。特にやり残しタスクが多いと、Notion API ではレートリミットの関係でかなり待たされます。インテグレーションキーの設定や、プロパティ名の変更などに対応する必要がないので、一般の人にも使ってもらいやすいのではないかと思います。こんなところがさらに改善されるといいなというのがあったら教えてください。