ポンコツエンジニアのごじゃっぺ開発日記。

いろいろポンコツだけど、気にするな。エンジニアの日々の開発などの記録を残していきます。 自動で収入を得られるサービスやシステムを作ることが目標!!

notionでのタスク管理でサブタスクを実現!タイムラインビューも表示させよう。

よくあるガントチャートのサービスでタスク管理する場合、親タスク子タスク(またはサブタスク)の関係を作成して管理することができますよね。今回は、それをnotionでやってみましょう、という記事になります。

完成イメージはこのようなものになります。

f:id:ponkotsu0605:20220308232450p:plain

画像だけでは伝わりにくいかもなので、ぜひ記事を読んでいただきたいです。

タスク管理するデータベースを作成する

まずは、元となるデータベースを作成します。

f:id:ponkotsu0605:20220308091342p:plain

項目 プロパティタイプ型 意味
Title Title デフォルトのタイトルですね
state Select タスクの状態を示しています
start Date 開始日時
end Date 終了日時

タイムラインビューで利用するために、startとendを作成しています。また、後で扱いやすくするために、期間の入力ではなくstartとendを別のカラムとして分けています。

タイムラインビューを作成する

Add a viewビューを追加)からTimelineを選択します。 すると、以下のようにタイムラインビューが作成されます。

f:id:ponkotsu0605:20220308092135p:plain

ビューの設定からTimeline byタイムラインの表示基準日)を選択します。

f:id:ponkotsu0605:20220308092236p:plain

Use separate start and end dates開始日と終了日に別々のプロパティを使用する)にチェックを入れて先程作成したstartendのカラムを使うように設定します。

f:id:ponkotsu0605:20220308092318p:plain

そして、テキトーにスケジュールを埋めていきます。

f:id:ponkotsu0605:20220308092542p:plain

Tableビューに戻ってみるとちゃんとstartとendが入力されていることが確認できます。

f:id:ponkotsu0605:20220308092659p:plain

ここまでが基本的なタイムラインビューの作成方法になります。

親タスクと子タスクの関係性を作成する

さて、次が本題のサブタスクについてです。

関係性を作成するために、自分自身のデータベースにリレーションを設定する必要があります。

f:id:ponkotsu0605:20220308093429p:plain

プロパティ追加からリレーションを選択します。

自分自身のデータベースをリレーション対象にすると以下のような画面が表示されます。

f:id:ponkotsu0605:20220308093523p:plain

英語だとわかりにくいので、言語設定を日本語に設定しているnotionでも試してみました。

f:id:ponkotsu0605:20220308093606p:plain

同じデータベースへのリレーションを設定しようとしています。リレーションの表示方法を選択してください。

今回の場合は、上の方のCreate a new property(新しいプロパティを作成)を選択します。(クリックしてもクリックしている感がわからないかも)

新しいプロパティを作成

2つのプロパティで表示するリンク先とリンク元を2つのプロパティに分けて表示し、タスクの親子関係を表現する場合は、このオプションを使用します。

すると、プロパティが2つ追加されました。

f:id:ponkotsu0605:20220308093843p:plain

プロパティ名がわかりにくいので、親タスク子タスクという名前を付けてみます。

f:id:ponkotsu0605:20220308094013p:plain

親タスクの下に子タスクを簡単に追加できるようにする

ここまでできると、後は子タスクを作成して、親タスクのプロパティに対象の親タスクを設定すれば良いということになります。

ただ、毎回親タスクを設定するのはめんどくさいですよね。そこでここも楽に設定できる仕組みを作っていきます。

テンプレートを作成します。

f:id:ponkotsu0605:20220308094425p:plain

タイトルは適当に設定しておきましょう。

先程作成したタスク管理のデータベースのURLをコピーしておきます。

f:id:ponkotsu0605:20220308094524p:plain

そして、テンプレートに貼り付けます。この時、linked databaseを作成するように選択します。

f:id:ponkotsu0605:20220308094557p:plain

すると、テンプレートにリンクドデータベースが作成されます。(linked databaseをカタカナにするの難しい)

作成したlinked databaseにフィルターを作成します。

f:id:ponkotsu0605:20220308094800p:plain

Add a filterからフィルタを作成するのですが、以下のように、親タスクのプロパティに今作成しているテンプレートを含む、というような条件を設定します。

f:id:ponkotsu0605:20220308095027p:plain

こうすると、このように空っぽのフィルタ済みのlinked databaseが作成されました。

