【Obsidian】完了したタスクを週次で一覧化する

# はじめに

この記事ではObsidianで以下の事を実現する手順を紹介します。
1. その週に完了したタスクの一覧がウィークリーノートに自動で挿入されるようにする
1. 1を実現するため、毎日繰り返すタスクのチェックリストがデイリーノートに自動で挿入されるようにする

利用するプラグインは以下の通りです。

- コミュニティプラグイン
  - Calendar
  - Templater
  - Tasks
- コアプラグイン
  - Daily notes

:::note info
項目名等は英語で記載しています。表示言語を日本語にしている方は適宜読み替えてください。
:::


# 事前準備

デイリー/ウィークリーノート用のフォルダと、テンプレート用のフォルダ、空のノートを作成しておきます。
```
Journal/
  Daily/   # デイリーノート用のフォルダ
  Weekly/  # ウィークリーノート用のフォルダ
Templates/ # テンプレート用のフォルダ
  Daily    # 空のノート
  Weekly   # 空のノート
```
![Pasted image 20250320184306.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160235/4186d6e4-ec95-465b-8ef9-74f6371111fa.png)

# プラグインの導入と設定

## 1. Calendar

ウィークリーノートを作成するために、Calendarを導入して以下のように設定します。
- `Show week number` を有効にする
    - これでウィークリーノートを作成できるようになります
- `Weekly note folder` を設定する
    - ウィークリーノートだけが入るフォルダであれば、どこでも良いです
- `Weekly note template` は使わない
    - Templaterの方で設定するため、Calendarの方のテンプレート設定は使わないようにします

![Pasted image 20250320181825.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160235/62ca54f6-0a0c-4044-a264-d600a47115f6.png)

### 動作確認

設定が済んだら、カレンダーの週番号をクリックして所定のフォルダにウィークリーノートが作成されることを確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160235/ee1355f2-b7ef-4108-b042-49f3541b0336.png)

## 2. Daily notes

- `New file location` を設定する
    - デイリーノートだけが入るフォルダであれば、どこでも良いです
- `Template file location` は使わない
    - Templaterの方で設定するため、Daily notesの方のテンプレート設定は使わないようにします

![Pasted image 20250320183724.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160235/f61e83bf-e201-4859-964a-d3a7a6b4e4b4.png)

### 動作確認

設定が済んだら、カレンダーの日付をクリックして所定のフォルダにデイリーノートが作成されることを確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160235/f50725c3-9bd4-4a21-b884-69fdd52e37c1.png)

## 3. Templater

Templaterを導入して以下のように設定します。

- `Template folder location` にテンプレート格納用として作成したフォルダを設定する
- `Trigger Templater on new file creation` を有効にする

![Pasted image 20250320184721.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160235/f8e2a9bf-e7c2-4e9e-a41e-51ad41472afb.png)

- `Enable folder templates` を有効にして、以下のフォルダテンプレートを追加する
    - デイリーノートのフォルダ（にファイルが作成された時）
        - デイリーノート用のテンプレートファイル
    - ウィークリーノートのフォルダ（にファイルが作成された時）
        - ウィークリーノート用のテンプレートファイル

![Pasted image 20250320185239.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160235/099d451d-4d70-4edf-85bc-259b2dfc9657.png)

### 動作確認

デイリーノートのテンプレート（ウィークリーノート）のテンプレートにテキストを入力しておいて、デイリーノート（ウィークリーノート）を新規作成した時に自動でテンプレートのテキストが表示されることを確認します。

![Pasted image 20250320190119.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160235/7bcde0d2-9217-43a9-9348-ac85a31176a1.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160235/b23f94cc-a12f-4544-9a6d-ab7356ad302a.png)

## 4. Tasks

Tasksを導入して以下のように設定します。

- `Task Format` をDataviewに変更
- `Global task filter` を設定する
    - 必須ではありませんが、集計対象のチェックリストアイテムと集計対象外のチェックリストアイテムをタグで区別できるようになるのでお勧めです

![Pasted image 20250320190753.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160235/fe112378-b27f-494a-b9f3-824fa6e0d2cc.png)

- `Set done date on every completed task` を有効にする
    - 完了日を基準として集計するために使用します（それ以外はお好みで）

![Pasted image 20250320191045.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160235/93928c48-1c5f-4354-9687-9c45b9a9a0d9.png)

Tasksの設定変更を反映するためObsidianを再起動します。

# テンプレート作成

## 1. デイリーノートのテンプレート

毎日繰り返すタスクをデイリーノートのテンプレートに入力します。

```
# 🐾やること

- [ ] #task 爺やを起こす
- [ ] #task 爺やがご飯を出すまで待つ
- [ ] #task 婆やに引き戸を開けさせる
- [ ] #task 押入れの見回りをする
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160235/1b368c95-f4a7-4ed8-b7ff-b6cf75328a0e.png)

### 動作確認

新しいデイリーノートを作成して、テンプレートに入力した内容が自動で入っていることを確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160235/1c8f33d2-f50e-4236-8e4e-379979022982.png)

## 2. ウィークリーノートのテンプレート

ウィークリーノートのテンプレートに以下のコードを入力します。
（週の始まりを月曜日にしている場合のコードのため、週の始まりを日曜日にしている場合は曜日周りの処理を適宜変更してください）

```
<%*
const startOfWeek = moment(tp.file.title, "YYYY-[W]ww").startOf("week")
const lastSunday = startOfWeek.add(-1, 'd').format("YYYY-MM-DD")
const nextMonday = startOfWeek.add(8, 'd').format("YYYY-MM-DD")
-%>
```

````
```tasks
status.type is DONE
path includes Journal/Daily
done after <% lastSunday %>
done before <% nextMonday %>
sort by description
hide edit button
hide done date
```
````

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160235/7e746155-6eae-4023-a488-0f395afbd673.png)

### 動作確認

ウィークリーノートを作成して、その週に完了したタスクが一覧化されていることを確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160235/f33eae9e-6f0e-4fb1-a17d-16ed6c3a5604.png)

以上！