[{"data":1,"prerenderedAt":254},["ShallowReactive",2],{"content-/book-db-zatsugaku-subagent-restructure":3,"all-pages-for-dir":231,"related-/book-db-zatsugaku-subagent-restructure":232,"og-image-/book-db-zatsugaku-subagent-restructure":253},{"id":4,"title":5,"body":6,"category":211,"concepts":212,"description":213,"extension":214,"meta":215,"navigation":216,"ogImage":212,"path":217,"project_name":218,"published":219,"publishedAt":220,"seo":221,"source":222,"stem":223,"tags":224,"todo":212,"unpublished":219,"updatedAt":212,"__hash__":230},"pages/2026-09/2026-09-30/book-db-zatsugaku-subagent-restructure.md","蔵書DBの書籍取り込み：雑学本をサブエージェント5体で1項目1チャンクに分け直し、Webセキュリティの資料をOCRから仕上げる",{"type":7,"value":8,"toc":201},"minimark",[9,14,18,21,24,29,32,35,38,41,44,47,51,54,57,78,81,84,87,90,93,96,99,105,108,111,115,122,129,132,143,146,153,156,159,163,166,169,172,175,178,181,192,195,198],[10,11,13],"h1",{"id":12},"蔵書dbの書籍取り込み雑学本の分け直しとwebセキュリティの資料のocr","蔵書DBの書籍取り込み：雑学本の分け直しとWebセキュリティの資料のOCR",[15,16,17],"p",{},"朝、連番で管理しているフォルダから雑学本のPDFのパスを貼り、「これってもう取り込んでましたっけ？」と聞いた。\n取り込んでいなければ、読み解く（OCR）ところから全部やってきれいにしておいてほしい、という頼み方である。",[15,19,20],{},"答えは「取り込み済み」だった。\n5月13日の時点で766チャンクとして蔵書DBに入っており、OCRはやり直さずに済んだ。\n残っていたのはクリーンアップである。",[15,22,23],{},"午後はスキャナの保存先に置いたWebセキュリティの資料を、リネームから順に通した。\nどちらの本でも、同じことを何度か確かめ直した。\n戻ってきた結果を、どこまで信じてよいか。",[25,26,28],"h2",{"id":27},"雑学本の図1253枚から飾りを選り分ける","雑学本の図1,253枚から飾りを選り分ける",[15,30,31],{},"クリーンアップで手間がかかったのは、図の仕分けだった。\nR2から図を手元に落とし、判定用のシートを53枚作らせた。\nまず2枚だけは Claude Code 自身に見させて、判定基準をすり合わせた。\n残りのシートはサブエージェント5体に判定させた。",[15,33,34],{},"判定リストを保存する段で、長いヒアドキュメントがシェルで崩れた。\n1ファイルずつ Write で保存する形に切り替えて通した。",[15,36,37],{},"結果は、1,253枚のうち1,036枚が装飾だった。\n判定は妥当だった。\n目次ページの図は「PART 番号」の飾り数字で、p8〜p162 は写真中心のため飾りが少ない構成だった。\n表紙と目次のまわりが消されていないことも確かめさせたうえで、本文に貼られていた1,032枚の図タグを外した。\n柱（ページ上部の書名や章名）の除去対象21件もあわせて見させている。\n全文検索（FTS）の再構築は時間がかかるので、バックグラウンドで流した。",[15,39,40],{},"検索は通った。\nただし「別腹」のような2文字の語は、trigram 索引の対象外になる。",[15,42,43],{},"ブラウザで確かめたときは、最初にサイドバーの表紙まで拾っていた。\n本文の図だけに絞って撮り直させた。\n自分のほうからもスクリーンショットを送った。\np210 では花飾りが3つ消えて本文だけになり、写真を残した p211 では写真がそのまま表示されていた。",[15,45,46],{},"履歴に書こうとした「未参照3枚」は、推測で書かずに実測で裏を取らせた。\n最初は xargs がファイル名の空白で割れてしまい、DB側で直接突き合わせる方法に切り替えた。",[25,48,50],{"id":49},"サブエージェントで分担してと頼んだあと","「サブエージェントで分担して」と頼んだあと",[15,52,53],{},"クリーンアップの報告を受けて、もう一段頼んだ。\nたぶん Sonnet が使えると思うので頑張ってほしい、サブエージェントで分担を決めてやってほしい、という内容である。\nこれを「1項目＝1チャンク」への分け直しとして進めてもらった。",[15,55,56],{},"着手前に、いくつか地ならしをさせた。",[58,59,60,64,72,75],"ul",{},[61,62,63],"li",{},"1ページに複数のチャンクがあっても、DBとビューアが対応できるか",[61,65,66,67,71],{},"項目の後ろに ",[68,69,70],"code",{},"▽"," で始まる短文として混ざっていた「一言雑学」が、どこにどれだけあるか",[61,73,74],{},"一言雑学のページの中身が、前のページに全部入っているか",[61,76,77],{},"全文検索の索引が、トリガーで自動更新されるか",[15,79,80],{},"途中で、シェル経由だとバックスラッシュが崩れる問題にも当たった。\nスクリプトはファイルに書いてから実行する形にそろえさせた。\nDBへ適用するスクリプトも、試しの指示1件で動かしてから本番の指示に使わせている。",[15,82,83],{},"5体には群Aから群Eまで、編ごとに分担させた。\n報告は群ごとに一つずつ戻ってきた。",[15,85,86],{},"群Bの報告には、「別の項目に紛れ込んでいた本文を元の項目へ移した」とあった。\nこれは指示の範囲外である。\n移した文字列が原文に実在するか（新しく作文していないか）を、全体がそろってから機械的に照合することにした。",[15,88,89],{},"群Dは、DBで「歴史編」とされている後半（p574以降）が、実際は「ワールド編」だと指摘してきた。\nPART 扉は13まであるのに、DBの編は12しかなかった。\n所属の付け替えは、全体がそろってからメイン側でまとめて行うことにした。",[15,91,92],{},"群Eは「推測を含めて直した」5件を報告してきた。\nこれは中身を一つずつ確かめる対象に回し、「主な参考文献」を後付に移す作業はメイン側で引き取った。",[15,94,95],{},"群Aは、PART 扉の近くにあった文の切れ端が、ことば編の最初の項目（KT-002）の冒頭だったと突き止めて、元に戻していた。",[15,97,98],{},"群Cを待つあいだに、そろった4群分の指示を試しに適用させた。\n照合スクリプトが MK-025〜037 を食い違いとして出してきたが、それらの文は下書きにも実在していた。\n照合側の誤判定とみて原因を探らせると、置換が効いていない箇所があり、Edit で直させた。\n画像の並べ替え関数も読みにくい書き方になっていたので、書き直させた。",[15,100,101,102,104],{},"書き込み後は、ブラウザで p89 を確かめた。\n3項目が見出し付きで並び、そのページの一言雑学が ",[68,103,70],{}," の箇条書きで表示されていた。\n目次と、ワールド編の区切りも確かめさせた。",[15,106,107],{},"これで766チャンクが1,913チャンクになった。",[15,109,110],{},"Sonnet の各群が「確信が持てず直さなかった」項目が232件残った。\nこれはチェックボックス形式の要確認リスト1枚にまとめさせ、再構造化の履歴と一緒にコミットさせた。",[25,112,114],{"id":113},"午後はwebセキュリティの資料を619ページ分","午後はWebセキュリティの資料を619ページ分",[15,116,117,118,121],{},"スキャナの保存先にあったPDFを ",[68,119,120],{},"/rename-pdf"," でリネームさせ、連番で管理するフォルダへ移させた。\n保存先には No920 がまだ残っていたので、今回の分は No921 にし、次回の開始番号は No922 に更新させた。",[15,123,124,125,128],{},"先にDBを確かめさせると、Webやセキュリティを含む書名はまだ1冊もなかった。\n",[68,126,127],{},"/yomitoku"," の手順で取り込みに入った。\n自分がメタデータを確かめているあいだに、619ページのOCRをバックグラウンドで先に走らせてもらった。",[15,130,131],{},"OCRは619ページすべてがエラー0件で終わり、図は50枚だった。\nDBに格納すると577チャンクになり、図50枚のR2アップロードも成功した。",[15,133,134,135,138,139,142],{},"続く ",[68,136,137],{},"/restructure-book"," は、まず書き込みなしの dry-run で節の割り当てを確かめさせた。\n",[68,140,141],{},"/book-cleanup"," では判定用のシートが3枚しかなかったので、サブエージェントには回さず Claude Code 自身に判定させた。",[15,144,145],{},"数字だけの行が見つかったが、これはページ番号ではなかった。\nコード中の括弧が化けたもので、本文の一部なので触らずに残した。\n除去したのは柱600箇所だけである。",[15,147,148,149,152],{},"FTS の再構築は、ここでもバックグラウンドで流した。\nただ、出力を ",[68,150,151],{},"tail"," に通していたので、終わるまで中身が見えなかった。",[15,154,155],{},"ブラウザ確認でも引っかかった。\nChrome DevTools MCP が応答せず、Chrome の状態を確かめてから接続し直させた。\nその途中で見出しの欠落が見つかった。\n見出しを戻したうえで、ほかの章扉のチャンクに同じ欠落がないかも確かめさせた。",[15,157,158],{},"表示では、図がR2から正しく配信されていた。\np20（はじめに）と、章扉カードを外した p30（第1章）は DOM で確かめた。",[25,160,162],{"id":161},"_30分で止まったもの","30分で止まったもの",[15,164,165],{},"取り込みを終えたあと、30分の上限で止まったものが2つあった。",[15,167,168],{},"1つはビューアの dev サーバーで、バックグラウンド実行の既定上限30分に達して止まっていた。\n表示確認は止まる前に済んでいた。\nすぐ開けるように、上限を2時間にして起動し直させた。",[15,170,171],{},"もう1つは、検索インデックスを再構築していたスクリプトである。\nこちらも30分の上限で強制終了されていた。\nこのリポジトリには、FTS のリビルドが HTTP 経由だと止まって見える既知の issue があり、先にそれを確かめさせた。",[15,173,174],{},"実害はなかった。\nインデックスは本文の更新に自動で追従する作りで、実際に検索して確かめた。\n復元した「はじめに」の見出しは p20 でヒットし、柱の文字列は1件も残らず、チャンク数は519件のままだった。",[15,176,177],{},"そのあと、dev サーバーはもう一度止まった。\nセッションが待機しているあいだにPCの空きメモリが極端に減り、Claude Code が自動で停止したためである。\nサーバー自体の不具合ではなく、取り込んだデータ（Turso DB と R2 の図）にも影響はない。",[25,179,180],{"id":180},"学び",[58,182,183,186,189],{},[61,184,185],{},"サブエージェントの報告は、指示の範囲外の作業ほど裏を取る。群Bが本文を移したと書いてきたとき、移した文字列が原文に実在するかを機械照合の対象にした",[61,187,188],{},"スクリプトが30分で強制終了されても、それだけで失敗とは決めない。検索でヒットするか、柱が残っていないか、チャンク数は変わっていないかを確かめてから判断した",[61,190,191],{},"照合スクリプトが食い違いを出したら、データより先にスクリプトを疑う。MK-025〜037 は文が下書きに実在しており、効いていなかったのは置換のほうだった",[25,193,194],{"id":194},"振り返り",[15,196,197],{},"朝の雑学本では、戻ってきた報告に種類の違う問題が並んだ。\n範囲外の移動、編の取り違え、推測を含む修正、切れ端の復元である。\n1,913チャンクは、どれもメイン側で照合してから書き込んだ。",[15,199,200],{},"照合を通らずに残っているのは、232件の要確認リストである。\nSonnet の各群が確信を持てずに直さなかった項目で、あとから見返せるように1枚にまとめた。",{"title":202,"searchDepth":203,"depth":203,"links":204},"",2,[205,206,207,208,209,210],{"id":27,"depth":203,"text":28},{"id":49,"depth":203,"text":50},{"id":113,"depth":203,"text":114},{"id":161,"depth":203,"text":162},{"id":180,"depth":203,"text":180},{"id":194,"depth":203,"text":194},"dev",null,"取り込み済みだった雑学本から装飾の図タグ1,032枚を外し、Sonnetのサブエージェント5体で766チャンクを1,913チャンクに分け直した。午後はWebセキュリティの資料619ページを、リネームからOCR、再構造化、クリーンアップまで通した。","md",{},true,"/book-db-zatsugaku-subagent-restructure","book-knowledge-base",false,"2026-09-30T00:00:00.000Z",{"title":5,"description":213},"make-diary","2026-09/2026-09-30/book-db-zatsugaku-subagent-restructure",[225,226,227,228,229],"蔵書DB","OCR","サブエージェント","Turso","Claude Code","etmLfWZ0LQDwjDCxy7Qm6ldM_Vye_a_76iT6bCRc5S0",[],[233,237,241,245,249],{"title":234,"path":235,"publishedAt":236},"サブエージェント5体に138節を分担させて、自炊した教材の作業用ドラフトを仕上げた","/textbook-draft-subagent-parallel","2026-09-05T00:00:00.000Z",{"title":238,"path":239,"publishedAt":240},"2026年9月3日の開発日記 - 止まったセッションを二度拾い直した日","/2026-09-03-diary","2026-09-03T00:00:00.000Z",{"title":242,"path":243,"publishedAt":244},"税大講本3年分24冊をPDFから全文検索できる形にするまで","/zeidai-kohon-pdf-ocr-pipeline","2026-08-14T00:00:00.000Z",{"title":246,"path":247,"publishedAt":248},"写真42枚をサブエージェント並列でOCR。前処理の作り直しと独立2回読みで精度を担保する","/bulk-photo-ocr-subagents","2026-08-07T00:00:00.000Z",{"title":250,"path":251,"publishedAt":252},"蔵書DBを棚卸しして専門書の抜けを洗い出し、簡易デューデリジェンス支援スキルを実装した","/bookshelf-db-stocktake-and-dd-skill","2026-08-05T00:00:00.000Z","https://log.eurekapu.com/og/blog/book-db-zatsugaku-subagent-restructure.png?v=2026-09-30T00%3A00%3A00.000Z&title=%E8%94%B5%E6%9B%B8DB%E3%81%AE%E6%9B%B8%E7%B1%8D%E5%8F%96%E3%82%8A%E8%BE%BC%E3%81%BF%EF%BC%9A%E9%9B%91%E5%AD%A6%E6%9C%AC%E3%82%92%E3%82%B5%E3%83%96%E3%82%A8%E3%83%BC%E3%82%B8%E3%82%A7%E3%83%B3%E3%83%885%E4%BD%93%E3%81%A71%E9%A0%85%E7%9B%AE1%E3%83%81%E3%83%A3%E3%83%B3%E3%82%AF%E3%81%AB%E5%88%86%E3%81%91%E7%9B%B4%E3%81%97%E3%80%81Web%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%E3%81%AE%E8%B3%87%E6%96%99%E3%82%92OCR%E3%81%8B%E3%82%89%E4%BB%95%E4%B8%8A%E3%81%92%E3%82%8B&author=Kei%20Komatsu&sig=9d880f5a2520ff49",1790910506847]