開発book-knowledge-base

Kindle で買った蔵書を、ちゃんと自分の検索可能な本棚にしておきたい。これがずっと積み残しになっていた。Cloud Reader でページを送りながら、章単位で読み返したい本だけでも DB に入れておけば、Claude Code に「○○について書いてある本を引いて」と聞けば横串で当たる。今日はそのための取り込みを、ようやくバッチで本気で回した日。

やりたかったこと

筋書きは単純。Kindle Cloud Reader で開いた書籍を、自作の Chrome 拡張で1ページずつ巡回スクショ → /yomitoku で OCR を回して Markdown 化 → Turso の book-knowledge-base DB にチャンク投入 → kindle_library シェルフと amazon_metadata の行に紐付け → /restructure-book サブエージェントで目次を整形してセクションを統合する。

この一連を1コマンドにまとめたのが /yomitoku-kindle で、ASIN を渡せばあとは勝手に流れる。今日はこのコマンドを「複数バッチ並列で」回すのを試した。

非同期パイプラインで遊ばせない

1冊ずつ直列に回すと、撮影中は OCR が暇、OCR 中は撮影が暇で、ラインが半分しか動かない。途中で気づいて指示を出した。

「これだから待っている間に、非同期的に処理してほしいんです。OCR している間に Kindle 側のスクショ撮れるじゃないですか。逆もしかり」

これを境にパイプラインの組み方が変わった。Chrome のスクショは1冊ずつしか動かない(拡張の captureVisibleTab の制約)が、OCR と DB 投入と restructure サブエージェントはそれぞれ別ラインで動かせる。だから、

  • 1冊目のスクショが終わったら即ファイル移動して OCR をバックグラウンド起動
  • そのまま2冊目のスクショを別タブで開始
  • 1冊目の OCR が終わったら DB 投入 → restructure サブエージェント起動
  • そのあいだに2冊目のスクショが完走して、3冊目の Chrome タブを開く

という具合に、4本のライン(Chrome スクショ/OCR/DB 投入/restructure)をぜんぶ別フェーズで走らせる構図に切り替えた。これが効いて、午後のバッチでは「3つの本がそれぞれ別フェーズで同時進行」が普通になった。

書籍の選定 — 自己啓発は後回し、税務・会計を優先

最初のバッチではプロジェクト相性で選んだら「江副浩正」「小澤隆生」など人物伝・自己啓発寄りが入ってしまった。これを見て本人視点での優先順位を指示し直した。

「自己啓発系はとりあえず後回しにしたいんで、税務とか会計とかそういう専門書的なものを先にやりたい」

ここから方針が固まった。税務・会計・不動産の専門書を優先し、自己啓発・経営戦略寄りは後送り。

夕方になって候補リストを眺めていたとき、Amazon の本社ルポ的なやつや国税局資料調査課の解説本など、内容的に取り込んでもプロジェクトに刺さらない本が混じっていた。これは取り込まないと決めて「スキャン対象外」のラベルを kindle-batch-learnings.md に明示した。「あとで思い出して『これ取り込んでなかったっけ』ともう一度悩む」コストが消えるのが地味に効く。

今日の試行錯誤

一日でいくつかつまずいた。記録しておく。

4冊バッチ → 上位10冊に拡大せよと指示し直し: 当初「次の候補は4冊で」と返ってきたところを、「いや、上位10冊出してください」と打ち返した。優先順位だけ見たい局面で4冊だと狭すぎて、どれが除外候補かの判断ができない。

tool-call-malformed で1度落ちた: 候補リストにメモを反映してもらう途中で Your tool call was malformed and could not be parsed が出た。引数に長めのテーブルと指示文を一度に詰め込みすぎたのが原因。シンプルなツール呼び出しにバラして再実行したら通った。CLAUDE.md にも「ツール引数に大量に詰めない」と書いてある通りだった。

Mac/Windows 共存で ~/.claude/settings.json が rebase 競合: 朝の /doctor で Git のマージ競合マーカーが残っていると指摘された。原因は Mac 側でいじったフックを Windows に持ってきたときに、Windows 専用の Python フックと Mac 側の afplay フックが衝突していたこと。最初は Python 版を残したが、Mac 側で動かなくなるという話になり、結局 afplay があれば Mac で鳴らす/無ければ curl で Windows の再生サーバに投げる というクロスプラットフォーム版に統一して push しなおした。共存は可能と判断できたのが収穫。

「Reader did not become ready in 90s」で諦めた本が3冊: 図解中心の本、古い学術書、印刷レプリカ系(固定レイアウト配信)は Cloud Reader が位置情報を返さず、拡張の readiness 判定が通らなかった。3回試して同じエラーなら諦めて次に行く判断にした。成功する本は全部「近年の主流ビジネス書(reflowable)」で、ここに線が引けたのは今日いちばん大きな学び。除外リストに2冊追加した。

撮影中の Chrome 操作で Tabs cannot be edited: スクショ中に X を見たりタブを切り替えたりすると、別ウィンドウに分離した撮影タブの操作と競合してエラーで止まる。「この本の撮影中、2〜3分だけタブ操作を控えてください」とお願いされて、その通りにしたら以降の撮影が一発で通った。AI に頼むとはいえ、最後の数分は人間側がブラウザに触らない、という協力が要る。

今日の取り込み実績

4バッチ走らせて、最終的に取り込めたのは10冊強。除外(Kindle App Required / 固定レイアウト)が4冊、自己啓発寄りで後送りが2冊、Chrome 操作競合で次バッチに送ったのが1冊。books テーブルは298冊から301冊、さらに304冊、最終的に40冊リンク済みまで増えた。

書籍ジャンルとしては、

  • 数学入門の岩波新書
  • ビジネス書(短期目線のマーケ系)
  • 思考法・読解力系
  • セキュリティ(SSO 系)の技術書
  • Linux ネットワーク技術書
  • 週刊誌
  • 会計の通史本、半導体メーカーのルポ
  • 投資の名著(インデックス長期保有派)
  • 借入と返済の実務本
  • カラー図解の決算書本
  • 個人事業と法人化の比較本
  • 仕訳辞典
  • 簿記入門
  • エクセル仕事術
  • 財務諸表入門の文庫
  • 不動産投資の実務書2冊
  • 行動経済学の名著(後半に取り込んだ MIND OVER MONEY)

ぐらいが入った。ちゃんと「税務・会計・不動産」のラインに乗っている。

学び — 「並べる係」になりつつある

/yomitoku-kindle が手順を全部抱えてくれているので、こちらは ASIN を渡すだけで、

  • Chrome タブが開く
  • 撮影が始まる
  • OCR が走る
  • DB に入る
  • 目次が整形される
  • 検索テストまで通る

という流れがそのまま回る。当日やったのは「どの本を優先するか」「どこで諦めて次に行くか」「どの本を除外リストに入れるか」の判断だけで、実装も操作もほとんどしていない。書籍を DB に入れる作業が、ほぼ「並べる係」になった感覚がある。

並行して稼働しているライン数が増えるほど、頭の中で「いまどの本がどのフェーズか」を把握する負荷は上がる。だから途中で「これ進んでますか?」「あれ停滞してませんか?」と何度か聞いた。聞いてみて初めて、3冊目の撮影が10分間 0 枚で空振りしていた、というような事故が拾える。AI に任せた仕事ほど、人間が「進捗を確認する係」として要所で割り込まないとダメだ、というのは今日の体感としても残った。

明日は税務・会計の残り候補から上位8冊を回す。そのころにはまた除外パターンが増えて、「取り込めない本」の輪郭がもっとはっきりするはず。