見出し画像

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

まぁ、私は、あらゆる「見積」を信用しないタイプの人間で、その場その場で、なんにせよ臨機応変に対応することを前提とし、
もとより、現実思考で、「先送り」すら、大して気にしていないくらいなのですが、そういった語りは、またの機会にするとしましょう。

今後の改良予定

さて、もし、ここまで読んでくださっている方がいたなら、上の「終了予定日時」の算出方法の問題点に、お気付きでしょうか?

実は、ルーチンデータベースで「今日のプラン」を表示する際の「フィルター」設定を、そのまま数式にしてしまうと、
開始したタスクは、その瞬間に、「見積」の計算から外れてしまうのです。

つまり、「進行中」のタスクがあれば、そのタスクの「見積」というか「残り時間」は、考慮されず、
そのタスクを「今すぐ終了した」場合の「終了予定日時」が表示される、ということになります。

また、セクションごとの情報は、「セクション」ビューで見られますし、テーブルの下に合計値を表示したりはできますが、
その日の、全体の「終了予定日時」などは、計算用のデータベースを別に作って、トップページに配置しておくなどすると良いかもしれません。

というわけで、次回は、その辺の拡張ができたら、「セクションページ」と共に、紹介したいと思います。

ではまた。

いいなと思ったら応援しよう!