Notionでのタスク管理でちょっと役立つデータベースオートメーション

この記事は [株式会社SUPER STUDIO Advent Calendar 2024](https://qiita.com/advent-calendar/2024/super-studio) 18日目の記事です。
みなさん、Notion は使っていますか？
使っていますね。良かったです。

Notion でタスク管理してますか？
してますね。良かったです。

今日は、Notion でのタスク管理でちょっと役立つオートメーションをいくつかご紹介します。
Notion でタスク管理していなくても、今日からタスク管理できるように、前提設定なども含めて説明していきます。

# 最初に
まず、このオートメーションを設定するにあたって、データベースの設定をします。
前提条件を揃えないと、うまくオートメーションを組めなくなってしまうので。
一つずつ見ていきましょう。

## タスクデータベースを用意する
まずはデータベースを用意します。
詳しい作り方は、[公式のヘルプ](https://www.notion.com/ja/help/intro-to-databases#%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%81%AE%E4%BD%9C%E6%88%90)をご覧ください。
作り方はお好きな方法で大丈夫です。

まずはこんな感じで作れたかなと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3621523/4f4230cd-9b1f-5246-9ac2-eafa3746bb99.png)

### タスク用データベースとして設定する

そうしましたら、右上の「⋯」（三点リーダー）から「カスタマイズ」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3621523/035980ed-4c32-66c4-a3be-7d1c0082842c.png)

データベースの機能を追加できるので、ここで「サブアイテム」と「タスク」をオンにします。

タスクをオンにしたとき、「担当者」「ステータス」「期限」に該当するプロパティを選択しろと言われます。
既存のデータベースをタスクデータベースに変換する場合は、該当するプロパティを選択してください。
新規で作る場合、もしくは該当するプロパティが存在しない場合は、新規作成を選択した状態で「タスクデータベースに変換」を押します。
今回は新規で作るので、すべてのプロパティを新規作成の状態で作ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3621523/9b6f39a5-b0c7-79af-ab70-47c3c275eed7.png)

これ以外にもカスタマイズ機能があり、簡単に追加することができるので、試してみてください。

## プロジェクトデータベースを用意する
プロジェクトを管理しない場合は、この部分は飛ばしてください。

データベースの作り方は先程と同じなので割愛します。

プロジェクトにタスクを紐づけるためにリレーションを設定します。
右上の「⋯」（三点リーダー）から今度は「プロパティ」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3621523/95374974-534c-983a-f904-bccc99942e89.png)

「新しいプロパティ」を選択して、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3621523/1a69e5c2-4445-bbda-a979-7b3a1eee5aa7.png)

「リレーション」を追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3621523/8149bd97-f254-8a36-e600-05510bd43148.png)

先ほど作った「タスク管理用データベース」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3621523/c871449d-badd-dac6-cd26-b8c57114768f.png)

「双方向リレーション」を有効にして、【リレーションを追加する】を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3621523/d0182f2f-d8ee-ccb0-54b5-a056d0e78371.png)

これでプロジェクトとタスクの紐づけができるようになりました。

ついでに、プロジェクト側にも「ステータス」のプロパティを作成しておいてください。

# オートメーションを設定する

タスク、プロジェクトにそれぞれ設定していきます。
今回は下記の4つを紹介します。
- [親タスクが完了になったら、すべてのサブタスクも完了にする](#親タスクが完了になったら、すべてのサブタスクも完了にする)
- [すべてのサブタスクが完了になったら、親タスクも完了にする](#すべてのサブタスクが完了になったら、親タスクも完了にする)
- [プロジェクトが完了になったら、プロジェクトに紐づくすべてのタスクも完了にする](#プロジェクトが完了になったら、プロジェクトに紐づくすべてのタスクも完了にする)
- [プロジェクトに紐づくすべてのタスクが完了になったら、プロジェクトも完了にする](#プロジェクトに紐づくすべてのタスクが完了になったら、プロジェクトも完了にする)

4つと言いながら、設定の内容はだいたい2種類です。

## 親タスクが完了になったら、すべてのサブタスクも完了にする

タスクデータベースのオートメーション作成画面を開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3621523/d9652a0c-a70b-3d7f-c582-242b833b6e06.png)

### トリガーを設定する

まず、一番上の「誰々のオートメーション」となっている部分をクリックしてわかりやすい名前をつけておきましょう。

【新規トリガー】から「ステータス」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3621523/0e07c439-3c31-1516-ff71-6650ff2c59bd.png)

今回は、親タスクが完了になったときサブタスクも完了にしたいので「完了」のみを選択しておきます。
トリガーはこれだけです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3621523/54c523ad-65d4-98d6-b8c3-9968ab5be174.png)

### アクションを追加する

続いては実際に動作する部分を作っていきます。

#### サブタスクを取得する変数を作成する

まず、変数を定義します。
【新規アクション】から「変数を定義」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3621523/fb5c3b6d-2315-3cb3-2382-1211a87a06c3.png)

