見出し画像

少人数チームでのタスク管理をnotionで作ったった。

こんにちは。トイです。

岡山県にある小さなHR会社でデザイナーのインターンしてます。

弊社では、notionをフル活用して社内の情報を管理していますが、タスク管理もその例外ではありません。

遠い昔にはチャットワークで管理していましたが、形骸化していったのでnotionでテコ入れをしました。

弊社のnotionは僕がページ整備をしているのですが、タスク管理のデータベースをいじり倒した結果、複雑になりすぎてしまいました。この人数(現在15人位)なら使いやすいのですが、大人数になると使いにくくなっちゃう!ということになりましたので、事例として紹介できたらなと思います。

ご紹介するデータベースのテンプレは関数の説明後に置いているのでよければ使ってください。

カンバンよりチェックボックスが好き

これから紹介するのは「カンバン」形式のタスク管理ではなく、「チェックボックス」形式のタスク管理です。もともとタスク管理をチャットワークでしていたこと、社風的に小さいタスクを投げ合うことが多いので「チェックボックス」の方が向いていると判断し、こちらを使用しています。

あと僕が単純にチェックボックスの方が好きっていう理由があります。

管理画面の説明

notionタスク1

notionタスク2

notionタスク3

横がクソ長データベースです。

実際には、linked detabaseで個人ページに持ってきたりして使ってますのでこのページは基本貯めてるだけのページです。

一枚目からご説明いたしますと、

まず一番左に来ているのが期限切れを通知するアラートです。全体✔️がfalseかつ期限を過ぎた時に、ここに「🚨期限切れ」が出るように設定しています。(後々関数も説明します)

あとはシンプルで、タスク名やタスク投げた人、投げられた人、期限、関連プロジェクトのリレーションがあります。

二枚目からが本題で、なんでこんなにチェックボックスが並んでいるの???ってところなんですけど、、、

各個人用のチェックボックスが欲しかったんや

どうゆうことかと言いますと、まず前提に弊社でのタスクは、カンバンで管理するような進行状況を把握するタスクがほとんどないです。

「こうゆう記事をこの日まで書いといてね」だったり「ここのデザイン修正したので確認しておいて」「この案内を送っといてね」みたいな。すぐに解決できるようなものが多いです。

そして、タスクを投げる時、複数人に同じタスクを投げる場合があります。例えば、Aさんが「ドキュメントを確認する」というタスクをBさんとCさんに投げるとします。この場合、各個人のチェックボックスがなく、全体で一個のチェックボックスしかなかったとすると、下のようになります。

スクリーンショット 2021-11-17 13.33.01

これだと上のように同じタスクを二つ作らなけばならず不便です。2人ならまだしも5人くらいになると流石にめんどくさいです。

では、タスク投げた人をまとめちゃえば?ってことでタスク投げられた人を複数選択可能にすると以下のようになります。

スクリーンショット 2021-11-17 13.37.00

この場合は、仮にBはドキュメントを確認したけど、Cが確認していない時に、Bが完了欄をtrueにしてしまうと、Cがタスクを終わらせていないのにnotion上ではそのタスクが完了したことになってしまいます。

それが起きないように、2人が連絡取り合って「2人ともできたね!じゃあ完了にチェックつけよっか❤️」ってなるのはどう考えても手間です。

こうならないためにチェックボックスを各個人に設けて、それぞれタスクが完了した時に押せるようにしよう!そしてそれが15人分あるので横にめちゃ長いデータベースになっちゃった!というわけです。

関数を組んで管理しやすくするやで

ということで、タスクにアサインされた人全員がチェックを押すことで「全体✔️」がtrueになる関数を組んで管理をしやすくします。下の画像が今弊社で使っているタスク管理を2人しかいないバージョンにしたものです。

スクリーンショット 2021-11-17 14.06.16

なぜ「全体✔️」を導入するのかというと、「全体✔️」があることで、未完のタスクが見やすい!期限切れアラートの設定を行うことができる!といったメリットがあります。

ここからが、関数の説明なのですが「全体✔️」は、「アサイン人数(タスクを投げられた人の人数)」≦「チェックを押した人数」の時にtrueになるように設定しています。

①アサイン人数の関数

アサイン人数は「タスクを投げられた人」の人数を数える関数をlength関数とreplaceAll関数を使って出します。

if(length(prop("タスク投げられた人")) > 0, length(replaceAll(prop("タスク投げられた人"), "[^,]", "")) + 1, 0)

まずif関数でタスクを投げられた人が0より大きい時に下のlengh関数が働くように指定します。

length(replaceAll(prop("タスク投げられた人"), "[^,]", "")) + 1

ここの部分が肝なのですが、[^,]は、正規表現であり「,(コンマ)」以外をさす働きを持っているため、上のreplaceAll関数内では、「,(コンマ)以外の文字を空白に置き換える」処理を指定しています。

例として "person1, person2, person3"→", ,"になるってことや。

つまり上のlength関数はコンマの数を数えているってことなので、それに+1すれば、人数を数えることができるのだ!

②チェック人数の関数

チェック人数は、「Toi✔️」「Hiro✔️」の中でtrueになっている人だけをカウントするような関数を書きます。

一人分だと

if(prop("Toi✔️"), 1, 0)

これをもう一人分足せばいいので

if(prop("Toi✔️"), 1, 0) + if(prop("Hiro✔️"), 1, 0)

となります。

人数が増えた時は上の関数のプロパティの名前を変更して足し続ければいいです。

③全体✔️の関数

それで最後に「全体✔️」は「アサイン人数(タスクを投げられた人の人数)」≦「チェックを押した人数」の時にtrueになるように設定すればいいので、

if(largerEq(prop("チェック人数"), prop("アサイン人数")), true, false)

となります。

また、期限切れのアラートを設置する場合は

if(prop("全体✔️"), "", if(dateBetween(end(prop("期限")), now(), "days") < 0, "🚨期限切れ", ""))

でできます。

完成形↓↓↓ ソートかけたらもっと見やすい。

スクリーンショット 2021-11-17 14.35.40

わー!

ついでなんでテンプレ置いときます。

使いにくくないの?

結論、使いにくくないです。

理由としては、個人の管理ページに「linked detabase」で持って来て管理することができること、弊社では日報のページにもタスクを表示させていることが挙げられます。日報での表示は抜け漏れが少なくなって、フルで働いていないインターン生に好評な気がします。

個人ページ↓↓↓

画像9

日報のページ↓↓↓

画像8

デメリットとしては、プロパティの表示を減らすときにめんどくさくなったぐらいですかね。全体の工数を考えれば微々たるものだと思います!


この記事が気に入ったらサポートをしてみませんか?