タスク開始終了時刻自動記録オートメーションの改修: Notion Tips (131)

はじめに

Notion Tips の第131回目は私が毎日利用しているタスクの時間管理 Automation を解説します。以前は、開始時間と終了時間を別に管理していましたが、今回の Automation のアップデートで時間範囲が設定できるようになりました。今日はまず実際に利用する時間記録の部分の Automation を紹介し、明日既存データの修正 Automation を解説します。既存データが全部日付範囲に変更できたら、終了時刻プロパティを削除します。

変更前の Automation

変更前の Automation については、以下の記事で解説しています。

hkob.hatenablog.com

要約すると以下のようになります。

  • Set start time Automation
    • Status が To Do の状態で Next Action チェックボックスがチェックされた時
      • Finish date をクリア
      • Start date を「今」に設定
      • Status を「In Progress」に設定
  • Set end time Automation
    • Status が In Progress の状態で Next Action チェックボックスのチェックが外された時
      • Finish date を「今」に設定
      • Status を「Done」に設定

さらに、作業中は Finish time が確定しないので、以下のような数式で _finishTime という数式を用意していました。Finish date がある場合、もともと日付範囲がある場合、終了時刻が設定されていない場合に適切な終了時刻が設定されるようにしていたものです。

lets(
    sd, prop("Start date"),
    fd, prop("Finish date"),
    hhmm, sd.formatDate("HHmm"),
    ifs(
        fd.empty().not(), fd,
      sd.empty() or hhmm == "0000", sd,
      sd.dateEnd() == sd.dateStart(), now(),
      sd.dateEnd()
    )
)

これらの問題は Automation で終了時刻が設定できないことに起因していました。

  • カレンダーから設定すると日付範囲になる
  • Automation では日付範囲を設定できないので、開始時刻と終了時刻は別プロパティにする必要がある
  • タスク実行中は終了時刻がないので、仕方なく現在時刻を設定しておく

Notion のタイムラインビューでは、開始時刻・終了時刻が別プロパティでも表示が可能だったため、開始時刻は Start date、終了時刻は上の数式で作成した _finishTime を使っていました。ただし、後者は Formula なので日付を変更することはできませんでした。

Notion Calendar でも日付範囲を設定したいため、NotionCalendarDate という Formula を以下のように設定していました。

prop("Start date").dateRange(prop("_finishTime"))

Notion Calendar にはカレンダー設定のための「Tasks」のカレンダーだけでなく、この Formula を使った表示専用の CalendarViewOnly というビューを別途用意する必要がありました。

Notion Calendar

Automation の制限のために、これだけ余計なプロパティがそれぞれのタスクに設定されてしまっていたため、データベースが非常に重くなっていました。

Automation with Formula による改修

そこで今回の Formula 付きの Automation の登場です。まず、Set start time は以下のようになっています。これまで Start date の部分が「今」になっていました。この部分が数式になっています。

Set start time Automation

数式は以下のようになっています。トリガーに関する値やページの作成者をプロパティとして、ここから情報を取得することができます。特にトリガーページからアクセスすると、このページ内のプロパティには全てアクセスできます。

Start date の値を設定する Formula

数式は以下のように設定しました。Formula と違ってコピー & ペーストでプロパティ名が展開されないようなので、手動で prop("") の表記を追加しています。数式で dateRange が設定できるので、すでにカレンダーで終了時刻が設定されている場合には、開始時刻だけを差し替えることができています。これは嬉しいですね。

lets(start_date, prop("トリガーページ").prop("Start date"),
    end_date, start_date.empty() ? prop("トリガーされた値") : start_date.dateEnd(),
    prop("トリガーされた時間").dateRange(end_date))

同様に Set end time は以下のようになります。こちらも Start date の部分が数式になっています。

Set end time Automation

数式は以下のようになっています。こちらは簡単ですね。

Start date の値を設定する Formula

終了時刻をトリガーされた時間にするだけの簡単なものです。

prop("トリガーページ").prop("Start date").dateRange(prop("トリガーされた時間"))

動作確認

実際に動作の様子を X に動画でポストしています。うまく動いているようです。

おわりに

今回は、チェックボックスのオン・オフでタスクの開始・終了時刻を記録するオートメーションの改修について説明しました。現在はまだ Start date というプロパティ名ですが、全てのデータの正規化が完了したら単なる Date という名前に戻そうと思います。明日はその正規化のためのオートメーションを解説します。

Notion Tips ブログまとめ | Notion