変数を定義することで、様々な条件に合わせたページを自動的に対象にすることができます。
「変数１∨」となっているところをクリックすると、名前を変えることができるのでわかりやすいように「サブタスク」とつけておきましょう。

入力欄の右側「Σ」の「関数として編集」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3621523/a8808bfd-6848-da17-0bd1-c6becc20b3a3.png)

クリックすると関数編集画面が出てくるので
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3621523/ee9b848e-c95c-d00d-62bc-bf654c2f12ef.png)

プロパティ欄から「トリガーページ」を選択した後「サブタスク」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3621523/0ded6129-0f8a-7da5-228a-bd75ce5c6fbb.png)
「トリガーページ」を選択した後、「.（ピリオド）」を入力すると「サブアイテム」が選択できるようになると思います。

このようになれば大丈夫です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3621523/5d26d9ad-6324-7bff-5e89-1db8fb749b9c.png)

- - -

<details><summary>（余談）一部のステータスは完了にしたくない場合</summary>

例えば、下記のようにステータスを設定していたとします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3621523/45bb4648-9e47-f344-b776-0e1d01a0ce8c.png)

「進行中」グループにある「変えないで」は言わずもがな変えてほしくないステータスでしょう。
また、「完了」グループにある「アーカイブ」は、アーカイブしたのにステータスを「完了」にされてしまうと、タスクチケットを見返すときにノイズになってしまう可能性があります。
これらのステータスは除外したい場合、下記のように変数を設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3621523/bf0209e2-7d37-a5f9-06b5-75375866a924.png)

やっていることとしては、まず「トリガーページ」.「サブアイテム」で親タスクに紐づくタブタスクを取得します。
そのあと`.filter()`を使って、条件に合うサブタスクのみを取得するようにします。
除外したいステータスが一つの場合は`filter(current.ステータス != "除外するステータス)`だけで大丈夫です。
除外したいステータスが複数ある場合は`filter((current.ステータス != "除外するステータス1").and(current.ステータス != "除外するステータス2").and(以下略...`
のように`.and()`で繋いでいきます。

::: note warn
複数ある場合の注意点としては、必ず1つ目の除外したいステータスは「()」で括ってください。
そうじゃないと、判定されません。
:::
```js
// Good
トリガーページ.サブアイテム.filter((current.ステータス != "除外するステータス1").and(current.ステータス != "除外するステータス2")

// Bad
トリガーページ.サブアイテム.filter(current.ステータス != "除外するステータス1".and(current.ステータス != "除外するステータス2")

```

</details>

- - -

#### すべてのサブタスクのステータスを変更する処理を作成する

続いて、実際にステータスを編集する部分を作ります。
【アクションを追加】から「ページを編集」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3621523/3f7043a9-3aa4-02f4-4cf0-486a3b4bcb01.png)

【データベースを選択】をクリックして、先ほど作った変数の「サブタスク」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3621523/d19208e8-c077-9b0a-d3e9-6db66d438353.png)

【プロパティを編集∨】から「ステータス」を選択し、「完了」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3621523/d8ff32ca-c243-0658-c039-999a21efc49c.png)
すべて設定できたら【保存】を押します
完成です！

### 実際に動作させてみる

親タスクにいくつかのサブタスクを作り、親タスクのステータスを「完了」に変えてみましょう。
少し待つと勝手にサブタスクのステータスも「完了」に変わると思います！
![親タスク→サブタスク感完了.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3621523/703fb337-e4c3-7ffb-c8e1-8c4e9d3a0072.gif)
もしうまく動作しない場合は、もう一度設定を見直してみてください。
初回は動作に少し時間がかかる可能性もありますので、10〜20秒待っても変わらない場合は設定を見てみてください。

## すべてのサブタスクが完了になったら、親タスクも完了にする

