半空洞男女関係

思ったこととかプログラミングしてるときのメモとか色々かいてます。メールは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のビデオを見ていて学習したことのメモ

2020

毎年参加しようか迷っているアドベントカレンダーがたまたま空いていた。いつもはこの時期バタバタしているので参加を避けていたのだけど、今年はこういう状況もあって書く時間があるだろう。と思って参加をしてみたのだが、どういうわけか前日に急いで書いて、当日にもう少し修正するという感じになった。どうせこうなるんだから、参加したいものは迷わず参加すればいいのに。

何を書こうかと考えていた。確かに感染症で生活に変化はあったが、仕事は前からリモートワークをしていたし、何かが大きく変わったかというとそうでもなかったようにも感じる。手洗いうがいをきちんとして、マスクを着けて外出し、人とは極力会わないようにする。日々身の回りの何かは変化しているし、それに対応するって意味だと変わらなかった。普段と変わらない生活が送れてるというのはラッキーなんだと思う。でも、永遠がないってことはとても実感した。いつも行っているあの店がいつまであるのか、あの人にいつまで会えるのか、そんなことは全くわからない。

今年はビールに触れずにはいられないだろうと思いつつ、他にも書くことはないのだろうかとも考えていた。今年を振り返ってみたら、ビールとモータースポーツ、料理という感じの年だった。どういう状況になっても続けられていることはあるし、新しく始めることはある。毎年必ず読んでいるこのアドベントカレンダーを読んでいて、自分はこんなに何かを続けることはできないと思っていたが、振り返ってみたらなんだ、続いてること結構あるじゃんと気づけたのは今週の良かったこと。

それでは始めます。

ビール

今年はビールをたくさん飲んだ。Untappedによれば、203杯のビールを飲んだらしい。昨日の夜に3杯飲んだから、206杯。今年もまだ飲むだろう。

(2020年のCheckinが終わるところまでスクロールして、このブックマークレットを実行。)

ここには記録を忘れたビールも山ほどあるから、実際は250杯くらいは行っているんじゃないだろうか。 思い出のビールは数え切れないくらいあるけれど、三つだけ紹介する。

ザ・ベストビアー体験 2020

untappd.com

2019年にナンバーガールを見るために見に行ったサッポロで飲んだ、北海道のブルワリー 忽布古丹醸造が作る「ホップの旨味」。大変バランスがよく、ホップの香りがわかりやすく効いている。自分がクラフトビールにのめり込むきっかけとなったビール。2020/3/21の大変な時期でも創業者の堤野さんが東京のiBrewまで来てくれて、忽布古丹醸造のビールを振る舞ってくれた。堤野さんは手元にあるホップをどうやって活かそうかという気持ちでビールを作っている、という話が印象的だった。作りたいビールもきっとあるのだろうが、この手元の材料の力をいかに引き出すかという視点で日々仕事をしているのかなと思う。

ザ・ベストビアー 2020

untappd.com

Mikkeller Kandaで飲んだSpontan Hexadrupel Blueberry. 今年はMikkeller(デンマークのブルワリー)が神田に二号店をオープンしたのだが、そのオープニングで振る舞われたビール。Spontanは酸っぱいビールのシリーズの名称で、これは普段作る材料の3杯のブルーベリーが使われている。(普段は、Spontan Double Blueberryなので、6/2で三倍。何がダブルなのか走らないが、とにかくダブルなんだよ元が。) それはそれは大量のブルーベリーを入れているので、もはやワインのような仕上がりになる。Mikkeller Kandaは家からも行きやすいので、この後何度も1人で飲みにいくことになるが、このビールにはなかなか出会うことができない。とても貴重なビールなのでお祝いごとの時くらいにしか出されないらしい。次はいつ飲めるんだろう。

ザ・ベストブルワリー 2020

untappd.com

最後は今年登場したBlack Tide Brewingのビールを紹介したい。Black Tide Brewingは、気仙沼に誕生したブルワリー。どのビールも非常に完成度が高く、今年誕生したブルワリーとは思えない。 全てのビールを追いかけているわけではないけど、自分は飲んだ中だとこのNet Castingが一番好き。どんな時でもスタートするものはスタートすると思わされた。いつか行きたい。

他にもいろいろなビールはあるけど、それは私のUntappedプロフィールを眺めてほしい。どのビアバーやブルワリーも、今年は本当に苦労していたように思う。来年もビールが飲み続けられるんだろうか。来年もこうした素晴らしいビールに出会い続けたい。

F1 / F2

モータースポーツというかスポーツ自体そんなに興味がなかったのだが、友達が見ている様子を見て興味を持ち、一ヶ月無料だしという思い出DAZNに契約して見始めた。最初は決勝レースだけを見ていたのだが、予選、フリー走行(x3)と全て見るようになり、レースのある毎週末がいつの間にか楽しみになっていた。そして年末に近づくと、F2の角田祐樹がF1に出場するのではないかという噂が出始め、F2も認識するようになる。F2はF1の下位互換なのかと思っていたが、正直F1よりも面白い部分も多い。

自分の中での今年の大きなトピックは、アルファタウリに所属するガスリーのイタリアGPでの初優勝と、F2で戦っている角田祐樹が次シーズンF1で走ることである。しかも、角田もガスリーと同じアルファタウリ。私はF1/F2を見始めてわずかではあるが、2人ともタイヤのマネジメントやピット戦略をうまくやり、マシンのパワーを最大限引き出すという乗り方で順位を上げて優勝や入賞を掴み取っているように見えている。ガスリーはよく「自分のレースができたか」という視点でインタビューに答えているように思うが、まさにそういうこと。

モータースポーツは速い車で速く走るだけだと思っていたが、全くそんなことはなかった。データに基づいて、自分たちのレースをやり続ける。予測不能なアクシデントをチャンスに変え、常に正しいことを行い続ける。これによって勝利が掴み取れているのだと思う。どうなるのかわからないこの世の中で、世界を巡ってレースし続けてくれたチームに感謝したい。

2021へ

どんな時でも始まるものは始まるし、続くものは続き、終わるものは終わる。あるものを最大限引き出して、予測不能なものをチャンスに変えて、勝利(何の?)を掴み取るのだということを考えた一年だったように思う。来年はどんな一年にしたいかな。

この記事は 2020 Advent Calendar 2020 の19日目として書かれました。

2020 Advent Calendar 2020 - Adventar

昨日の担当は dannna_o さんで 「 2020年のアレ」 でした。明日の担当は id:june29 さんです。おたのしみに。手洗いうがいを忘れずに。