Notion で(自分なりの)タスク・時間管理を行う方法(先送りチェックボックス編)
前回は、「実践編」の記念すべき最初の記事ということで、私なりの「スマホ用ページ」の作り方を紹介しましたが、
今回は、改めて「先送り」について、少し考えてみたいと思います。
と言っても、基本的な説明は参考文献に委ねるので、以降、前提として語っている部分がよく分からなければ、本書をお読みください。
ここで、ちょっと検討してみたいのは、「先送り」への対応にも、いくつかのパターンがあるのではないか、ということで、
場合によっては、その運用方針に応じた機能を、独自に実装できるというのも、Notion でタスクシュートを実践するメリットの一つでしょう。
また、逆に、不要な機能であれば、そもそも実装しないという選択ができる点も、シンプルさを重視する人にとっては、かなり重要かもしれません。
例えば、以下のようなケースでは、あなたなら、どう対応しますか?
ケース1
朝、起きたら、ルーチンから「今日のタスク」の多くが自動生成されており、そこへ、新たに「今日やりたいこと」を追加していくと、
終了予定時刻が、明日の「2:40」になってしまいました!
この場合は、まだ「今日のプラン」を立てている段階なので、いくつかのタスクを「削除」したり、明日以降に「移動」したりすることで、
終了予定時刻を調整しておくのが、おそらく、一般的ですかね?
ケース2
お昼過ぎくらいまでは、順調に今日のタスクを消化できていて、このままいけば、終了予定時刻は「23:30」頃になると思われていましたが、
いくつかの割り込みタスクが発生し、作業が落ち着いた時点で、改めて、終了予定時刻を確認してみると、なんと「2:40」になっています!
さて、あなたは、この場合でも、ケース1と同様の対応を行いたいと思うでしょうか?
もちろん、それも一つの方法で、実際、私も少し前まではそのように運用していたのですが、ここで、もう少し考えを進めてみましょう。
仮に、残りのタスクの中には、ルーチンから生成されたタスクと、朝に「今日やりたいこと」として追加したタスクの、二種類があったとして、
それらの「先送り」の仕方は、全く同じではないかもしれませんし、
いわゆる「1分着手」で、少しでも手をつけて、今日のところは切り上げても良いと思えるようなタスクばかりではなく、
極端な例で言えば、動画配信サイトで観たいアニメがあり、見積時間「24分」のタスクとして残っていたとしたら、1分だけ見るでしょうか?
その上、明日は明日で、違うアニメを観る予定が入っているとすれば、
来週、2話分観ればいいと考えるか、別に、1週遅れで観ていっても一向に構わないと思えるかどうかによっても、対応は変わってくるでしょう。
では、私ならどうするのかと申しますと、それが、今回の記事で紹介したい内容なのですが、
私は、基本的に、特にルーチンから生成されたタスクに関しては、削除したり、他の日に移動したりはせず、
記録のためにも、そのまま「その日のタスク」として、残しておきます。
まぁ、ルーチンでなくても、本当に実行したいタスクなら、改めて作成するはずだから大丈夫!という考えなのですが、
しかし、先送りすると決めたタスクに関しては、その時点から、終了予定時刻の「計算には含めない」ようにしたいため、
新たに「先送りチェックボックス」の実装が、必要となってきたのです!
それでは、前置きが長くなりましたが、その具体的な仕組みと使い方を説明していきましょう。
終了予定日時の算出方法を改良する
まず、終了予定日時の算出方法から振り返りたいと思うのですが、良い機会なので、ついでに、ちょっとした改良を行なっていきます。
以前の記事で紹介した際には、進行中のタスクがある場合には、現在時刻ではなく、そのタスクの「開始時刻」に、
単純に、以降のタスクの「見積値」を全て足し合わせて、終了予定日時を導出していましたね。
ただ、よく考えると、それは、完全に「見積時間」に依存した計算になっていて、もちろん、未着手のタスクだけなら、それで良いのですが、
進行中のタスクについては、もし、実行している時間が「見積時間」を超えたなら、そんな甘い「見積値」を計算に含めるべきではありません。
すなわち、本当は、進行中のタスクがあるかどうかだけでなく、以下のような場合分けが必要だったのです!
進行中のタスクがない場合:現在時刻に、未着手のタスクの「見積値」を全て足し合わせる。
進行中のタスクがあり、現在時刻が、そのタスクの「終了予定時刻」
に、まだ達していない場合:そのタスクの「開始時刻」に、未着手と進行中のタスクの「見積値」を全て足し合わせる。
を、すでに過ぎている場合:現在時刻に、未着手のタスクの「見積値」を全て足し合わせる。
つまり、今までは、2.−2. のパターンが考慮されていませんでしたが、
これで、進行中のタスクの「終了予定時刻」を過ぎたら、早く切り上げないと、「終了予定日時」もどんどん遅くなっていくことになります。
それを踏まえた数式は、例えば、以下のようになるでしょう。
lets(
wip, prop("タスクリスト").find(equal(current.prop("ステータス"), "進行中")),
add, sum(prop("タスクリスト").filter(contains(current.prop("終了予定日時"), "計算に含める")).map(current.prop("見積値"))),
if(
wip and parseDate(wip.prop("終了予定時刻")) > now(),
dateAdd(wip.prop("開始日時"), add, "minutes"),
dateAdd(now(), add - wip.prop("見積値"), "minutes")
)
)ここで、未着手のタスクの「見積値」を全て足し合わせるという部分は、
未着手と進行中のタスクの「見積値」を全て足し合わせたもの(add)から、進行中のタスクの「見積値」を引くことで算出しています。
ちなみに、前回の記事でも似たような説明をしましたが、もし「終了予定日時」プロパティを運用していなくても、
次のように書けば、各タスクのステータスを参照して、必要な「見積値」の合計を導出することが可能です。
sum(prop("タスクリスト").filter(includes(["未着手", "進行中"], current.prop("ステータス"))).map(current.prop("見積値")))未着手のタスクの「見積値」を全て足し合わせる時には、「includes()」の代わりに、単に「equal()」を使って条件を指定するのも良いでしょう。
先送りチェックボックスを追加する
それでは、いよいよ「先送りチェックボックス」を導入しましょう!
と言っても、とりあえずは、「タスクリスト」データベースに、新しい「チェックボックス」プロパティを配置しておくだけです。
例えば、スマホ上での表示は、以下のようにしておいて、