[一個前](#親タスクが完了になったら、すべてのサブタスクも完了にする)でやったものと同じ動作になるものは、基本的に画像などを省略していきます。

タスクデータベースのオートメーション作成画面を開きます。
開き方はさっきと同じなので割愛します。

### トリガーを設定する

トリガーも[トリガーを設定する](#トリガーを設定する)と一緒です。
割愛します。

### アクションを追加する

先ほどと同じようにまず、変数を定義します。
【新規アクション】から「変数を定義」を選択し、入力欄の右側「Σ」の「関数として編集」をクリックして関数の編集画面に入ります。
オートメーション名も変えておきましょう。

#### 親タスクを取得する変数を作成する
変数名は「親タスク」とでもしておきましょう。

変数の内容は下記です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3621523/089b603a-b9e6-4722-b2f9-a9214aad3e16.png)
「トリガーページ」を選択した後に「.（ピリオド）」を入力して、「親アイテム」を選択後、再度「.」を入力して「first()」を使います。

#### サブタスクのステータスがすべて完了しているかを判定する変数を作成する

ここから少し高度な変数になります。
今作った「親タスク」変数を利用して、「サブタスクがすべて完了している」という以下条件で値が入る変数を定義します。
a. サブタスクがすべて完了していたら`True`
b. サブタスクのうち完了していないものがあったら`False`

【アクションを追加】から「変数を定義」を選択し、入力欄の右側「Σ」の「関数として編集」をクリックして関数の編集画面に入ります。
変数の内容は下記です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3621523/c5050d5d-b8d6-8b6d-a5d7-120364a1dd54.png)
「親タスク」の「サブアイテム」があるかどうかを判断します。
「サブアイテム」がある場合はすべての「サブアイテム」の「ステータス」が「完了」かどうかを判断して`True`or`False`を返します。
「親タスク」に「サブアイテム」がそもそもない場合は、`False`を返します。

if関数ではなく、三項演算子を使う場合は、下記のようにも記述できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3621523/5bfa8695-0001-1660-9080-e00f052b43ac.png)

処理内容に違いはなく、記述の好みなのでどちらでも大丈夫です。

#### 親タスクのステータスを変更する処理を作成する

ここまで来たらあと一歩です。
今作った「サブタスクがすべて完了している」変数を使い、今のステータスを保持するか完了にするかを設定します。

【新規アクション】から「ページを編集」を選択し、【データベースを選択】で「親タスク」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3621523/9849bd01-e635-5fcc-f2d7-ce3505138796.png)

【プロパティを編集】で「ステータス」を選択します。
ここで、既存のステータスではなく【カスタム数式】を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3621523/63a88474-34fa-3ef4-b074-b093cd0fded7.png)

先程作った「サブタスクがすべて完了している」を使って、下記のようなif文を作ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3621523/f4bcee18-075b-583a-dea0-ac6ee6b14e2d.png)
「サブタスクがすべて完了している」が`True`だったとき、ステータスを「完了」にします。
「サブタスクがすべて完了している」が`False`だったとき、ステータスを今のままにします。

三項演算子を使う場合は下記のようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3621523/7c8d58a8-14e0-9759-9e98-97982bf59dcd.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3621523/4582526f-90f5-c020-e4f1-2532258009f7.png)
すべて設定できたら【保存】を押します
完成です！

### 実際に動作させてみる

親タスクにいくつかのサブタスクを作り、すべてのサブタスクのステータスを「完了」に変えてみましょう。
少し待つと勝手に親タスクのステータスも「完了」に変わると思います！
![サブタスクを完了させると親も完了.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3621523/38ccb9c3-f241-893d-92f1-d84da71f49bc.gif)

## プロジェクトが完了になったら、プロジェクトに紐づくすべてのタスクも完了にする

今度はプロジェクト側に作っていきます。
プロジェクトデータベースのオートメーション編集画面を開きます。
オートメーション名も変えておきましょう。

### トリガーを設定する

ここは[トリガーを設定する](#トリガーを設定する)と一緒ですので、割愛します。

### アクションを設定する

#### プロジェクトのタスクを取得する変数を作成する

いつも通り変数を設定していきます。
【新規アクション】から「変数を定義」を選択し、入力欄の右側「Σ」の「関数として編集」をクリックして関数の編集画面に入ります。
変数名は「プロジェクトのタスク」とでもしておきましょう。
下記のように変数を設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3621523/36c8f64d-71df-f9c2-68d0-49ddef5b0e27.png)

これでプロジェクトのタスクが取得できるようになりました。

#### プロジェクトに紐づくすべてのタスクのステータスを変更する処理を作成する

続いて、実際にプロジェクトのタスクをすべて「完了」にする部分を作っていきます。
【新規アクション】から「ページを編集」を選択し、【データベースを選択】で「プロジェクトのタスク」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3621523/897811df-bf62-081d-3aa6-51e0a566d463.png)

