notebook

都内でWEB系エンジニアやってます。

ObsidianのDataviewプラグインで振り返り用の日次まとめを作成する

最近は、ちょっとしたメモや開発時のログなどをすべてObsidianに集約し始めている

その流れで、今までNotionで行っていた毎日の振り返りもDaily Noteで書くようにした

週次の振り返りを行う際に、Notionだとデータベースを用意してテーブル表示してその中に記述していくスタイルだったので何もせずとも日々の振り返り内容が一覧できた

Obsidianだと1日1ファイルなので週次で今週何やったかみたいなのをさっと見るのが難しい

ということで、週次の振り返りの材料にするためその日何やっていたか思い出せるようなページが欲しいと考えた

ObsidianではDataviewプラグインで色々やっていたので今回もDataviewでゴニョゴニョやってみた

Daily Noteの内容

Daily Noteでは次のような項目を残している

  • Privateでのやったこと
  • 仕事でのやったこと
  • 仕事で消化ToDo

DailyNoteではToDoで消化したことを書いている、プライベートで何か取り組んだものも週次で確認したいので記録している

  • サンプルのDaily Note
---
week: 2023-W11
---


## ToDo
- [x] タスクB
- [x] タスクC


## Private
- 壊れたタストを修正した


## Y
- 資料作成
 - もう少し

## W

## T


#daily

DailyNoteの特定項目を集約する

特定ヘッダ以下のリストを取得する

Obsidianのdataviewプラグインで特定ヘッダー以下のタスクリストを取得する | swfz[:memo] << TIL

til.swfz.io

タスクリストの集約はこちらでも取り上げたが、この内容を少し変えてリストに対してフィルタする、テーブル表示の際につなげるというようなこともできる

振り返りでやったことをToDoではなくリストで記述しているのでその内容も載せる

function getListItemUnderHeader(page, header) {
  return page.file.lists.values.filter(v => {
    return v.section.type === "header" && v.section.subpath === header
  });
}

function combineText(list, prefix) {
  return list.map(line => prefix + "> ".repeat(line.position.start.col) + line.text).join("\n")
}

dv.header(3, "ToDoとやったこと");

const dailyPages = dv.pages("#daily").filter(p => p.file.name != "daily_note").sort(p => p.file.name, 'desc').limit(14);

const dailyRows = dailyPages.map(page => {
  const topicsText = combineText(getListItemUnderHeader(page, "Y"), "⬜ ")
  const privateText = combineText(getListItemUnderHeader(page, "Private"), "⏹ ")
  const tasks = page.file.tasks.where(t => t.completed).values.map(t => "✅ " + t.text).join("\n")

  const textList = [topicsText, privateText, tasks].filter(t => t.length > 0).join("\n");

  return [page.file.link, page.week, textList];
});

dv.table(["file", "Term", "DailyTopics"], dailyRows)

ざっくりやっていることは下記

  • #daily タグがついたページ(Daily Note)を直近14日分だけ取得
  • getListItemUnderHeaderで特定の文字列のヘッダ以下のリストを取得
    • Y、Privateのリスト
  • 完了したTaskListを取得
  • List,TaskListそれぞれを整形してつなげる
    • Prefixで適当な絵文字を入れてさっと見た際区別可能にしている
    • Listのインデントがあった場合にすべて同じ列始まりだと読みづらいので分かるようなインデントを入れている(>)
  • dataviewでテーブル表示する関数にヘッダ情報とデータを渡して表示する

結果はこんな感じ

まとめ

Obsidianで週次の振り返りに役立つ、その週のサマリーを表示できるようにした

次のパターンは覚えておけば何かと役立つはずなので誰かの参考になれば…

  • 特定ページからタスクリストの取得
  • 特定ページから特定ヘッダ以下のリストの取得

週次振り返りとその週何やったかを思い出すのに役立っている

しばらくしたら運用方法がガラッと変わっている可能性もあるが今のところこの方法でいい感じ