半空洞男女関係

思ったこととかプログラミングしてるときのメモとか色々かいてます。メールはidそのままgmail

レッツプッシュ購読

Notionでおうちスクラム - RelationとView、Rollupでタスク管理システムを作ってみる

ふと思い立ちNotionでタスク管理をしてみていたのだけど、スクラムっぽく運用できるのか興味が出たので実装してみていた。意外といい感じにできた気がするのでメモがてら書き留めておく。RelationやRollup、DatabaseのViewについて学ぶことができます。

今回できるもの

スプリントを作る

まず最初にスプリントのデータベースを作っておく。スプリントは、取り組みたいことを実施する期間のこと。期間を作ることで振り返りやすくなるし、自分の場合はそろそろやらないとなあと火が付く。w 必要なプロパティは次のようにする。

  • スプリント名: 文字
  • 期間: 日付
    • End Dateを有効にして、期間として表示。

f:id:mactkg:20210111162305p:plain

やっておくこと

適当に期間を区切って並べておく。

バックログを作る

次に、バックログのデータベースを作る。バックログは取り組みたいことを一覧に並べておく場所。必要なプロパティは次のようにする。

  • ストーリー: 文字
  • 規模: 数字
  • スプリント: リレーション
    • リレーション先は先ほど作ったスプリントのデータベースを参照する
  • ステータス: セレクト
    • Doing / Done を作っておく
    • Configure options から設定できるよ

やっておくこと

やりたいことが思いついたらタスクに追加していく。規模を見積もっておくと便利だと思うのでやってみている。フィボナッチ数列を使って、これはこっちより簡単そうだねとか、やり方を考えないといけないから8にするかー。など。規模を見積もるプロセスで、この作業ってどんな感じだろう?だるそうなポイントはあるかな?ということを考える。タスクを取り組む人とゴールを揃えることにもなる。

規模を見積もったら、やりたい順に並べておく。これは急いでないからあとでいいやとか、これは先にやりたいなど。

先ほど決めたスプリントの期間でできそうなことを、「スプリント」のリレーションに入れておく。

カンバンボードを作る

次に、毎日見るカンバンボードを作る。Backlogのデータベースの中に、新しいビューを作る。データとしては同じものを見るが、見方を変えてあげるという仕組みのものだ。

データベースの上に「Add a view」があるので、ここを尾クリックすると新しいViewを作ることができる。Boardを選んで作る。

f:id:mactkg:20210111163558p:plain

できた。ただ、2点気になることがある。

  1. 並び替えが反映されていない
  2. スプリントに関係ない物が入ってしまっている

1の問題は、Notionの仕様みたいだ。それぞれのViewで並び替えは維持されている。便利なこともあれば、不便なこともある仕様だ。並び順を維持するために「優先度」というのを作ってもいいけど、だいたいうまく運用できないと思う。ただ、

  • デフォルトビューで優先度管理する
  • カンバンボードの中にあるタスクは十分に少ないからどれからやるか判断がつくし、好きにやればいい

と思うので、気にしなくていいだろう。

2の問題はフィルターで解決できるので解決しよう。

フィルターを作って、該当スプリントだけを有効にする

本当は、「今日」が期間に含まれているスプリントとRelationがあるタスクだけを出せれば良いんだけど、生憎そういうことを簡単にやるのは難しそう(頑張ったらできそうだけど)なので、アクティブなスプリントにチェックボックスをつけて、そのスプリントで絞り込んで出すような仕組みを作りたいと思う。

まずはアクティブなスプリントのしるしを作ろう。スプリントのデータベースに戻って、次のようなカラムを追加する。

f:id:mactkg:20210111164145p:plain

次に、カンバンボードをそれで絞り込めるようにする。フィルターでRelation先のデータは読めないので、Rollupを使ってタスクにアクティブ情報を埋め込んでおく。バックログのデータベースに移動して、次のようなカラムを追加する。

  • アクティブなスプリント: Rollup
    • Configure rollup で次のように指定。
    • Relation: スプリント / Property: アクティブ / Calculate: Show Original

f:id:mactkg:20210111164553p:plain

これで、アクティブなスプリントのストーリーかどうかがわかるようになった。これは計画を立てている間に必要な情報ではないので、カラムを右クリックして「Hide」しておくと便利だ。(っていうか、Notion気が利くね・・・!)

最後に、カンバンボードでフィルターする。

  • 「アクティブなスプリント」の「Any(いずれか)」が「is」「チェック済み」である

f:id:mactkg:20210111164826p:plain

これでいい感じになった。完了したらDoneに持っていけばよい。

やっておくこと

アクティブなスプリントにチェックボックスを入れておこう。

おさらい

読み返すとだいぶ複雑に見えるが、やっていることは次の機能を使いこなすだけだ。

  • データベースを作る
    • ビューを定義して、計画用と日常用で使うビューを変化させる
  • Relationでデータの関連付けを行う: Relation
  • そのデータをもとに、絞り込みを行う: RollupとFilterの組み合わせ

このあと、見積もりを使ってベロシティを計算することができるようになるんだけど、それはまた次回。次回はFormulaが登場する。

参考文献

UICollectionViewやUITableViewでperformBatchUpdatesを行う場合は、更新・削除・挿入を分ける

ドキュメントをよく読んでという話だけど、performBatchUpdates を行う際は、更新とアイテムの挿入・削除の順番に気を付ける必要がある。

performBatchUpdates(_:completion:) | Apple Developer Documentation

更新は先にやる

If the collection view's layout is not up to date before you call this method, a reload may occur. To avoid problems, you should update your data model inside the updates block or ensure the layout is updated before you call performBatchUpdates(_:completion:).

performBatchUpdates を呼ぶ前にデータの更新が終わってない場合に、リロードが発生する。 performBatchUpdates のupdateブロックの中か、 performBatchUpdates を呼び出す前に更新しておく必要がある。

A Tour of UICollectionView - WWDC 2018 - Videos - Apple Developer の中では、先に更新だけを行うperformBatchUpdatesを呼んでいたので、これに準拠するのが良さそう。

(performBatchUpdateで一気にやっていけない理由がまだ整理できていないので、あとでまとめたい。)

削除を先にやる

Deletes are processed before inserts in batch operations. This means the indexes for the deletions are processed relative to the indexes of the collection view’s state before the batch operation, and the indexes for the insertions are processed relative to the indexes of the state after all the deletions in the batch operation.

performBatchUpdates では、削除が先に実施され、挿入が後に実施されるようになっているので、削除と挿入をごちゃ混ぜにして作業してしまうとエラーが発生することがある。削除したいものと挿入したいものは区別して、一気に実施しなくてはいけない。

合わせて読みたい

A Tour of UICollectionView - WWDC 2018 - Videos - Apple Developer - mactkg-pub

WWDCのビデオを見ていて学習したことのメモ