📘 hkob-astro-notion-blog

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

GTDテンプレートのスプリント移行(1)

1. はじめに

5/31 にタスク管理機能の一部であるスプリント機能が公開されました。これは新しいプロパティではなく、データベースのリレーションの拡張になります。
これまで、月データベースを用意して、リレーションを個別に貼っていた人も多いと思います。自動的に月データベースへのリレーションを張るためには、ちょっとした工夫が必要でした。例えば、月ページにその月のタスク一覧を Linked database で準備し、そこで新規タスクを作成するような仕組みを作っていました(フィルタ設定したプロパティが自動設定される仕組みを使っています)。この場合だとスプリントを月に設定することで、余計な処理をしなくてよさそうです。月が終わったら、「スプリントを終了」として終わらなかったタスクを次の月に自動的に移動してくれます。

私の場合は、 Notion ボタンだけで実現する GTD テンプレートの作成 にて日ごとのタスク管理を行なっています。このタスク管理では、その日に繋がっているタスクを「次のアクション」という形で表示しています。ただし、次のアクションで完了しなかったタスクは「昨日以前のやり直しタスク」に移動してしまいます。このため、これらのタスクを「次にアクション」に戻す仕組みをボタンで実現しています。

今回、このタスク管理をスプリントに移行することを考えます。実施前の予定設計はこんな感じです。実装しながら中身を変更していきます。

1️⃣
次のアクション
  • 現在: 今日の日付のタスクをフィルタで表示
  • スプリント: 現在のスプリントを表示
2️⃣
いつかやる
  • 現在: 日付なしタスクをフィルタで表示
  • スプリント: 変更なし
  • 備考: Feature スプリントに入れることも考えましたが、「音声でタスク登録」などで Feature スプリントをわざわざ取得するのも面倒なので辞めました。
3️⃣
カレンダータスク
  • 現在: イベントの日付をタスクの日付に設定、直近1週間のものを閲覧用に表示
  • スプリント: イベントの日付をタスクの日付に設定、直近1週間のものを閲覧用に表示、一日一回、明日のタスクを「Next スプリント」に自動設定するスクリプトを設定
  • 備考: 明日のタスクが「Next スプリント」に入っているので、翌日スプリントを終了して次のスプリントに移動すると自動的にその日のタスクがスプリントに現れてきます。
4️⃣
やり残しタスクの処置
  • 現在: 昨日以前のタスクが「やり残しタスク」に移動してしまいます。そこで、「次のアクションに戻す」ボタンで、タスクの日付を今日の日付に付けなおします。
  • スプリント: スプリントを終了すると、未完了タスクは自動的に次のスプリントに移動します。ここがメリット。
5️⃣
いつかやるタスク → 次のアクションへの移動
  • 現在: 日付なしタスクに今日の日付をつける
  • スプリント: 現在のスプリントのリレーションをつける。これをボタンか API で対応したい。または専用ページを作成する。
6️⃣
タスク開始・終了管理
  • 現在: 「タスク開始・終了」ボタン、「Start Stop task」ショートカットアプリ
  • スプリント: 同じ運用を継続
7️⃣
割り込みタスク
  • 現在: 作業中のタスクを終了し、新しいタスクを現在時刻で作成
  • スプリント: 作業中のタスクを終了し、現在のスプリントにタスクを作成。これがボタンでできると嬉しいが、現在のスプリントを選択することが難しそう。

やってみないとわからないことばかりなので、作業しながら方針転向していきます。

2. テンプレートの展開

今回のスプリントの仕組みは、現在テンプレートを複製することで取得できます。今後のアップデートで既存のデータベースにスプリントを追加することもできるようになるようです。それまで待っていられないので、テンプレートからスタートします。Notion API などのアクセスを考えると、プロパティ名などは英語の方が楽になることが多いので、一時的に言語環境を英語に変更し、テンプレートを展開します。

スプリントのテンプレートは、ヘルプから取得できるものとアプリの Templates から取得できるものの二つがあります。アプリから取得できるものの方がしっかり作り込まれているので、ここから取得します。

今回は、Projects, tasks & sprints というテンプレートを複製することにします。

プライベートページに4つのページが追加されました。

