📘 hkob-astro-notion-blog

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

親タスクのステータスと開始終了時刻を自動設定するオートメーション

1. はじめに

私は使っていないのですが、サブアイテム機能を利用したタスク管理をされている方が多いようです。これまでに多く質問されるのが、親タスクのステータスは子タスクの状況で反映してほしいというものでした。抱えている子タスクが全て完了したら、親タスクもそれを受けて完了して欲しいというようなものです。また、子タスクの完了時刻が設定されたら、親タスクの完了時間も設定されて欲しいという要望もありました。

この度オートメーション機能が提供されましたので、早速テンプレートを作ってみました。フリープランの人は作成や編集はできませんが、テンプレートにあるオートメーションは利用することが可能です。このリンクからテンプレートを取得してみてください。

https://hkob.notion.site/status-update-57b857ebdc854f79a2048ef455924679?pvs=4

2. 想定仕様

作成するテンプレートの仕様は以下のようになっています。

  1. 子タスクが「In progress」になったとき
    1. そのタスクの開始時間を「今」に設定します。
    2. このテーブルに存在するタスクのうち、子タスクのうち一つでも開始されているのに開始時間が設定されていないものを抽出します。抽出されたタスクのステータスを In progress にするとともに、開始時間を「今」に設定します。
  2. 子タスクが「Done」になったとき
    1. そのタスクの終了時間を「今」に設定します。
    2. このテーブルに存在するタスクのうち、子タスクが全て終了されているのに終了時間が設定されていないものを抽出します。抽出されたタスクのステータスを Done にするとともに、終了時間を「今」に設定します。

3. データベースの構成

オートメーションの設定に入る前に上の仕様を実現するためのデータベースを作成します。プロパティは以下のようになっています。

  1. 開始時刻: Date property
  2. 終了時刻: Date property
  3. %start: Rollup property
  4. %done: Rollup propety
  5. start?: Formula property
  6. complete?: Formula property
  7. サブアイテム: Relation property
  8. 親アイテム: Relation property
3.1 %start の設定

子タスクのうち一つでも開始されている」を測定するために、以下のようにサブアイテムの Status の「In progress」の割合を抽出します。

3.2 %done の設定

同様に「子タスクが全て終了されている」を測定するために、以下のようにサブアイテムの Status の「Done」の割合を抽出します。

3.3 start? の設定

子タスクのうち一つでも開始されている」をチェックボックスで判定するために、%startの値が空でなく、かつ0より大きい場合にチェックをつけたいです。幸い empty(0) も true が変えるので、%start が空でないが条件となります。

not empty(prop("%start"))

3.4 complete? の設定

同様に「子タスクが全て終了されている」をチェックボックスで判定するために、%done が1の場合にチェックをつけたいです。これは簡単ですね。

prop("%done") == 1

これで準備は完了です。

4. オートメーションの設定

4.1 start オートメーション

仕様の一つ目である start オートメーションを実装します。新規オートメーションを選び、名前を start とします。対象となるデータベースはデフォルトで選ばれているはずです。その後、「トリガーを追加」にてプロパティの編集欄の「Status」で「In progress」を選択します。 設定をすると右図のようになります。

次に「アクションを追加」をクリックします。まず、対象となるページの開始時刻を設定したいので、プロパティを編集の「開始時刻」を「今」に設定します。

次に親の設定を行います。実行の隣の「+」で二つ目のアクションとして、「ページを編集」を選びます。取り扱うデータベースとして status update のデータベースを選択します。

このまま設定すると status update データベースの全てのデータが変更されてしまうので、開始時刻が未入力でかつ start? にチェックが入ったページだけを抽出します。その後、右の図のように抽出されたページの Status を In progress、開始時刻を「今」に設定します。これで start オートメーションは完成です。

4.2 end オートメーション

仕様の二つ目の end オートメーションも同様に実装します。新規オートメーションを選び、名前を end とします。Status を Complete に設定したらそのページの終了時刻を「今」に設定するところまでを作成するとこのようになります。

親タスクの設定のために、ページを編集処理を追加します。左図のようにフィルタリングしたページに対して、右図のように終了時刻と Status の設定を行います。これで end オートメーションは完了です。

5. 動作状況

動かしている様子は X に動画をあげています。子タスクを開始すると親のタスクも開始されていることがわかります。ただ、オートメーションが変更した In progress には発火しないので、親の親は開始されていないことに注意してください。別のタスクが In progress になるか、再度タスクを In progress に変更することで親の親も In progress になります。完了についても同様です。

数字だけだとわかりにくいので、タイムラインビューのものも用意しました。子タスクが完了すると親タスクのタイムラインも伸びているがわかると思います。

6. おわりに

親のステータスや時刻の設定は要望も多くもらっていたので、Notion の機能だけで実現できたのは嬉しいですね。3階層だと伝搬がすぐには伝わりませんが、それでも有用なのではないかと思います。フリープランの方でもオートメーションをそのまま利用することは可能なので、是非試してみてください。