世界を動かす技術を、日本語で。

Show HN: 「Claude Code」を使った書棚のコーディング

2025年12月29日原文(balajmarius.com)

概要

  • 大量の蔵書 管理が困難になった経緯と課題
  • AIエージェント 活用で実現した自作書棚プロジェクト
  • データ収集・整形・UI構築 の具体的な手順と工夫
  • 人間の判断・センス が果たす役割の明確化
  • AI時代の実行力と審美眼 の価値についての考察

蔵書管理の限界と葛藤

  • 所有書籍数が 500冊 を超えた時点で、記憶による管理が困難化
  • スプレッドシート など単純な方法も「面倒さ」で未実施
  • 実行と意図のギャップ がプロジェクトを停滞させる主因
  • AIエージェントの登場で「 実行の壁」が低下
  • 自分の役割 が「実行」から「判断」へ変化する転機

既存ツールの限界

  • ISBNスキャナーアプリ はローカル版や古書で失敗
  • Goodreads などもマイナー出版社や珍しい書籍に非対応
  • 不完全なデータ が逆にストレスとなり、作業の中断を招く
  • 必要なのは「 不完全さを許容できる仕組み」の構築

データ収集とAI活用

  • まず 全書籍の写真(470枚) を撮影しPCに保存
  • 画像ファイルの リネーム・変換 など前処理を自動化
  • AIにより OpenAI Vision API 経由でタイトル・著者・出版社を抽出
  • 90%の精度 で自動抽出、残りは手作業で修正
  • 追加書籍も 同パイプライン で簡単に反映可能

表紙画像の取得と工夫

  • メタデータは整ったが、 表紙画像 は未取得
  • Open Library API でカバー画像取得→半数が低品質・不一致
  • SerpAPI経由Google画像検索 で不足分を補完
  • 10冊のみ手作業修正、大半は自動化で対応

書棚UIの再現と進化

  • 最初は 表紙グリッド、だが無機質で物足りない
  • 本棚らしさ は背表紙のランダムさ・色・厚みにあると再認識
  • 背幅はページ数から自動算出、色も自動抽出し可読性も確保
  • 実物本棚の質感 をWeb上で再現する工夫

アニメーションと体験の追求

  • 静的な表示に違和感、 Framer Motion で背表紙の傾きアニメ追加
  • 最初は「 動きが不自然」→AIの指摘でrender cycle外アニメに修正
  • アイデア試行コストの低下 で細部までこだわれるように

不要な機能の削除と取捨選択

  • 無限スクロール を実装→体験悪化で削除決断
  • 動くコード」でも「 不要なら消す判断」は人間の役割

モバイル対応とUIの多様化

  • デスクトップでは満足も、 モバイルでは横スクロールが不便
  • 縦積みスタックビュー をAIに指示し即実装
  • アニメ・色・データ構造も流用、 説明不要の完成度

人間の役割とAIの実行

  • コードは Claude が執筆・実装
  • 自分は「 90%で良しとする判断」「手作業修正」「UI選択」「不要機能削除」など センスと決断 を担当
  • 実行コスト低下 で、より「審美眼」や「判断力」が価値を持つ時代へ

AI時代の実行とセンス

  • 実行はAIが担う時代、人間は「何を良しとするか」を決める役割
  • 書棚プロジェクト は、AIと人間の最適な分担の象徴
  • 手作業時代の感覚 が過去のものに感じられるほどの変化
  • 実行コストは下がるが、センスの価値は変わらない という実感

Hackerたちの意見

これらは、現在のバイブコーディングにぴったりのプロジェクトサイズだね。あるポイントを超えると、プロジェクトが大きすぎたり、依存関係が多すぎたりして、コンテキストの管理にすごく気を使わなきゃいけなくなる。そうなると、LLMがコードを生成しすぎたり、微妙なバグを生むことを期待しなきゃいけない。そうなったら、個人的にはブレインストーミングモードに戻って、LLMをデザインの手助けに使うのが一番いいと思う。コードは自分で書くか、コードの骨組みだけ自分で作って、LLMに埋めてもらうのがいいよ。コードが多すぎると、LLMは既存のコードを使ったり、賢く数行のコードを置き換えたりするのがまだできないみたい。ほとんどの場合、新しい抽象化をたくさん追加しちゃう。

既存のコードを使ったり、賢く数行のコードを置き換えたりすることについては、明確に伝えられるよ。

