
2026/01/11 8:45
Show HN:Librario――Google Books、ISBNDB などを統合する書籍メタデータ API ---
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Librario は、Go で書かれた早期段階の AGPL ライセンス付き本メタデータ集約 API です。Google Books、ISBNDB、Hardcover からデータを取得し、Goodreads と Anna’s Archive を追加予定です。フィールド固有の戦略(例:タイトルスコアリング、表紙品質評価)で競合を解決し、マージ済み結果を PostgreSQL に保存します。パフォーマンス向上のためにキャッシュ層が追加されています。本サービスは現在プレ・アルファ段階で、小規模な VPS 上で稼働しており、サードパーティーの制限に達していません。バージョン 1.0 前にデータベーススキーマを再設計する作業が進行中で、元々 AI が生成した設計は不明瞭だったため SourceHut の開発者によって推進されています。Librario は著者の約 1,800 冊の本管理ニーズから始まり、現在は単一の JSON レスポンスに完全な本情報を提供します ― 例:
がマージ済みメタデータを返します。コードは SourceHut (curl https://librario.example/api/9781328879943) にホストされており、フィードバック・パッチ・貢献を歓迎しています。SourceHut コンサルティングとの 5 ヶ月間の関与により開発進捗は遅れましたが、コア機能は安定しています。https://sr.ht/~pagina394/librario/
本文
TLDR
Librario は Google Books、ISBNDB、Hardcover からデータを集約し、単一のレスポンスで返す書籍メタデータ API です。複数ソースに分散している完全な書籍情報を一元化する問題を解決します。現在はプレアルファ版で、AGPL ライセンス下にあり、今すぐ試すことができます。
私は約1,800冊の個人蔵書があります。
図書管理ツールを作る過程で、既存のソリューションでは必要な全データを提供してくれないことに気づきました―シリーズ情報はあるサービスで、ジャンルは別のサービスで、良い表紙画像も別のサービスで取得できるものの、どこにも「すべて」を網羅したものはありませんでした。
そこで Librario(Go で実装)を作り始めました。主な機能は以下の通りです。
- Google Books、ISBNDB、Hardcover(近日追加予定:Goodreads と Anna’s Archive)など複数ソースから書籍情報を取得
- 取得したデータを統合し、将来の検索に備えて PostgreSQL データベースへ保存
- 書籍が増えるにつれてデータベース自体を強化
以下で例としてレスポンスを見ることも、直接試すこともできます。
curl -s \ -H 'Authorization: Bearer librario_ARbmrp1fjBpDywzhvrQcByA4sZ9pn7D5HEk0kmS34eqRcaujyt0enCZ' \ https://api.librario.dev/v1/book/9781328879943 | jq .
これはプレアルファ版で、軽量 VPS 上で動作しています。サードパーティサービスの制限にまだ達していないため、今回の記事の流れによってはコードがうまく対処できるかどうかを確認することになるでしょう。
マージ戦略
マージはサービスの中核であり、異なるソースから来た衝突データをどのように統合するかを決めるのが最も難しい部分でした。
現時点では単純だが有効なフィールド別戦略を採用しています。
-
各抽出器(Extractor)には優先度が設定されており、結果はその優先度でソートされてからマージ されます。
優先度だけでは不十分なので、フィールドごとに異なる処理を行います。- タイトル – スコアリングシステムを使用。括弧や角かっこが含まれるタイトル(サブタイトルがメインタイトル欄に混入されていることがあります)や長すぎるタイトル(80文字以上)はペナルティを課します。これらはしばしば版情報など他のメタデータと混ざってしまうためです。
- 表紙画像 – 候補URLを全て収集し、ダウンロード後に寸法・画質でスコアリング。最良のものをローカルに保存しサーバーから配信します。
- その他フィールド(出版社、言語、ページ数など) – 優先度順で最初に見つかった非空値を採用。シンプルですが機能します。
最近はキャッシュレイヤー[2]を追加し、処理速度が大幅に向上しました。
net/http から Fiber への移行も検討したことがありますが([3])、標準ライブラリ外へ拡張するのは違和感があり、大きなメリットが得られないと判断し、実装を見送っています。
データベースレイヤー
データベース層は v1.0 以前に再設計中です[4]。正直言って、オリジナルのスキーマは AI が作成したもので、SQLC[5] と良好なドキュメントで導き出そうとしましたが、データベース設計が得意分野ではないためコードに自信を持てませんでした。
そのため SourceHut の開発者チーム[6] に依頼し、正しく書き直してもらうことにしました。
5 か月前の契約で進行中ですが、彼らのスケジュールに合わせる形になり、開発は遅れ気味です。
以前 HN のスレッドでもこのプロジェクトを紹介したことがあります[7]ので、ついに試してもらえるものが完成しました。
- コードは AGPL ライセンスで SourceHut 上に公開しています[8]。フィードバックやパッチの提出は大歓迎です[9]。