Obsidianでランダムノートを表示するコードブロック

なかなかはまった。

僕のObsiianのとあるフォルダには「判断のヒント」とか「気をつけたいこと」とか「こういうことをしてみよう」みたいな、1日の最初に見てその日の過ごし方の意識付けができるような言葉が列挙されている。
朝テレビでやってる占いコーナーの「今日のラッキーアイテム」みたいな感じかな。もしくは「今日の要注意ポイント」みたいな。

そんなノートがいっぱいあるから、ほぼ毎日見るであろうDaily Noteにその日のヒントになる言葉や文章をランダムで表示したかった。

結論から言うと、これを実現できたのはObsidian Query LanguageっていうプラグインでDaily Noteのテンプレートに書いたコードブロックがこれ。

```oql
name: Hint of a day
query: "path:02_HintOfADay"
template: "list"
limit: 3
sort: "random"
badge: false
```

ここまでたどり着いた経緯はこんな感じ。

「obsidian random note」とかで検索をすると見つかるのは

  • Random note(コアプラグイン)
  • Smart Random Note(コミュニティプラグイン

あたりなんだけど、どれもコマンドでノートをランダムに開く機能で、Daily Noteのテンプレートにコードブロックを置いて毎日ランダムにノートを表示させて確認するような使い方ができない。

そんな中で見つけたのがこの記事。

なるほど、Obsidian Query Languageってプラグインを使うのね。
で、記事通りにコードブロックを作ってみたらなかなか良さげ。
ただ記事にもある通りDaily Noteもリストに出てきちゃう。
プラグインのバグなのかとも思ったんだけど、よく観察したら

query: "~~"

の「~~」での検索はノートのパスに対しても行われるんだけど、ノートの中の文字列に対しても行われてるらしい。
テンプレートにこのコードブロックを書いて毎日のDaily Noteにこのランダム表示をだそうって考えてるわけだから、今後毎日作成するDaily Noteにはこの「~~」っていう文字列が入ることになって、そうなると本来ランダム表示に入ってほしくないDaily Noteが今後どんどん入ってくることになる。

プラグインの公式ページには

query: "'folder1/" 

って書けば「Render a list of 10 random notes in folder1/.」だって書いてあるけど、これは間違いってことね。ノートの中の文字列も検索対象です。ノートの中に「folder1/」っていう文字列があるノートも検索に引っかかります。

ということで調べたのが、queryでパスを指定することができないのかということ。
公式ページのReadMeには

query: path: "'notes"

って書けばパスの指定ができるらしいんだけど、これもうまくいかない。

色々試行錯誤してわかったのは以下。

  • 「path:」もダブルクオーテーションの中に入れる必要がある
  • パスの指定はルートから書く必要はなくてフォルダ名だけでいいらしい

Obsidian内では表示させたいノートは「05_ThemeOfLife/02_HintOfADay」にあるんだけどコードとしては

query: "path:02_HintOfADay"

ということらしい。
情報収集とか試行錯誤でほぼ1日費やしちゃった。