プロジェクトのサイズに関しては、バイブコーディングの考えに同意するよ。生成されたコードを見ないことも多いしね。でも、Claude Codeを使って大きなプロジェクトのコードを書くのには問題ないよ。既存のパターンに適応するのも全然OK。ただ、バイブコーディングではないけどね。モジュールの設計は自分でやるし、最終的にどうしたいかはほぼ分かってる。コードはすべて詳細にレビューして、正確に自分が欲しいものになってるか確認するよ。良い指示を書いて、コンテキストをうまく管理する必要があるね(参照用のサンプルコードを与えたり、ガイダンス用のagent.mdファイルを用意したり)。

現在、雰囲気でコーディングするのにぴったりなサイズのプロジェクトだね。今のところ…これからどんどん良くなって、最終的にはすべてのソフトウェアがこの方法で書かれるようになるだろうね。

今のエンジニアリングコードはバイナリだけじゃなくて、雰囲気コーディングからコパイロットスタイル(デザインやコーディングの支援)を経て、デザインだけの手伝いやAIなしまで、スペクトラムになってる。今の能力は、かなり大きなプロジェクトやリポジトリでコパイロットの範囲をほぼ完全にミックス&マッチできるほど強いよ。

ケン・マイルズの7000rpmの名言を思い出すな。これが起こるのはどれくらいの規模だと思う?この文脈で最も関連性のあるサイズの指標は何だろう。

それとも、人間が同じタイプの問題を解決するために設計されたソフトウェアアーキテクチャの方法を適用することもできるよ。コードベースがあるサイズを超えると、他のモジュールの実装に依存するコードを持つことは逆効果になる(密結合)。Claude Codeの用語で言うと、現在のアーキテクチャがモデルにあまりにも多くのコード行を読み込ませていて、パフォーマンスを低下させているってこと。解決策は人間と同じで、「実装ではなくインターフェースにプログラムする」ことだ。--Design Patterns: Elements of Reusable Object-Oriented Software (1994) アプリケーションの異なる部分の境界を慎重に描き、他のモジュールが必要とする部分だけを公開するシンプルなインターフェースを作る必要がある。各インターフェース定義を別のファイルに分けて、Claude(または人間の同僚)には、そのモジュールの内部作業をしているとき以外はインターフェースだけを使うように指示する。そうすれば、大きなコンテキストの部分が解放されて、Claudeは進捗を続けられるようになる。もちろん、プロジェクトは成長し続ける可能性があり、比較的小さなインターフェース宣言が文脈に収まらなくなることもある。その場合は、アプリケーションを見直して、他の部分から分離できる大きな部分があるかどうかを確認する価値がある。Claudeが行う変更の数と範囲を管理することも役立つだろう。すべての仕事がアプリケーションの異なる部分に触れる必要があるわけではないから、プロジェクト管理のスキルがさらに役立つかもしれない。

コードがモジュラーであれば、この制限はなくなると思う。AIが毎回全コードベースを読む必要があるなら確かにそうだけど、すべてがうまく設計されていれば、毎回限られたコードセットだけを扱えばいいから、その部分では得意なんだ。

90%の精度で十分だと決めた。多くのシステムはフォールトトレラントだし、LLMが新しいバグを生む世界ではそれを思い出すのが大事だよね。この考え方を持ってるOPには拍手を送りたい。もっと多くの反AI派の人たちも、たまにはこのアイデアを考えてみるといいと思う。

同意だね。LLMとやり取りしてると、たまに面白い結果が出ることがあるよね。もし90%のやり取りがポジティブな結果を生むなら…それはGoogle検索結果を掘り進むよりも改善だよ。

これは偶然だね。数日前に同じアイデアを思いついて、Claudeを使ってライブラリをバイブコーディングしたんだ。https://nindalf.com/books。元々はもっと読書をするためのきっかけにするつもりだったんだけど、成功したと言えるよ。数年間の低迷を経て、今年の目標を達成したんだ。ハイライトやメモを見るのも好きだし、このUIのおかげで読みやすくなった。Claudeとの体験はほとんど良好だったよ。確かに、UIは自分が考えたものよりずっと良いし、バックエンドも自分が書くものに近い。満足できないときは、欠点を説明できて、ほとんど自分で修正してくれるんだ。こういう小規模で自己完結したプロジェクトは、Claudeのおかげで実現できた。時にはうまくいかないこともあったけどね。開始日と終了日の検証は、z.string().or(z.date()).optional().transform((val) => (val ? new Date(val) : undefined))って決めたんだけど、すごく複雑に見えた。簡略化できるか聞いたら、Claudeは「無理だよ」って言った。z.date().optional.を提案したら、Claudeは「それは不可能だ」って根気よく説明してくれた。でも、試してみたらうまくいった。「あなたは絶対に正しい!」って言ってくれたけど、この行動は例外だったね。

あなたの本のライブラリのコードはありますか?僕も一年間に読んだ本を覚えるために似たようなことをしたいんです。

Hacker Newsで議論の続きを見る