作成されたページは以下のとおりです。

  1. Tasks データベース
    1. Task ID: unique_id プロパティ。TAS が接頭子になっています。
    2. Task name: Title プロパティ。そのままタスク名になります。
    3. Status: Status プロパティ。これは StartStop task ショートカットアプリや開始・終了ボタンで更新します。
    4. Assignee: Person プロパティ。担当者だが個人でしか使用しないので全て自分になりそうです。多分表示しません。
    5. Due: Date プロパティ。これまで今日の日付が「次のアクション」にするキーでした。そのため、締切と日付は別に管理していました。今回は、スプリントが日付に相当するので、日付を用意しない形にしてみます。カレンダータスクについては、Due に入れることにします。
    6. Priority: Select プロパティ。これはこのままにしておきます。
    7. Sprint: 現在は Sprint1, Sprint2 のように連番が振られていますが、私はこれを日付文字列にします。
    8. Summary: Text プロパティ。要約が設定された AI プロパティです。
    9. GitHub Pull Requests: Relation プロパティ。GitHub との連携を設定できる特別なリレーションプロパティです。これもこのままにします。
  2. Project データベース
    1. Project name: Title プロパティ
    2. Status: Status プロパティ。未着手 → Backlog、In Progress → Planning, In Progress, Paused、完了 → Done, Canceled。なぜか In Progress だけが翻訳されない
    3. Owner: Person プロパティ。プロジェクト所有者だが個人でしか使用しないので全て自分になりそうです。多分表示しません。
    4. Dates: Date プロパティ。プロジェクトの日付範囲。これは現状では手動
    5. Priority: Select プロパティ。これもそのまま利用予定
    6. Completion: Rollup プロパティ。関連するタスクの完了率を自動集計
    7. Blocked by: Relation プロパティ。ブロックしている依存タスクを設定
    8. (Tasks): Relation プロパティ。関連するタスク一覧。非表示
    9. (Is Blocking): Relation プロパティ。ブロックされている依存タスクを設定
    10. (Summary): AI プロパティ。
  3. Sprint データベース
    1. Sprint name: Title プロパティ。スプリント名はデフォルトで「Sprint n」となります。ただしただのタイトルなので自由に改変可能です。私は日付文字列にする予定。
    2. Sprint status: Status プロパティ。Current, Next, Future, Past が存在します。スプリントを完了すると、Current → Past、Next → Current、Future → Next、新規に Future が作成というように自動更新されます。
    3. Dates: Date プロパティ。スプリントを完了すると次の スプリントの範囲を設定できます。通常はこんな感じで2週間くらいを設定します。私の場合は、これが1日単位になる予定です。
    4. Completed tasks: Rollup プロパティ。スプリント内のタスクの完了率が集計されます。
  4. Sprint board

    これは Task データベースの特殊な Linked view になっています。「スプリントを完了」というボタンがあり、これがオートメーションボタンになっています。基本的には、以下の作業を実施します。

    1. 現在のスプリントにある未完了タスクを次のスプリントまたはバックログに移動するか、このまま残すかを選択できます。移動する場合には、スプリントのリレーションが更新されます。
    2. 現在のスプリントの Status が Past に変わります。
    3. Next のスプリントの Status が Current に変わります。
    4. Future のスプリントの Status が Next に変わります。
    5. 新たに Future のスプリントが生成されます。

ここからこれらを Launchpad に取り込んでいきます。

3. データベースおよび Sprint board の展開

最初の3つのデータベースは自分の Databases というデータベース置き場に移動しました。

残った Sprint board は現在の次のアクションに相当する部分になります。そこで、Launchpad の「次のアクション」の上に移動します。

このビューはフルページになっているので、これを「インラインに変換」します。

結果、こんな感じのページになります。

これによって、1️⃣の次のアクションについては実装ができました。

1️⃣
次のアクション
  • 現在: 今日の日付のタスクをフィルタで表示
  • スプリント: 現在のスプリントを表示

また、「スプリントを完了」とするだけで、自動的に次のスプリントに移動します。これで4️⃣も実装できたことになります。

4️⃣
やり残しタスクの処置
  • 現在: 昨日以前のタスクが「やり残しタスク」に移動してしまいます。そこで、「次のアクションに戻す」ボタンで、タスクの日付を今日の日付に付けなおします。
  • スプリント: スプリントを終了すると、未完了タスクは自動的に次のスプリントに移動します。ここがメリット。

4. いつかやるタスクの対応

いつかやるタスクはスプリントを設定しないことにしました。「声でタスク登録」などで入れたタスクはスプリントが未設定になるためです。スプリント未設定のタスクはバックログという形になります。「プロパティが未入力のアイテムは」と書かれていますが、「スプリントが未入力のアイテムは」の間違いかと思います。

これによって2️⃣も完了しました。

2️⃣
いつかやる
  • 現在: 日付なしタスクをフィルタで表示
  • スプリント: 変更なし
  • 備考: Feature スプリントに入れることも考えましたが、「音声でタスク登録」などで Feature スプリントをわざわざ取得するのも面倒なので辞めました。
    → スプリントが設定されていないものはバックログに入るのでこの実装がよさそうです。

次に「いつかやる」タスクを「次のアクション」に移動させる仕組み作りです。このために、「Sprint planning」タブを開きます。ここでは現在のスプリントのタスクとバックログとなるスプリント未設定タスクが同時に表示されればよいです。元々、フィルタには「次のスプリント」も入っていましたが、それを外しました。

