Show HN:Librario――Google Books、ISBNDB などを統合する書籍メタデータ API

---

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 レスポンスに完全な本情報を提供します ― 例:

curl https://librario.example/api/9781328879943
がマージ済みメタデータを返します。コードは SourceHut (
https://sr.ht/~pagina394/librario/
) にホストされており、フィードバック・パッチ・貢献を歓迎しています。SourceHut コンサルティングとの 5 ヶ月間の関与により開発進捗は遅れましたが、コア機能は安定しています。

本文

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]。

リンク

ラベルURL
[0]https://sr.ht/~pagina394/librario/
[1]https://paste.sr.ht/~jamesponddotco/a6c3b1130133f384cffd25b3…
[2]https://todo.sr.ht/~pagina394/librario/16
[3]https://todo.sr.ht/~pagina394/librario/13
[4]https://todo.sr.ht/~pagina394/librario/14
[5]https://sqlc.dev
[6]https://sourcehut.org/consultancy/
[7]https://news.ycombinator.com/item?id=45419234
[8]https://sr.ht/~pagina394/librario/
[9]https://git.sr.ht/~pagina394/librario/tree/trunk/item/CONTRI…

同じ日のほかのニュース

一覧に戻る →

2026/01/11 10:50

**Show HN:Ferrite – Rustで作られたマークダウンエディタ、ネイティブMermaid図描画機能付き**

## Japanese Translation: Ferrite は、egui で構築された軽量でネイティブな Rust テキストエディタで、Markdown、JSON、YAML、および TOML ファイルをサポートします。主な編集機能には、WYSIWYG Markdown 編集、ライブプレビュー、クリックで編集できる書式設定ボタン、40 以上の言語に対応した構文ハイライト、正規表現検索&置換、タブごとの Undo/Redo、およびインライン編集が可能な階層データ用トリービューがあります。 表示モードは Raw エディタ、レンダリングビュー、分割ビュー(可変サイズの区切り線付き)、Zen モード、Raw とレンダリングビュー間の双方向同期スクロールから構成されます。 MermaidJS ダイアグラム描画は完全に統合されており、11 種類のダイアグラムをサポートします;バージョン 0.2.1 では高度なシーケンス制御フローブロックとネストされた状態が追加されました。 ワークスペース機能:フォルダーをファイルツリーで開く、クイックスイッチャー(`Ctrl+P`)、検索‑イン‑ファイル(`Ctrl+Shift+F`)、Git 統合(ステータスアイコン、ステージング、コミット、プッシュ/プル、競合解決)およびセッション永続化により、タブ、カーソル位置、およびスクロールオフセットが再起動時に復元されます。 追加の UI オプションには、実行時切替可能なライト/ダークテーマ、ドキュメントアウトラインパネル、テーマ付き HTML へのエクスポートまたは HTML としてコピー、書式設定ツールバー、JSON/YAML をシェルコマンドでパイプするライブパイプライン、およびカスタム境界なしウィンドウモードがあります。 インストールはプリビルトバイナリ(Windows zip、macOS tar.gz、Linux .deb または tar.gz)またはソースビルド(`cargo build --release`)で利用可能です。Rust 1.70+ とプラットフォーム固有の依存関係が必要です。主なショートカット:ファイル操作は `Ctrl+N/O/S/W`、タブは `Ctrl+Tab/Shift+Tab`、クイックスイッチャーは `Ctrl+P`、フルスクリーンは `F11`、設定は `Ctrl+,` などです。 Ferrite は MIT ライセンスの下でオープンソースであり、Rust 1.70+、egui 0.28、comrak 0.22(Markdown パーシング)、syntect 5.1(構文ハイライト)、git2 0.19(Git 統合)に依存しています。

2026/01/11 3:58

**GhostTyの最大メモリリークを発見し修正する**

## Japanese Translation: Ghostty の長時間にわたるセッションは、`mmap`(スクロールバックバッファに使用される)で割り当てられたページが解放されないため、最大 37 GB の RAM をリークしていました。アプリはターミナルコンテンツを **PageList** に保存します。これは「標準」(プールから取得したもの)または「非標準」(`mmap`)のメモリページで構成される双方向リンクリストです。スクロールバックの削減時に、Ghostty は誤って最も古いページを新しいページとして再利用します:そのメタデータだけを「標準サイズ」にリサイズし、大きな `mmap` 割り当てはそのまま残します。この再利用されたページが後で解放されると、Ghostty はそれを標準とみなし、`munmap` を呼び出す代わりにプールへ返却してしまい、メモリブロックがリークしたままとなります。 このバグは Ghostty 1.0 から存在しましたが、大量のスクロールバックバッファ(例:多くの絵文字とハイパーリンクを含む Claude Code など)を生成する CLI アプリでのみ顕在化し、非標準ページ割り当てをトリガーします。既存のリーク検出器は特定の実行時条件下で発生するため、検知できませんでした。 新しいテストが問題を再現しリークを確認しました。統合された修正では、削減中に **非標準ページを破棄**(`self.destroyNode(first)`)し、プールから新しい標準サイズのページで置き換えるようになっています。この修正は Ghostty 1.3(3 月)に組み込まれます。既に Nightly リリースにはパッチが含まれています。 さらに、macOS のメモリタグ付け(`mach.taggedPageAllocator(.application_specific_1)`)を追加し、PageList 割り当てにタグを付与して修正の検出と確認を簡素化しました。この更新により、長時間ターミナルセッションを実行するユーザー—特に重い CLI ワークロードを扱う開発者は――メモリ使用量が急増する問題が解消され、個人およびプロダクションでアプリに依存している組織の両方に対し、より安定かつ信頼性の高い Ghostty エクスペリエンスを提供します。

2026/01/11 1:56

**HNの投稿:** 「Claude Code を使って100冊の本との関連性を発見しました」

## Japanese Translation: **概要** 本文は、スタートアップのピボットが巧妙な洞察よりもむしろ絶望感から動かされることが多いと主張しています。後知恵バイアスがこれらの反応的シフトを事後的に戦略的計画として見せかけ、意図的な天才像を与える仕方を説明しています。代表例として、Odeo が新しいベンチャーへと変貌するケースが挙げられ、ピボット手法の実践的なテキストブック例として機能します。著者は将来のピボットも短期的圧力によって促される反応的なものに留まる可能性が高いと予測し、このパターンを認識することで、創業者・投資家・チームがスタートアップエコシステム内で戦略やリスクについて考える方法を再構築し、企業が方向転換する理由をより現実的に評価できるよう促すと述べています。