Notion で(自分なりの)タスク・時間管理を行う「新たな」方法(セクションリスト編)
一応、前回までで、この、新しいシステム「RoutineGarden」の概要については、一通り、紹介することができたので、
今回からは、それぞれの記事で、何かテーマを絞り、もう少しだけ詳しく、説明を加えていきたいと思います。
とは言え、まずは、今まで、簡単にしか触れてこなかった、「セクションデータベース」の仕様について、改めて、補足しておいた方が良いでしょう。
ちなみに、最近、記事が長くなりがちなため、ここからは、なるべく端的にまとめていく予定です。
トピックごとに分けて書くというのとも関係しますが、それは、タスクの細分化というより、順算思考で、情報を積み上げていくイメージですね。
それでは、早速、始めていきましょう。
現在のセクションの判定
ルーチンデータベースが、主に「今日のプラン」と「全ルーチン」を表示するビューに分かれているのと同様に、
セクションデータベースにも、「現在のセクション」と「全セクション」のビューがあります。
そして、それらのビューの関係性も、似たようなもので、「ルーチンリスト」に「フィルター」をかけて「今日のプラン」を表示していたように、
セクションデータベースでも、「現在のセクション」だけを絞り込んで、トップページに表示させているわけです。
ここで、「チェックあり」のものを表示するよう設定されている「現在」という名前の「数式」プロパティの中身は、次のようになっています。
まぁ、あえて解説するまでもないくらい、単純な仕組みではありますが、念の為、関数全体を書いておくと、以下の通りです。
and(
prop("日時").dateStart() < now(),
prop("日時").dateEnd() > now()
)
あるいは、こちらを先に説明した方が、「今日のプラン」の表示の仕方も、分かりやすかったかもしれませんね。
ちなみに、各セクションの「日時」プロパティは、「開始」と「終了」プロパティの(時分の「時」の)値から、次のように算出してあります。
dateRange(
dateAdd(today(), prop("開始"), "hours"),
dateAdd(today(), prop("終了"), "hours")
)
終了予定日時の算出
次に、セクションデータベースの、その他のプロパティについても、簡単に紹介しておきましょう。
特に、セクションごとの「終了予定日時」などは、タスクシュート的にも、かなり重要な要素となってきますが、
それには、まず、計算に用いられる「見積」プロパティの説明が必要です。
ここで、「今日」というのは、「今日のプラン」に含まれるルーチン(タスク)のリストで、
次のように、タスクの見積もり値を、セクションごとに合計しています。
sum(map(prop("今日"), current.prop("見積")))
数式の書き方さえ分かっていれば、実に、簡単ですね。
むしろ、問題は、その「今日のプラン」に含まれるルーチンのリストを、どうやって取得するのか、という部分でしょう。
それには、「全ルーチン」の中から「今日のプラン」に該当するものを、セクションごとに、全て取得してくる必要があります。
どのように実現すればいいか、分かるでしょうか?
とりあえず、ルーチンデータベースの「セクション」プロパティの設定に応じて、セクションごとの「ルーチンリスト」を得るには、
単に、以下のようにして、ルーチンデータベースとセクションデータベースを、「リレーション」プロパティで、紐付けるだけです。
というか、そもそも、ルーチンデータベース側には、すでにセクションデータベースの「リレーション」プロパティがあるはずなので、
その設定で、セクションデータベース側にも「ルーチンリスト」を表示させる(というオプションを有効にする)だけで良いとも言えます。
今更、「リレーション」プロパティの説明は、割愛させてもらいますが、
その、セクションごとの「ルーチンリスト」から、「今日」のタスクを絞り込むには、例えば、以下のような数式を書いてください。
関数全体は、以下の通りです。
prop("ルーチンリスト").filter(
and(
current.prop("今日"),
or(
empty(current.prop("実行日時")),
current.prop("実行日時") < today()
)
)
)
言われてみれば、当たり前のことですが、
これは、ルーチンデータベースで「今日のプラン」を表示する際の「フィルター」設定を、そのまま数式にしたような感じですね。
さて、ここまで分かれば、セクションごとの「見積」の出し方については、大丈夫でしょうか?
そして、セクションごとの「終了予定日時」の算出においては、その「見積」を、以下のような数式で利用しています。
改めまして、関数全体は、以下の通りです。
if(
prop("現在"),
dateAdd(now(), prop("見積"), "minutes"),
dateAdd(prop("日時").dateStart(), prop("見積"), "minutes")
)
現在のセクションに対しては、現在日時に「見積」を足し、
他のセクションに対しては、セクションの開始日時に「見積」を足すという、割とシンプルな仕様と言えるでしょう。
ちなみに、「タスク数」プロパティでは、「今日」プロパティに含まれるルーチン(タスク)の数を数えていたりもしています。
また、「超過」プロパティというものも用意していて、
こちらは、以下のような数式で、セクションごとの「終了日時」と「終了予定日時」とを比較することにより、
そのセクションに、どのくらい余裕があるか、あるいは、タスクを詰め込み過ぎているかどうかが、簡単に分かるようになっているわけですね。
if(
prop("日時").dateEnd() < now(),
prop("見積"),
dateBetween(prop("終了予定日時"), prop("日時").dateEnd(), "minutes")
)
まぁ、私は、あらゆる「見積」を信用しないタイプの人間で、その場その場で、なんにせよ臨機応変に対応することを前提とし、
もとより、現実思考で、「先送り」すら、大して気にしていないくらいなのですが、そういった語りは、またの機会にするとしましょう。
今後の改良予定
さて、もし、ここまで読んでくださっている方がいたなら、上の「終了予定日時」の算出方法の問題点に、お気付きでしょうか?
実は、ルーチンデータベースで「今日のプラン」を表示する際の「フィルター」設定を、そのまま数式にしてしまうと、
開始したタスクは、その瞬間に、「見積」の計算から外れてしまうのです。
つまり、「進行中」のタスクがあれば、そのタスクの「見積」というか「残り時間」は、考慮されず、
そのタスクを「今すぐ終了した」場合の「終了予定日時」が表示される、ということになります。
また、セクションごとの情報は、「セクション」ビューで見られますし、テーブルの下に合計値を表示したりはできますが、
その日の、全体の「終了予定日時」などは、計算用のデータベースを別に作って、トップページに配置しておくなどすると良いかもしれません。
というわけで、次回は、その辺の拡張ができたら、「セクションページ」と共に、紹介したいと思います。
ではまた。