このとき、親タスクのプロパティは表示しても意味がなくなると思うので、非表示の設定にしてしまっても良いかもしれません。

f:id:ponkotsu0605:20220308095124p:plain

子タスクを追加してみる

では、早速、サブタスクを追加してみましょう。

f:id:ponkotsu0605:20220308095218p:plain

タスクAを開きます。

f:id:ponkotsu0605:20220308095243p:plain

先程作成したテンプレートを選択します。

f:id:ponkotsu0605:20220308095358p:plain

すると、このように先程作成したテンプレートが適用されます。上で説明してないですが、わかりにくかったので、サブタスク一覧という文字をテンプレート側に入れてみました。

後は、Newからレコードを追加していきます。

f:id:ponkotsu0605:20220308095604p:plain

このようにサブタスクを作成してみました。

すると、以下のように、親タスクであるタスクAの子タスクに作成したサブタスクが追加されていることが確認できます。

f:id:ponkotsu0605:20220308095716p:plain

このように、フィルタリング機能とテンプレートを作成すると簡単にサブタスクの追加ができるようになります。

ちなみに、この状態でタイムラインビューを表示させると以下のようになります。

f:id:ponkotsu0605:20220308103507p:plain

順番がぐちゃぐちゃだったり、編集が大変そうですが、ここは後ほど改修します。

親タスクと子タスクの期間の連携をする

例えば、先程作成したサブタスクの期間を入力して以下のようにしてみました。

f:id:ponkotsu0605:20220308222752p:plain

しかし、親タスクのスケジュールはもちろん連動せず、この例だとサブタスクの方が期間が長くなってしまっています。これでは親タスクが終わっている期間なのに子タスクが終わってない期間となって矛盾してしまいます。

そこで、サブタスクを持つタスクはそのサブタスクの期間も見るように設定できるようにします。

f:id:ponkotsu0605:20220308223019p:plain

一度、Tableビューに戻します。

f:id:ponkotsu0605:20220308223123p:plain

Rollupのプロパティを2つ追加します。以下のようにRollupの設定を開いて、それぞれどの値を引っ張ってくるかを設定しましょう。

f:id:ponkotsu0605:20220308223219p:plain

それぞれのプロパティ(子タスクstart子タスクend)は以下のような設定を行います。

プロパティ名 RELATION PROPERTY CALCULATE
子タスクstart 子タスク start Earliest date(最も古い日付)
子タスクend 子タスク end Latest date(最も新しい日付)

f:id:ponkotsu0605:20220308223731p:plain

こうすることで、子タスクの中で一番最初に始まるものと最後に終わるものをそれぞれのプロパティに入れることができます。

ここからがちょっと難しくなるのですが、真のstartとendを示すプロパティを用意していきます。

f:id:ponkotsu0605:20220308224139p:plain

このように、Formula関数)で真のstartを作成します。同時に真のendも作成します。

f:id:ponkotsu0605:20220308224317p:plain

Edit formula関数を編集する)から関数を編集していきます。

f:id:ponkotsu0605:20220308224432p:plain

上記スクショのように関数の中身を作成します。

プロパティ 関数の中身
真のstart prop("子タスクstart")?prop("子タスクstart"):prop("start")
真のend prop("子タスクend")?prop("子タスクend"):prop("end")

すると、以下のように自動で値が入力されました。

f:id:ponkotsu0605:20220308224635p:plain

これが、上で説明したように、子タスクがある場合は、その期間を利用して、子タスクの中で一番最初に始まるものと最後に終わるものを使って期間を設定しています。

このことを確認するために、最初の方で作成したタイムラインビューに戻り、Timeline byタイムラインの表示基準日)を真のstart真のendを利用するように設定を変えてみましょう。

f:id:ponkotsu0605:20220308224941p:plain

これを適用すると、以下のようにサブタスクを持っているタスクAの期間がサブタスクの期間に合わせて長くなっていることが確認できると思います。

f:id:ponkotsu0605:20220308225033p:plain

ただし、このときのタイムラインビューは関数を用いて算出された値を利用しているため、このタイムラインビュー上で期間の編集ができなくなってしまいました。これについては後ほど解消する方法を紹介します。

タイムラインビューの親タスクと子タスクを並べて見やすくする

次に、先程表示させた親タスクと子タスクの順番がちょっと気になりました。個人的な意見にはなりますが、以下のような表示にさせたいと思います。

  1. 親タスクが子タスクより上に表示させたい
  2. 子タスクは開始日時のものを上に表示させたい