この結果、現在のスプリントとバックログのスプリントが並びました。「次のアクション」にしたい「いつかやる」タスクは現在のスプリントにドラッグすることで、「次のアクション」にすることができます。

これで 5️⃣ も実現できました。

5️⃣
いつかやるタスク → 次のアクションへの移動
  • 現在: 日付なしタスクに今日の日付をつける
  • スプリント: 現在のスプリントのリレーションをつける。これをボタンか API で対応したい。または専用ページを作成する。
    → 専用ページではなく、Sprint planning タブで実現可能だった。これはボタンや API ではなく、ドラッグで十分かと。

5. タスク開始・終了処理

5.1 プロパティの追加

現在、タスクの開始・終了はボタンと Apple Watch 用のショートカットアプリで運用しています。内容は以下の通りです。

  • Action がついている In progress タスクに関して
    • Status → Done
    • 終了時刻(ボタン) → 現在時刻
    • Action → チェックなし
  • Action がついている Not started タスクに関して
    • Status → In progress
    • 日付 → 現在時刻
    • 終了時刻(ボタン) → 空欄

このボタンに対応するために、タスクデータベースを修正します。ここまでプロパティ名を英語にしているので、終了時刻も英語にしておきます。

  • 日付 → Due で対応
  • 終了時刻(ボタン) → 「Finish time (button)」を作成
  • Action チェックボックス → 新規作成

5.2 ボタンの修正

これらのプロパティを用いて、まずはボタンを修正します。とりあえずボタンを複製して、最初のタスク終了のアクションを修正します。

  • データベースを Tasks に変更します。
  • スプリントに変わり、今日のタスクに限定しなくなったので日付のフィルタを外しの、二つのフィルタだけにしました。
  • プロパティの更新は同じです。
    • Status → Done
    • Finish Time (Button) → 現在時刻
    • Action → チェックなし

二つ目のアクションはタスク開始のアクションです。同様に修正します。

  • データベースを Tasks に変更します。
  • こちらもスプリントに変わり、今日のタスクに限定しなくなったので日付のフィルタを外しの、二つのフィルタだけにしました。
  • こちらもプロパティの更新は同じです。
    • Status → In progress
    • 日付 → 現在時刻
    • 終了時刻(ボタン) → 空欄

これで 6️⃣ も完成です。

6️⃣
タスク開始・終了管理
  • 現在: 「タスク開始・終了」ボタン、「Start Stop task」ショートカットアプリ
  • スプリント: 同じ運用を継続
    → ただし、日付のフィルタは削除

6. 割り込みタスク

もっとも大変そうだと思った割り込みタスクですが、発想の転換でいいアイディアを思いつきました。スプリントで作業全体が見やすくなったものの、現在自分が行なっている作業を探すのが面倒です。そこで、次のような「作業中のタスク」というコールアウトを作りました。ここには、先ほどの開始・終了タスクボタンと共に、現在のスプリントでかつ Action にチェックが入っているタスクが表示されます。

割り込みタスクとは、現在動いているタスクを終了させ、新規にタスクを開始させることになります。ここで、新規に割り込みタスクを作成します。フィルタをかけているため、自動的に Action はチェックがついた状態となります。ただし、スプリントについては「現在(Current)」という相対的なフィルタになっているために自動設定はできないようです。ここでは Sprint プロパティだけは手動で設定しました。この状態で割り込みタスクの準備ができたことになります。

準備ができたので、ここで先ほどの「タスク開始・終了」ボタンをクリックします。進行中だったタスクは完了し、割り込みタスクが実行中になります。

これにて 7️⃣ の割り込みタスク処理も完成しました。

7️⃣
割り込みタスク
  • 現在: 作業中のタスクを終了し、新しいタスクを現在時刻で作成
  • スプリント: 作業中のタスクを終了し、現在のスプリントにタスクを作成。これがボタンでできると嬉しいが、現在のスプリントを選択することが難しそう。
    → 作業中のタスク表示を追加実装することで解決した。スプリントの設定の手動部分は残るが、「タスク開始・終了」ボタンのみでの運用となり、手順はわかりやすくなった。

7. おわりに

記事が長くなったので、今回は Notion 側の修正のみをまとめてみました。最終的な完成系はこんなイメージになります。

このあと、残された 3️⃣ のカレンダータスクおよびこれまで作成してきた Notion API アプリの修正なども含めて次回の記事でまとめてみたいと思います。

3️⃣
カレンダータスク
  • 現在: イベントの日付をタスクの日付に設定、直近1週間のものを閲覧用に表示
  • スプリント: イベントの日付をタスクの日付に設定、直近1週間のものを閲覧用に表示、一日一回、明日のタスクを「Next スプリント」に自動設定するスクリプトを設定
  • 備考: 明日のタスクが「Next スプリント」に入っているので、翌日スプリントを終了して次のスプリントに移動すると自動的にその日のタスクがスプリントに現れてきます。