JpBooks

unlisted

by masatakeya

国立国会図書館サーチとopenBDから日本語書籍の書誌情報を取得し、読書ノートを自動生成します。

Updated 18d ago
View on GitHub

JpBooks — 日本語書籍検索・読書ノート生成プラグイン

書名・著者名から日本語書籍を検索し、書誌情報を流し込んだ読書ノートを作成するObsidianプラグインです。 Googleブックスではカバーしきれない絶版本・専門書・古い書籍を扱えるよう、国立国会図書館サーチを検索の起点にしています。

データソース

役割サービスエンドポイント認証
検索(書名・著者名)国立国会図書館サーチ SRU APIhttps://ndlsearch.ndl.go.jp/api/sru不要
内容紹介の補完openBDhttps://api.openbd.jp/v1/get不要
  • NDLサーチから 書名・著者・出版社・出版年・ISBN を取得します。レスポンスはSRU/XMLのため DOMParser で解析しています。
  • 選択した書籍のISBNでopenBDに問い合わせ、内容紹介(あらすじ) を補完します。
  • ISBNが取得できない書籍や、openBDに内容紹介がない書籍でも処理は止まりません。内容紹介は空欄のままノートが作成されます。
  • 書影(カバー画像)は取得しません。APIキーの設定も不要です。

API利用上の注意

  • NDLサーチは同時リクエスト数に制限があり、大量アクセスは遮断される場合があります(具体的な数値は非公開)。本プラグインは1回の操作につき検索1リクエスト・内容紹介1リクエストのみを送り、検索中は追加のリクエストを受け付けません。
  • アクセス集中で 429 Too Many Requests(または 503)が返った場合は、Retry-After に従って最大2回まで自動で再試行します(待機中はモーダルに待ち時間を表示)。それでも失敗した場合は、数分おいてから再検索してください。連続して検索しても、リクエストの間隔は1秒以上空けます。
  • 旧エンドポイント iss.ndl.go.jp は現行の ndlsearch.ndl.go.jp へリダイレクトされます。本プラグインは現行エンドポイントを直接呼びます。
  • openBDに公開されたレート制限はありませんが、同様に1件ずつ問い合わせます。

インストール・アップデート(BRAT)

本プラグインはコミュニティプラグイン一覧には登録していないため、BRAT(Obsidian42 - BRAT)経由でインストールします。BRATはGitHubリリースに添付された main.js / manifest.json / styles.css を取得します。

インストール

  1. コミュニティプラグインから BRAT をインストールして有効化
  2. コマンドパレットで 「BRAT: Add a beta plugin for testing」 を実行
  3. リポジトリ masatakeya/JpBooks を入力して追加
  4. 設定 → コミュニティプラグイン で JpBooks を有効化

アップデート

新しいリリースが公開されると、BRATが更新を検出します。

  • BRATの設定で起動時の自動アップデートチェックが有効なら、Obsidianを再起動するだけで更新されます
  • すぐに更新したい場合は、コマンドパレットで 「BRAT: Check for updates to all beta plugins and UPDATE」 を実行します
  • 更新後に動作が変わらない場合は、Obsidianを再起動するか、JpBooksを一度無効化→有効化してください
  • 現在のバージョンは 設定 → コミュニティプラグイン の JpBooks 欄で確認できます

使い方

  1. リボンの本アイコン、またはコマンドパレットから 「JpBooks: 書籍を検索して読書ノートを作成」 を実行
  2. 書名・著者名を入力して検索(どちらか一方だけでも可、Enterで検索)
  3. 候補一覧から1件選択(↑↓キーで移動、Enterで決定)
  4. 内容紹介を補完したうえで、テンプレートに沿ったノートが作成されます

設定

項目内容
保存先フォルダノートの作成先。存在しない場合は階層ごと自動作成します
ファイル名フォーマット既定は {{title}}。同名ファイルがある場合は連番を付けます
検索結果の最大件数1〜50件(既定20件)
図書のみを検索mediatype=books で雑誌記事・電子資料等を除外(既定オン)
内容紹介を取得するopenBDへの問い合わせのオン/オフ
作成後にノートを開く作成したノートを開くかどうか
テンプレート{{変数名}} 形式でカスタマイズ

テンプレート変数

変数内容
{{title}}書名(巻次を含む)
{{author}}著者名(カンマ区切り)
{{authors}}著者名({{author}} と同じ文字列表現)
{{publisher}}出版社
{{published}}出版年(YYYY / YYYY-MM / YYYY-MM-DD)
{{year}}出版年(YYYY)
{{isbn}}ISBN-13(ハイフンなし)
{{description}}内容紹介
{{DATE}}ノート作成日(YYYY-MM-DD)
{{DATE:YYYYMMDD}}ノート作成日(書式指定)

frontmatter(先頭の --- で囲まれた範囲)に挿入される値は、改行やダブルクォートを含んでいてもYAMLが壊れないよう自動でエスケープされます。 内容紹介を本文側に置きたい場合は、テンプレートの description: 行を削除し、本文に {{description}} を書いてください。

既定のテンプレート

---
title: "{{title}}"
author: "{{author}}"
publisher: "{{publisher}}"
published: "{{published}}"
isbn: "{{isbn}}"
description: "{{description}}"
read_date:
rating:
tags:
  - 読書ノート
created: {{DATE}}
---

## メモ

read_date(読了日)と rating(評価)は自動取得の対象外です。空欄で用意されるので手動で埋めてください。

開発

npm install
npm run dev    # 変更を監視してビルド
npm run build  # 型チェック + 本番ビルド

ビルド生成物は main.js です。Vaultで使うには main.js / manifest.json / styles.css を <Vault>/.obsidian/plugins/jpbooks/ にコピーし、設定画面でプラグインを有効化してください。

リリース手順

BRATに更新を届けるには、GitHubリリースの作成が必要です。これは .github/workflows/release.yml が自動で行います。

  1. manifest.json の version を上げる(例: 2.0.1 → 2.0.2)
  2. versions.json に "新バージョン": "minAppVersion" を追加する(package.json の version も合わせておく)
  3. npm run build で main.js を更新してコミットし、main にマージする
  4. GitHub Actions がビルドし、v なしのバージョン名(例: 2.0.2)でタグとリリースを作成して、main.js / manifest.json / styles.css を添付する
  • 同じバージョンのリリースが既にある場合、ワークフローは何もしません。バージョンを上げ忘れるとリリースは作成されません
  • Actions画面から手動実行(Run workflow)することもできます
  • BRATはリリースに添付された manifest.json のバージョンで更新を判定します。リリースを作成しただけでバージョンが同じままだと、更新として認識されません

構成

src/
  main.ts            プラグイン本体(コマンド・リボン登録)
  settings.ts        設定項目と設定画面
  note.ts            テンプレート展開とノート作成
  isbn.ts            ISBNの正規化・ISBN-10→13変換
  types.ts           書誌情報の型
  api/ndl.ts         NDLサーチ SRU クライアントとXML解析
  api/openbd.ts      openBDクライアント(内容紹介の取得)
  ui/SearchModal.ts  検索・候補選択モーダル

スコープ外

  • 書影(カバー画像)の取得・埋め込み
  • ISBN入力・バーコードスキャンによる検索(書名・著者名検索のみ)
  • 楽天ブックスAPIなど価格情報系データソース
  • 他プラグイン・スキルとの連携

For plugin developers

Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.