何らかの理由で、仕事 B を先送りすることにしたなら、次のように、チェックボックスをオンにします。

ここまでは、簡単ですね。
仮に、チェックボックスをオンにする前の「終了予定時刻」が「1:30」だったとしたら、見積時間「120分」のタスクを先送りすることにしたので、
終了予定が「23:30」になって、仕事 B を除けば、他のタスクは全て今日中に終わらせられる、ということになります。
もちろん、プランを立てている時点で、先送りすることが明らかなのであれば、タスク自体を「今日のリスト」から消しても構わないのですが、
特に、ルーチンから生成されたタスクなどの場合、記録のためにも、リストに(未着手のまま)残しておきたいということもあるでしょうし、
チェックボックスで扱う利点は、一度、オンにしたとしても、もし、状況が変わったりすれば、簡単にオフに戻せるということです。
終了予定日時の算出方法を更新する
次に、終了予定日時を算出する際、チェックボックスがオンになっているタスクを「計算に含めない」ようにする方法を考えましょう。
対象タスクの「終了予定日時」プロパティから、「計算に含める」をどうにかして削除するのも良いかもしれませんが、無駄に複雑になりそうなので、
ここでは、より簡潔で、汎用的な方法を紹介します。
すなわち、当然ながら、終了予定日時を算出する際、先送りすることにしたタスクの「見積値」は、加算しなければ良いのです。
以下のように、少し「filter()」の条件を厳しくするだけですね。
lets(
wip, prop("タスクリスト").find(current.prop("ステータス") == "進行中"),
add, sum(prop("タスクリスト").filter(contains(current.prop("終了予定日時"), "計算に含める") and not(current.prop("先送り"))).map(current.prop("見積値"))),
if(
wip and parseDate(wip.prop("終了予定時刻")) > now(),
dateAdd(wip.prop("開始日時"), add, "minutes"),
dateAdd(now(), add - wip.prop("見積値"), "minutes")
)
)あるいは、「dateAdd()」で加算する値から、先送りするタスクの見積値の合計値(sub)を引いておくという方法でも構いません。
lets(
wip, prop("タスクリスト").find(current.prop("ステータス") == "進行中"),
add, sum(prop("タスクリスト").filter(contains(current.prop("終了予定日時"), "計算に含める")).map(current.prop("見積値"))),
sub, sum(prop("タスクリスト").filter(current.prop("先送り")).map(current.prop("見積値"))),
if(
wip and parseDate(wip.prop("終了予定時刻")) > now(),
dateAdd(wip.prop("開始日時"), add - sub, "minutes"),
dateAdd(now(), add - wip.prop("見積値") - sub, "minutes")
)
)運用によっても、微妙に変わってくるかと思うので、自分の場合は、どのような計算手順の方が効率が良いか、折に触れて考えていきましょう。
先送りリストを作成する
最後に、もし必要なら、過去に「先送りチェックボックス」をオンにしたタスクを確認しやすいよう、
専用のテーブルも設置しておくと便利かもしれないので、簡単に、紹介しておきたいと思います。
例えば、「プロジェクトリスト」の下に作成すると、次のようになりました。

