📘 hkob-astro-notion-blog

これまではてなブログにて情報発信をしていましたが、令和5年3月22日より、こちらでの情報発信を始めました。2019年以前の古い記事は過去の Middleman 時代のものなので、情報が古いです。記録のためだけに残しています。

Notion ボタンだけで実現する GTD テンプレートの作成

💡
この記事の執筆後、開始・終了ボタンを統合する記事を書いています。詳しくはこちらをご覧ください
GTDテンプレートにおける開始・終了ボタンの統合

1. はじめに

今月、NotionTimeRecorder という GTD をサポートする Ruby/Tk アプリを提供しました。

https://hkob.notion.site/NotionTimeRecorder-GTD-template-8c4b5813dbbe4774a517314c9b20bafa

このアプリは以下の作業がボタンクリックだけで実現できるものです。

  1. 「次のアクション」に今日のタスクを表示
    1. 「次のアクション」のタスクのボタンをクリック
      1. 開始していないタスク: 開始時間を記録、ステータスを In progress に変更
      2. すでに開始しているタスク: 終了時間を記録、ステータスを Done に変更、ボタンを無効化
  2. 日付が設定されていないタスクは「いつかやる」タスクに表示
    1. 「いつかやる」のタスクのボタンをクリック
      1. 日付を今日に設定することで「次のアクション」に移動
  3. 昨日以前の未完了タスクは「やり残したタスク」に表示
    1. 「次のアクションに戻す」をクリック
      1. 全ての未完了タスクの日付を今日に変更することで、「次のアクション」に戻す

このアプリのおかげで、タスク管理がかなり楽になりました。

しかし、先週発表されたボタン機能のおかげで、ここでやっていたことが全て Notion の機能だけで完結してしまいました。今回は、テンプレートを配布するとともにどうやって作成したかを説明します。作成したテンプレートはこちらから取得できます。

2. プロパティの追加

テンプレートはほぼそのまま使えます。問題なのは「ボタン」では日付の終了時刻を設定できないことです。そこで、図のように「Finish time (for button)」という新規プロパティを用意しました。

同様に処理をしたいタスクを指定するために Action チェックボックスを作成します。

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)")

上記のフォーミュラで実施していることは以下のとおりです。

  1. Finish time (for button) が空の時
    1. 日付が空か時間が設定されていない時
      1. 日付をそのまま返す
    2. 日付が設定されていて、終了時刻が設定されていない時
      1. 現在時刻を返す
    3. 終了時刻が設定されている時
      1. 終了時刻を返す
  2. Finish time (for button) が設定されている時
    1. 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」のボタンを設置しただけです。

Return to Next action ボタンは以下のようになります。「日付が今日より前」「ステータスが Not started か In progress」のタスクに対して、「日付を今日」「Actionをチェックなし」に設定します。タスクを実施中でやり残しになったものもあるので、Action のチェックなしを追加しています。

6. おわりに

NotionTimeRecoder アプリを起動する手間と、毎日 Reload する手間がなくなるので、かなり便利になります。特にやり残しタスクが多いと、Notion API ではレートリミットの関係でかなり待たされます。インテグレーションキーの設定や、プロパティ名の変更などに対応する必要がないので、一般の人にも使ってもらいやすいのではないかと思います。こんなところがさらに改善されるといいなというのがあったら教えてください。