【プロパティを編集】で「ステータス」を選択します。
「ステータス」で「完了」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3621523/ae5f3268-2a73-b060-4992-1f1cef3d9560.png)
すべて設定できたら【保存】を押します。
完成です！

### 実際に動作させてみる

いくつかのプロジェクトを作り、それに紐づくタスクもいくつか作っておきます。
プロジェクトのテンプレートで、タスクのリンクドビューを作っておくとわかりやすいかと思います。
プロジェクトを完了にすると、紐づくタスクがすべて「完了」になるかと思います！
![プロジェクトが完了になったら、プロジェクトに紐づくすべてのタスクも完了にする.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3621523/5246d83a-8269-a5fa-ebec-aa02b773ba88.gif)

## プロジェクトに紐づくすべてのタスクが完了になったら、プロジェクトも完了にする

ついに最後です。
今回は[すべてのサブタスクが完了になったら、親タスクも完了にする](#すべてのサブタスクが完了になったら、親タスクも完了にする)と似たオートメーションです。
というか、一部以外ほぼ一緒です。

タスクデータベースのオートメーション作成画面を開きます。
いつも通りオートメーション名も変更しておきましょう。

### トリガーを設定する

トリガーは[トリガーを設定する](#トリガーを設定する)と一緒です。

### アクションを追加する

#### 親プロジェクトを取得する変数を作成する

いつも通り、変数を定義します。
【新規アクション】から「変数を定義」を選択し、入力欄の右側「Σ」の「関数として編集」をクリックして関数の編集画面に入ります。
変数名は「プロジェクト」とでもしておきましょう。

もう慣れてきましたね。
変数の内容は下記です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3621523/21560304-f619-beb9-f792-e154263e415d.png)
「トリガーページ」を選択した後に「.（ピリオド）」を入力して、「このタスクのプロジェクト」を選択後、再度「.」を入力して「first()」を使います。

#### プロジェクトに紐づくタスクのステータスがすべて完了しているかを判定する変数を作成する

今作った「プロジェクト」変数を利用して、「紐づくタスクがすべて完了している」という以下条件で値が入る変数を定義します。
a. タスクがすべて完了していたら`True`
b. タスクのうち完了していないものがあったら`False`

【アクションを追加】から「変数を定義」を選択し、入力欄の右側「Σ」の「関数として編集」をクリックして関数の編集画面に入ります。
変数の内容は下記です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3621523/bc2f6545-dd93-95ef-e858-62c917dcf3ee.png)

「プロジェクト」に「このプロジェクトのタスク」があるかどうかを判断します。
「このプロジェクトのタスク」がある場合はすべての「このプロジェクトのタスク」の「ステータス」が「完了」かどうかを判断して`True`or`False`を返します。
「プロジェクト」に「このプロジェクトのタスク」がない場合は、`False`を返します。

#### 親プロジェクトのステータスを変更する処理を作成する

今作った「紐づくタスクがすべて完了している」変数を使い、今のステータスを保持するか完了にするかを設定します。

【新規アクション】から「ページを編集」を選択し、【データベースを選択】で「プロジェクト」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3621523/95e74c9e-0631-f588-f600-0d4eb992f984.png)

【プロパティを編集】で「ステータス」を選択します。
既存のステータスではなく【カスタム数式】を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3621523/4dc987d1-9b97-5893-b884-0c2ecd4ad0d7.png)

先程作った「紐づくタスクがすべて完了している」を使って、下記のようなif文を作ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3621523/406f731a-8387-6c5f-cd9b-7353f86bd2d6.png)
「紐づくタスクがすべて完了している」が`True`だったとき、ステータスを「完了」にします。
「紐づくタスクがすべて完了している」が`False`だったとき、ステータスを今のままにします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3621523/0b267394-05a2-d5a5-2b61-d6f9fad245b0.png)
すべて設定できたら【保存】を押します
完成です！

### 実際に動作させてみる

プロジェクトを作り、それに紐づくタスクもいくつか作っておきます。
プロジェクトのテンプレートで、タスクのリンクドビューを作っておくとわかりやすいかと思います。
プロジェクトに紐づくタスクをすべてを完了にすると、プロジェクト「完了」になるかと思います！
![プロジェクトに紐づくすべてのタスクが完了になったら、プロジェクトも完了にする.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3621523/2f43889a-5d32-f332-f16f-bb1b1f19819c.gif)

# 最後に
めちゃめちゃ長くなってしまいましたが、最後までお読みいただきありがとうございました。
Notion はアップデートが頻繁にあって、いろいろな機能が沢山追加されて楽しいですね。
みなさんも Notion で良きタスク管理ライフを送ってください。