表示しておくプロパティなどは自由ですが、少なくとも、実行する予定だった日時や、見積時間などが分かると良いでしょうか。
その上で、今回、このリストのために「タスクリスト」データベースに追加してみたものとしては、「今日に移動」ボタンがあります。
単に、実行日を「今日」に更新し、チェックボックスをオフに戻すボタンですね。

また、「終了予定日時」プロパティに「計算に含める」や「完了」を追加しておけば、「リストを更新」ボタンを押す手間も省けます。
(適当に流してもらっても構いませんが、「完了」ラベルなどについては、もし気になるようであれば、前回の記事をご確認ください。)
ちなみに、この「先送リスト」のフィルター設定では、
先送りチェックボックスがオンになっているものに絞り込むだけでなく、「実行日」が「今日より前」になるようにしておかないと、
先送りチェックボックスがオンになっている「今日のタスク」も表示されてしまうので、注意が必要です。

まぁ、今日のタスクを「今日に移動」しても(時刻まで「実行日」に含まれていた場合、日付だけになってしまう程度で)大きな問題はありませんが。
しかし、「今日に移動」ボタンを押した場合、「実行日」プロパティは日付だけのものに更新されてしまうという点は、覚えておきましょう。
一応、「実行日」と「開始予定時刻」プロパティを分けて管理している利点は、実を言うと、その辺りにあったりもするのですが、
いずれ「実行日」プロパティに「開始終了時刻」まで含まれていることが必要となる時もくるかもしれないので(くる予定なので)要注目です。
ともあれ、このリストも、「先送り日数」を計算して表示する「数式」プロパティを追加してみたり、
高度なフィルターで、1週間以上前のタスクは表示しないようにするなど、好みに合わせて、どんどんカスタマイズしていってください。
まとめ
というわけで、今回は「実践編」の第二弾として、「先送りチェックボックス」なるものを導入することにより、
今日のリストに先送りするタスクを残したまま、実行するタスクの見積時間だけを反映して、適切な「終了予定日時」を導出する方法を紹介しました。
これで、チェックボックスをオンオフさせながら、終了予定日時を確認しつつ、今日のプランを検討していくことができます。
やっていること自体は、割と単純とも言えるのですが、特に、タスクを詰め込みがちな人には、オススメの機能ですね。
今後も、この調子で、自分なりのカスタマイズを進めていくとしましょう。
ではまた。
