obsidianで読書管理

最近Notionよりも軽くて好きな機能だけプラグインで入れられるobsidianを多用しています。

同期はObsidian Self-hosted LiveSyncを使用しているのでスマホともサクサク同期が出来て良いです。

Obsidian Self-hosted LiveSyncはこちらのサイトを参考に自宅鯖にDockerでCouchDBサーバを立てて運用しています。

obsidianテーマはPrimaryを使用しています。

obsidianで読書管理

obsidianのBook-Searchプラグインにタイトルなどを入力すると自動で書籍情報をネットから拾ってきてくれるので、それを自動集計プラグインDataview使って取り込んだ本データを一覧に出せるようにしています

各書籍のページはデフォルトでこんな感じ。(発行日は邦訳でなく原作の初版発行日を入れています)

フォルダ構成はこんな感じで、booksフォルダ内に各書籍のページデータ、本棚ファイルにはDateviewのコードを記述しています。

書籍データはBook-searchプラグインがネット上から取得してくれますが、発行日など上手く取れなかった場合は手動で入力しています。

プラグインのインストール

設定→コミュニティプラグインからBook SearchDataviewプラグインを検索してインストールし、それぞれ有効化します。

Book Searchの設定

適当なフォルダにbook-template.mdを作成します(名前は何でもいいです)。自分の場合templetesフォルダを作成したのでtempletes/book-template.mdになります。

book-template.md
---
title: "{{title}}"
author: "{{author}}"
publisher: "{{publisher}}"
publishedDate: "{{publishDate}}"
isbn: "{{isbn13}}"
series:
genre:
tags:
  - "読書"
  - "{{author}}"
cover: "{{coverUrl}}"
---

# {{title}}

<img src="{{coverUrl}}" alt="{{title}}" width="200px">

**著者:** {{author}}  
**出版社:** {{publisher}}  
**発行日:** {{publishDate}}  

---

## 概要
{{description}}

---

## 備考・メモ
- 

必要な情報があればテンプレートに追加します。(translator:で翻訳者やreadDate:で読書完了日、未読/既読フラグなど)isbnは古い本だとisbn10なので二項目作ってもいいかも

また、Book-Searchプラグインでwebから取得できる情報はこちらを参照

設定→Book SearchからTemplete fileの項目に上記のテンプレートファイルを設定します。ついでにNew File locationに書籍ファイルのデフォルトの作成場所を指定しておきます。

また可能であればGoogle CloudにてAPIキーを作成し、APIライブラリからBooks APIをONにしてAPIキー欄に打ち込みます。これでGoogle Booksからデータを取得出来るようになります。

書籍の登録

Ctrl+Pを押してBook Search: Create new book noteを選択し、出てきたウィンドウにタイトルなどを打ち込むと指定したフォルダに書影のファイルが作成されます。

取得出来ない情報は手打ちで入力していきます。

読み終えた感想なども手打ちで最後の備考メモに書いていきます。

このメニュー(Book Search: Create new book note)はobsidianの設定→ホットキーからCtrl+Bなどに設定しておくと便利です。

Dateviewで一覧画面を作成

書籍一覧を表示したいページを作成し、下記を入力します。

FROMには書影ファイルの入っているフォルダを指定してください。

本棚
```dataview
TABLE WITHOUT ID
"[[" + file.path + "|" + title + "]]" AS "タイトル",
author AS "著者",
dateformat(publishedDate, "yyyy/MM/dd") AS "発行日",
series
FROM "読書/books"
SORT author ASC, publishedDate ASC
```

上記では発行日→著者名の順でソートします。SORT部分をpublishedDate ASCのみにすれば発行日順となります。

WHERE genre = "ミステリ"をFROMの行の下に入れるとジャンルだけで絞り込めます。

作成したファイルはForce note view modeプラグインで閲覧モード固定にしておくと便利です。

また、Dataviewの設定でJavascriptを有効化するとさらに色々できます。

下記では作者の一番古い本を参照し、作者ごとに年代順に並べることができます。

本棚-作者順
```dataviewjs
const P = dv.pages('"読書/books"')
  .where(p => p.author && p.publishedDate)
  .array();

// 著者ごとの最古発行日を計算(ソート用)
const oldestByAuthor = {};
for (const p of P) {
  const author = p.author;
  const dateMs = dv.date(p.publishedDate).toMillis();
  if (!(author in oldestByAuthor) || dateMs < oldestByAuthor[author]) {
    oldestByAuthor[author] = dateMs;
  }
}

const rows = P
  .map(r => ({
    author: r.author,
    title: r.title ?? r.file.name,
    path: r.file.path,
    published: dv.date(r.publishedDate).toMillis(),
    series: r.series ?? "",
    sortKey: oldestByAuthor[r.author]
  }))
  .sort((a, b) =>
    a.sortKey - b.sortKey || a.published - b.published
  );

dv.table(
  ["タイトル", "著者", "発行日", "シリーズ"],
  rows.map(r => [
    `[[${r.path}|${r.title}]]`,
    r.author,
    dv.luxon.DateTime.fromMillis(r.published).toFormat("yyyy/MM/dd"),
    r.series
  ])
);

最初のコードでは著者名順でしたが、こちらでは作者の年代ごとに並べることができます。

あとは書籍を追加する度に自動で更新してくれるので楽ちん!だいぶ便利です

obsidian