Jazzと読書の日々

iPadを筆記具として使う方法を模索します

Obsidian dataviewで蔵書リストを作ってみよう

メタデータの勉強をしました。 なるほど、これを使うならフロントマターが完璧で究極だわ。 そのための入口を開いてみましょう。

Obsidian - Connected Notes 1.4.4
分類: 仕事効率化,辞書/辞典/その他
価格: 無料 (Dynalist Inc.)

Book Searchをまず導入します。 GoogleBooksを検索するプラグインです。 コミュニティプラグインからインストールしてください。

Obsidian plugin: Book Search

使い方

あらかじめ、設定で保存先をbookフォルダとします。

リボンにボタンがあるので起動。 キーワードを尋ねてくるので、著者名でも題名でも構いません。 入力すれば検索結果がリストアップされます。

選択するとデータがbookフォルダに保存されます。

基本情報

ファイルのフロントマターにタイトルや著者名などが入ります。 ここに読後感想とか追記して肥やしていく。

それにしても情報量が多い。 簡単な要約まで埋め込まれてます。

BookList.md

dataviewで下記スクリプトを作ります。

```dataviewjs
d = dv.pages('"book"')
  .sort(x => x.publishDate, "desc")
  .map(x => [ "![image|60]("+x.coverUrl+")", dv.fileLink(x.file.name, false, x.title), x.authors, x.publishDate])

dv.table(["著書", "題名", "著作者", "発刊日"], d)
```

これをリーディングビューで見るとリスト化します。

あら、わかりやすい。 題名をタップするとファイルが開きます。

検索

さらに検索もできるようにしましょう。

検索::

```dataviewjs
const a = dv.current().検索
d = dv.pages('"book"')
  .filter(x => x.file.name.includes([a]))
  .sort(x => x.publishDate, "desc")
  .map(x => [ "![image|60]("+x.coverUrl+")", dv.fileLink(x.file.name, false, x.title), x.authors, x.publishDate])

dv.table(["著書", "題名", "著作者", "発刊日"], d)
```

「検索::」のあとにキーワードを入れると絞り込みをします。 対象にしているのはファイル名なんですけどね。 一応、題名と著作者名を検索することができます。

蔵書検索

入力欄を使うと、dv.table()は多重に表示してしまう。

なので、あっさり書影を並べるタイプも考えました。

```dataviewjs
dv.span("蔵書検索")
const a = dv.el("input")
a.placeholder = "keyword"
a.style = "font-size:18px;background:whitesmoke;width:100%;"
dv.paragraph("---")
const b = dv.el("div","")
a.onkeyup = function(){
  d = dv.pages('"book"')
  .filter(x => x.file.name.includes([a.value]))
  .sort(x => x.publishDate, "desc")
  .map(x => "<a href=obsidian://open?file="+encodeURI(x.file.name)+"><img width=98 src="+x.coverUrl+"></a>")
  b.innerHTML = d.join(" ")
}
```

これをリーディングビューにするとこんな感じ。

ふふふ、気に入った。

まとめ

ほらほらこれは「データベース」。