その他

【obsidian】デイリーノートに投稿した文章を検索し日付ごとに並び替える方法(Dataview.js利用)

この記事は約3分で読めます。

こんにちは、宮﨑です。
突然ですが、私の趣味はプロ野球の観戦です。

私のObsidianのデイリーノートには推しチーム(日ハム)関連の記述がかなり多いです。

例えばこんな感じ

2/18のデイリーノート、福島連投手支配下登録おめでとうございます。

Obsidian Memosを導入したことでさらに増えた気がします。これ導入したことでデイリーノート書くハードルがかなり下がりました。かなりおすすめです。

そこでふと思いました……選手ごとに過去の自分がどんな投稿したかまとめたいなと。

やりたいこと

  • 選手ページを表示した時に、今までのデイリーノートの投稿からその選手について言及したリストを全て取得する。
  • それを日付ごとに並び替えして最新のものが上にくるようにする。

作ってみました

適当にログを集計したい[Obsidian memos x dataview]
https://note.com/8amanami/n/n1b9b8857227a

今回の作成にあたってこちらの記事をめちゃくちゃ参考にしました。

こちらの記事に書かれているコードをベースとしつつ、日付並び替えや表示ができるように変更してみた結果がこちらになります。

福島蓮投手のページより

このように、デイリーノートの日付順に投稿されたリストを取得できるようになっています。
2/18のデイリーノートの内容もちゃんと取得されていますね。

もちろん日付や他の選手のリンクを押下した際にはきちんと遷移するようになっています。

コードはこんな感じです。

```dataviewjs 
const fileName = dv.current().file.name
const pagesIncludeTargetLine = dv.pages('"02_Daily"').file.lists.where(l => l.text.includes(fileName)).sort(page => page.header, "desc")

let dataObj = {};
for (const list of pagesIncludeTargetLine) { 
	if(dataObj[list.section]){
		dataObj[list.section] += '<br><br>' + list.text;
	} else { 
	dataObj[list.section] = list.text;
	}
} 

let dataArray = Object.entries(dataObj).map(([key, value]) => [key, value])

dv.table(['日付', 'ログ'], dataArray)
```

今回は1行目に記載されているように、現在のファイル名でデイリーノートの検索をかけるようになっています。

もしさらに手を加えてみたい方がいらっしゃれば、公式ドキュメントを追加で読んでおくことをおすすめします。公式ドキュメントがやはり一番強い。
https://blacksmithgu.github.io/obsidian-dataview/

作ってみた感想

色々と苦肉の策感があるコードですが、個人的には満足しています。

ファイル名を参照するようにしたため、テンプレートとしてタイトルに選手名を記載するだけですぐ参照できるようになっているのが使いやすいですし、

選手に思ったことをすぐに確認できるのは思っていたよりも便利でした。
過去の自分がいいなと思っていた選手が、その後成績を残しているとかなり嬉しいですね。

テンプレートはこんな感じです。

次は選手一覧にてその選手についてデイリーノートで言及された最終日と言及数を取得するテーブルについて記事にしていこうと思います。

最後まで見ていただきありがとうございました!!