今回紹介する方法は一例で、別のより良い方法があるかもしれませんのでご注意ください。

編集しやすいように、再びTableビューに戻します。この時、先程作成した普段は使用しないプロパティは非表示にしておくことで、見やすくしてあげます。

f:id:ponkotsu0605:20220308225828p:plain

IDというFormula(関数)のプロパティを追加します。

f:id:ponkotsu0605:20220308230000p:plain

関数の中身はid()と書いてあげます。

f:id:ponkotsu0605:20220308230047p:plain

こうすることで、各レコードのIDを表示させることができます。

次に、親タスクのIDというRollupのプロパティを作成してあげます。

f:id:ponkotsu0605:20220308230228p:plain

名前からも想像できると思いますが、Rollupの設定は以下のように親タスクのIDを利用するような設定になります。

f:id:ponkotsu0605:20220308230317p:plain

すると、親タスクが存在するサブタスクに関して、親タスクのIDのカラムに値が入りました。

f:id:ponkotsu0605:20220308230414p:plain

次に、親タスクが同じ、またはその親タスクは同じグループにさせたいので、それ用にプロパティを作成してあげます。

それをグループIDという名前でFormulaプロパティを作成してあげます。

f:id:ponkotsu0605:20220308230539p:plain

グループIDの関数の中身はprop("親タスクのID")?prop("親タスクのID"):prop("ID")と入力します。

f:id:ponkotsu0605:20220308230634p:plain

ランダムな文字列のように見えるのでわかりにくいかもしれませんが、こうすることで、親タスクが同じものとその親タスクのグループIDには同じ値が入っていることが確認できるかと思います。

f:id:ponkotsu0605:20220308230741p:plain

そして、このグループIDを利用してタイムラインビューの並び替えを行っていきます。Timelineビューに戻り、並び替えの設定を行います。

f:id:ponkotsu0605:20220308230938p:plain

並び替えの内容は以下のように設定します。Ascendingは昇順、Descendingは降順を意味します。

f:id:ponkotsu0605:20220308231034p:plain

この設定が終わると、以下のように一番最初に書いたような親タスクと子タスクがすぐとなりに並ぶ形になります。

f:id:ponkotsu0605:20220308231206p:plain

いろんな方法で実現できるので、思い思いのやり方を試してみると面白いと思います。

タイムラインビュー上で期間を編集できるようにする

ここまで作成してきたTimelineビューは上の方でも述べましたが、関数の値を利用してタイムラインビューを表示させているので、このタイムラインビュー上でドラッグしたりして編集することができません。それでは扱いにくいですよね。

言うなれば閲覧用のタイムラインビューです。そう名前を付けましょう。

f:id:ponkotsu0605:20220308231442p:plain

これに対して、編集用にタイムラインビューを作成してあげましょう。Add viewからビューを作成してあげます。

f:id:ponkotsu0605:20220308231533p:plain

このタイムラインビューのTimeline byタイムラインの表示基準日)には、一番最初に作成した期間であるstartとendを設定してあげます。

f:id:ponkotsu0605:20220308231713p:plain

こうすることで、編集可能なタイムラインビューが表示することができました。

f:id:ponkotsu0605:20220308231743p:plain

ここで、サブタスクを持つ親タスクはサブタスクの期間に依存するため、親タスク自身の期間は編集できるのはおかしいかなと思います。そこで、このタイムラインビューから取り除いてしまおうかなと思います。

Filterの設定を開きます。

f:id:ponkotsu0605:20220308231849p:plain

子タスクがis empty未入力)のものだけを表示するようにフィルタリングの設定を行います。

f:id:ponkotsu0605:20220308231950p:plain

こうすることで、サブタスクを持つ親タスクを取り除くことができました。

f:id:ponkotsu0605:20220308232110p:plain

後は、並び替えの設定を先程と同じように、グループIDを利用してソートしてあげます。

f:id:ponkotsu0605:20220308232209p:plain

こうすることで、編集してほしいものだけを表示させつつ、編集できる状態にすることができました。

最後に

プロパティの表示設定を調整することで、より扱いやすいタイムラインビューにできるかと思います。

f:id:ponkotsu0605:20220308232450p:plain
閲覧用のTimelineビュー

このようにして、親子関係のあるタスクも管理できるnotionのデータベースを作成することができました!

f:id:ponkotsu0605:20220308232516p:plain
編集用のTimelineビュー

お問い合わせプライバシーポリシー制作物