はじめに
Notion Tips の第191回目は、昨日まで解説してきたテンプレートにスプリントの自動設定のオートメーションを組み込んでみます。この解説は 日付を設定したらスプリントを自動設定するオートメーション: Notion Tips (164) - hkob’s blogでしているものです。これを執筆したのが、12/4 でテンプレートを提出した後でした。いつか機会があったら、今回の Set sprint も同梱したテンプレートを配布したいと思っています。ちなみに、私のタスク管理では Ruby スクリプトでスプリント名の修正なども実施していますが、こちらは Notion の機能だけで実現するように作り込んでみます。とりあえず、今のデータベースを複製してタイトルだけ修正してみました。
Map データベースの作成
テンプレートの一番下の Databases の中に Map データベースをフルページで作成します。今回、他のページのものと間違えてリレーションしないように「(new)」という接尾子をつけておきます。
とりあえず、「all」という一つのページを作成しておきます。
Sprints に Map へのリレーションを追加
Sprints から 1対他のリレーションを貼りたいので、Sprints 側から先ほどの Map へのリレーションを作成します。プロパティ名は (new) は付けなくともいいでしょう。制限を1ページに設定しておきます。
スプリントの日付調整
配布状態の Current sprint にはテンプレート作成時の日付が入っているので、今週に修正しておきます。スプリントの日付はそのままでは修正できないのですが、Sprints データベースを表示し、行を選択した後で、上の Dates をクリックすると日付を変更することができました。私の場合は月曜始まりにしているので、12/30 から 1/5 までに設定しました。
この状態で Sprint の自動更新を設定しておきます。データベースの設定から「カスタマイズ」を選び「スプリントの自動化」をオンにします。次のスプリントは 1/6 に始まると書いてあるので問題なさそうです。
スプリント自動更新時には自動的に次のスプリントの日付も設定されます。今回は、設定されていないので手動で付けておきます。
Sprints に週番号を設置
Tasks と同様に Sprints にも week_id を設置します。数式は以下の通りです。
prop("Dates").formatDate("GGGG-WW")
Map への自動リンク設定をするオートメーションを追加 (Sprints)
Sprint name は先ほど記述した week_id に設定します。私のタスク管理ではスクリプトが自動で修正しますが、今回は手動にします。ただし、その設定時に先ほどの Map への自動リンクを設定するオートメーションを設定しておきます。Sprint name
を編集した時に Map
に all
をセットします。
Sprints の名前を week_id からコピー
オートメーションを設定後に Sprints の名前を Sprint name のところにコピーします。
ここで、Map データベースを表示してみます。先ほどのオートメーションにより、2025-01 と 2025-02 の Sprints が自動的に設定されていることがわかります。これは新しいスプリントが設定されたら翌週の名前を毎回設定してください。Map が追加されないと、この後のスプリント自動設定がされないためです。
Tasks に Map へのリレーションを追加(片方向)
今度は Tasks に Map へのリレーションを追加します。Map から逆参照すると大変なことになるので、Tasks からの一方向リンクとします。Map には all しかいないので、こちらも制限は 1 ページで十分です。
Map への自動リンク設定をするオートメーションを追加 (Tasks)
Sprints と同様に Tasks の方にも Map へのリンクが必要です。今回は Tasks が作成された時に自動的に Map へのリンクが追加されるようにします。
日付設定時に Sprints を設定するオートメーション
いよいよ今回の目的の Set sprint オートメーションです。Sprints が設定されていないタスクに対して、日付が設定された時にオートメーションを発動させます。
数式の部分は以下のようになります。これをペーストしてもうまく変数に合わないので、上の式を見ながら自分でタイプした方がいいです。
lets( week_id, prop("トリガーページ").prop("week_id"), prop("トリガーページ").prop("Map").first().prop("Sprints").filter(current.prop("week_id") == week_id) )
動作確認
まず動作確認のために、Someday にタスクを一つ追加してみます。
ページを作成しただけなのですが、Map には all が設定されていることがわかります。
ここで、Duo の部分に今日の日付を設定してみました。日付から week_id が設定され、それにマッチする Sprint が設定されていることがわかります。
Mention to date に Sprint 設定を追加
日付を自分で設定した場合には、Sprint が設定されます。しかし、今回のテンプレートの肝である Mention to date で設定した場合、オートメーションからさらにオートメーションを追加で呼び出すことができません。このため、Mention to date にも Sprint 設定と同じ処理を追加しました。
ただし、week_id は日付設定前の値になってしまっているので、数式内で計算します。
数式の部分は以下のようになります。これをペーストしてもうまく変数に合わないので、上の式を見ながら自分でタイプした方がいいです。
lets( week_id, prop("トリガーページ").prop("updateDatePreview").formatDate("GGGG-WW"), prop("トリガーページ").prop("Map").first().prop("Sprints").filter(current.prop("week_id") == week_id) )
すでにスプリントが設定されているかどうかは判定していないので、現在の Sprint を上書きするはずです。次の月曜日を指定して来週の Sprint に変わるかを確認してみます。ちなみに次の月曜日であれは @ne m
と書くだけでよいです。やはり日付メンションは楽ですね。
正しく、Sprint が再設定されています。
Work now ボタンを追加
テンプレートでは、Someday タスクを Now working にドラッグすることで、スプリントの設定などをフィルタで設定していました。これをボタンで設定します。まず、Someday のビューにのみ、Work now というボタンを用意しました。
Work now の中身は以下のようになっています。
Sprint これまでとほぼ同様ですが、week_id はトリガーされた時間で作成しています。
let( week_id, prop("トリガーされた時間").formatDate("GGGG-WW"), prop("このページ").prop("Map").first().prop("Sprints").filter(current.prop("week_id") == week_id) )
Due は日付範囲として 1 時間の幅を持った時間に設定しました。
let(sd, prop("トリガーされた時間"), sd.dateRange(sd.dateAdd(1, "hours")) )
ここで、先ほどの Someday task で Work now を押したところ、ちゃんと Now working に移動しました。
おわりに
Notion Tips の最終回として、配布したテンプレートに Sprint 自動設定オートメーションを追加してみました。リレーションやオートメーションの学習になるので、是非手を動かしてみて動作を確認してみてください。昨年の 12月1日から始まったブログ執筆も2回目の年越しを迎えました。とりあえず、Notion Tips に関しては今回で終了としたいと思います。明日からはまた新しいネタで執筆が続けられればと思っています。これまで Notion Tips をご覧いただき、本当にありがとうございました。