[{"data":1,"prerenderedAt":575},["ShallowReactive",2],{"content-/colophon-extraction-haiku-vs-opus":3,"all-pages-for-dir":573,"og-image-/colophon-extraction-haiku-vs-opus":574},{"id":4,"title":5,"body":6,"category":555,"description":556,"extension":557,"meta":558,"navigation":469,"ogImage":559,"path":560,"project_name":20,"published":561,"publishedAt":562,"seo":563,"stem":564,"tags":565,"todo":559,"unpublished":561,"updatedAt":559,"__hash__":572},"pages/2026-05/2026-05-11/colophon-extraction-haiku-vs-opus.md","書籍奥付抽出パイプライン: HaikuからOpusへの精度逆転とDropboxオンライン専用ファイル問題",{"type":7,"value":8,"toc":535},"minimark",[9,13,22,26,44,48,51,82,89,93,96,99,117,120,124,131,134,141,145,148,151,161,174,178,193,196,205,212,215,218,221,254,258,264,271,274,280,285,353,356,360,446,449,452,455,458,497,500,532],[10,11,12],"h2",{"id":12},"やったこと",[14,15,16,17,21],"p",{},"前日に計画書を書き上げた ",[18,19,20],"code",{},"book-knowledge-base"," の奥付抽出パイプラインを、Phase 0 と Phase 1 まで走らせた。最初に haiku で10並列回したら9/10が誤読で全部やり直しになり、Opus に切り替えて末尾10ページに広げたら8/10が完璧、ISBN完全一致 7/7 まで一気に跳ねた。そのまま47件→337件にスケールしようとしたら大量エラーが出て、原因は Dropbox の「オンライン専用ファイル」だった。同期解除はサイズ的に諦めて、ローカル化済みの46件だけで Phase 2 を進め、ロングセラー検出レポートまで作って終業した。",[10,23,25],{"id":24},"phase-0-スキーマだけは前日のうちに作ってあった","Phase 0: スキーマだけは前日のうちに作ってあった",[14,27,28,31,32,35,36,39,40,43],{},[18,29,30],{},"book_colophons"," テーブルを Turso 本番に流すスクリプトは前日仕込んであったので、",[18,33,34],{},"uv run python scripts/apply_colophon_schema.py"," を1発叩いて終了。",[18,37,38],{},"amazon_metadata"," と ",[18,41,42],{},"file_no"," で 1:1 紐付けされた状態が DB 側にできた。",[10,45,47],{"id":46},"phase-1-v1-haiku-で10並列結果は精度110","Phase 1 v1: haiku で10並列、結果は精度1/10",[14,49,50],{},"計画書通り、末尾5ページを dpi=200 でPNG化して、Claude Code のサブエージェントを haiku で10並列起動した。10件返ってきた JSON を眺めた瞬間に「これは使えない」と分かった。",[52,53,54,62,69,75],"ul",{},[55,56,57,58,61],"li",{},"No338: 実体は「会社法 第2版（田中亘）」なのに ",[18,59,60],{},"\"会計学講義\""," という別本のタイトルで返ってきた",[55,63,64,65,68],{},"No366: 「渋谷ではたらく社長の告白」が ",[18,66,67],{},"\"渡谷ではなろく社長の古日\""," に化けた",[55,70,71,72,68],{},"No425: 「広重TOKYO」が ",[18,73,74],{},"\"広辞TOKYO\"",[55,76,77,78,81],{},"No582: 「ディズニーCEOが実践する10の原則」が ",[18,79,80],{},"\"100の原則\""," で数字の桁を取り違えた",[14,83,84,85,88],{},"10件のうち1件しか正しい書名を拾えなかった。日本語奥付の小さい文字や漢字の細部が、haiku のVisionでは崩れる。書誌情報を DB に流し込む用途には精度が足りない。一旦結果を ",[18,86,87],{},"colophon_results.jsonl"," から退避して、モデルとパラメータを見直すことにした。",[10,90,92],{"id":91},"phase-1-v2-opus-末尾10ページで再実行","Phase 1 v2: Opus + 末尾10ページで再実行",[14,94,95],{},"計画書では「haiku で 10並列、追加API課金ゼロ」が売りだったが、精度が出ない以上、Opus に切り替えるしかない。Claude Code のサブエージェントは Opus でも10並列で走らせられる。末尾も5ページから10ページに広げて、巻末のページ構成のばらつきを吸収した。",[14,97,98],{},"10件で再実行したら、精度が逆転した。",[52,100,101,104,111,114],{},[55,102,103],{},"success 8/10、no_colophon 2/10",[55,105,106,107],{},"ISBN を取得できた7冊は ",[108,109,110],"strong",{},"ISBN完全一致 7/7",[55,112,113],{},"No338 の「会社法 第2版（田中亘・東京大学出版会）」は、版・刷・初版発行日・著者まで全部正しく取れた",[55,115,116],{},"数字の桁誤りも消えた（582、649 ともに完璧）",[14,118,119],{},"末尾10ページに広げたぶん画像コストは増えたが、1冊あたり Opus で約30k〜44kトークン、duration 20〜40秒。10並列で1バッチ約40秒。許容範囲だった。",[10,121,123],{"id":122},"副産物-奥付抽出は書誌情報の正確性チェックにもなる","副産物: 奥付抽出は書誌情報の正確性チェックにもなる",[14,125,126,127,130],{},"Opus が「実体PDFは『会社法 第2版（田中亘・東京大学出版会）』ISBN: 9784130323093」と返してきたので、Amazon側に登録してある書名を確認したら、そっちは「会社法〔第2版〕（伊藤靖史ほか・有斐閣ストゥディア）ISBN: 978-4641150843」だった。",[108,128,129],{},"完全に別の本が同じ file_no で登録されていた","。",[14,132,133],{},"No416「財務3表一体理解法」も同じパターンで、Amazon側の登録は新書版なのに実体PDFは2007年初版だった。",[14,135,136,137,140],{},"奥付抽出は当初「Amazon メタデータを補完する」目的で組んだが、走らせてみたら ",[108,138,139],{},"「Amazon メタデータの誤りを検出する」"," という副作用が出てきた。蔵書管理としてはむしろこっちの価値が大きい。",[10,142,144],{"id":143},"_47件-337件にスケールしようとして崩壊する","47件 → 337件にスケールしようとして崩壊する",[14,146,147],{},"Phase 1 が安定したので、対象を ★3.5以上 × レビュー50件以上 = 347冊に広げて Phase 2 を走らせた。既処理10件を除いて 337冊。Opus で30バッチくらい回せば1時間以内で終わる見込みだった。",[14,149,150],{},"画像化スクリプトを叩いた瞬間、エラーが連続で吐き出された。",[152,153,158],"pre",{"className":154,"code":156,"language":157},[155],"language-text","[ERR] No101: [Errno 22] Invalid argument\n[ERR] No102: [Errno 22] Invalid argument\n[ERR] No103: [Errno 22] Invalid argument\n...\n","text",[18,159,156],{"__ignoreMap":160},"",[14,162,163,166,167,166,170,173],{},[18,164,165],{},"fitz.open()"," も ",[18,168,169],{},"shutil.copyfile()",[18,171,172],{},"Errno 22"," で落ちる。337件のうち約290件が空ディレクトリのまま終わった。",[10,175,177],{"id":176},"原因-dropbox-files-on-demandオンライン専用ファイル","原因: Dropbox Files On-Demand（オンライン専用ファイル）",[14,179,180,181,184,185,187,188,190,191,130],{},"Dropbox の「Files On-Demand」設定で、書籍PDFの大半が ",[108,182,183],{},"クラウドにのみ実体があり、ローカルにはプレースホルダしかない"," 状態になっていた。エクスプローラーでは ☁️ アイコンが付いていて、ダブルクリックすれば自動でダウンロードが走るが、Python の ",[18,186,165],{}," はその「仮想ファイル」を開けない。",[18,189,169],{}," で一時コピーを試みても同じく ",[18,192,172],{},[14,194,195],{},"解決策は2つあった。",[197,198,199,202],"ol",{},[55,200,201],{},"Dropbox フォルダ全体を右クリック →「オフラインアクセスを許可」を選ぶ。957件、約60GBがダウンロードされる",[55,203,204],{},"必要なファイルだけ事前にダウンロードしておく",[14,206,207,208,211],{},"(1) は確実だが、60GB のダウンロードを開始してSSDの空きと回線を圧迫する。書籍PDF全件をローカルに常駐させる必要がそもそもない（普段はオンラインで開けば足りている）。(2) はバッチごとに ",[18,209,210],{},"attrib +P"," を叩く実装を組む必要があり、その実装と検証で半日溶ける気配がした。",[14,213,214],{},"判断に詰まって、結局**「今すでにローカル化されているぶんだけで進める」**に倒した。Phase 1 で処理済みの10件と、既にローカルにあった46件、合わせて56件。それ以上は明日以降に回す。",[10,216,217],{"id":217},"画像化スクリプトに細かい修正を3件入れた",[14,219,220],{},"Dropbox 問題の調査中に、ついでに以下の修正を入れた。後続で再実行するときの足元を固める意味で。",[52,222,223,236,245],{},[55,224,225,228,229,39,232,235],{},[108,226,227],{},"Windows cp932 のコンソール文字化け",": ",[18,230,231],{},"PYTHONUTF8=1",[18,233,234],{},"sys.stdout.reconfigure(encoding='utf-8')"," を入れて、書名の漢字がログで化けないようにした",[55,237,238,241,242,244],{},[108,239,240],{},"Dropbox オンライン専用 fallback",": ローカルにファイルがない場合は、",[18,243,169],{}," で一時コピーを試みて、それも失敗したらスキップしてエラーログに残すようにした（事故った時に何件落ちたかを後追いできる）",[55,246,247,228,250,253],{},[108,248,249],{},"末尾ページ数のパラメタライズ",[18,251,252],{},"--last-n 10"," で末尾何ページを画像化するかを CLI 引数で渡せるようにした",[10,255,257],{"id":256},"ローカル化済み-46件-で-phase-2-を完走させる","ローカル化済み 46件 で Phase 2 を完走させる",[14,259,260,261,263],{},"ローカルにあった46件を Opus で抽出した。10並列 × 5バッチで約8分。結果は success 44件、no_colophon 2件。Phase 1 と合わせて56件が ",[18,262,30],{}," に格納された。",[14,265,266,267,270],{},"これで Turso の DB を ",[18,268,269],{},"JOIN amazon_metadata USING (file_no)"," で叩くと、書名・初版発行日・累計刷数・ISBN・★評価・レビュー数が同じ行に並ぶようになった。次のステップとして「ロングセラーを検出する」が初めて意味を持つ。",[10,272,273],{"id":273},"ロングセラー検出レポートを作る",[14,275,276,279],{},[18,277,278],{},"colophon-longseller-report.md"," に、56冊から拾えたロングセラーパターンを3軸でまとめた。",[281,282,284],"h3",{"id":283},"短期重版初版から180日以内に第2刷以上-強いニーズシグナル","短期重版（初版から180日以内に第2刷以上）— 強いニーズシグナル",[286,287,288,307],"table",{},[289,290,291],"thead",{},[292,293,294,298,301,304],"tr",{},[295,296,297],"th",{},"No",[295,299,300],{},"タイトル",[295,302,303],{},"経過日数",[295,305,306],{},"累計刷",[308,309,310,325,339],"tbody",{},[292,311,312,316,319,322],{},[313,314,315],"td",{},"678",[313,317,318],{},"〈2時間で丸わかり〉インボイスと消費税の基本",[313,320,321],{},"40日",[313,323,324],{},"第3刷",[292,326,327,330,333,336],{},[313,328,329],{},"763",[313,331,332],{},"その節税が会社を殺す",[313,334,335],{},"64日",[313,337,338],{},"第4刷",[292,340,341,344,347,350],{},[313,342,343],{},"416",[313,345,346],{},"財務3表一体理解法",[313,348,349],{},"67日",[313,351,352],{},"第10刷",[14,354,355],{},"「インボイスと消費税の基本」は出版から1ヶ月強で第3刷。「その節税が会社を殺す」は2ヶ月で第4刷。実務書はテーマが「待たれていた」かどうかで重版速度が桁で変わる。財務3表は67日で第10刷、これは桁外れだった。",[281,357,359],{"id":358},"多刷ロングセラー第5刷以上-安定した長期ニーズ","多刷ロングセラー（第5刷以上）— 安定した長期ニーズ",[286,361,362,375],{},[289,363,364],{},[292,365,366,368,370,372],{},[295,367,297],{},[295,369,300],{},[295,371,306],{},[295,373,374],{},"経過",[308,376,377,391,405,419,433],{},[292,378,379,382,385,388],{},[313,380,381],{},"493",[313,383,384],{},"金持ち父さん貧乏父さん",[313,386,387],{},"第92刷",[313,389,390],{},"12年",[292,392,393,396,399,402],{},[313,394,395],{},"394",[313,397,398],{},"夜と霧",[313,400,401],{},"第37刷",[313,403,404],{},"51.6年",[292,406,407,410,413,416],{},[313,408,409],{},"723",[313,411,412],{},"具体と抽象",[313,414,415],{},"第22刷",[313,417,418],{},"8.3年",[292,420,421,424,427,430],{},[313,422,423],{},"464",[313,425,426],{},"法人税申告書のしくみとポイントがわかる本",[313,428,429],{},"第15刷",[313,431,432],{},"8.6年",[292,434,435,438,441,443],{},[313,436,437],{},"845",[313,439,440],{},"DIE WITH ZERO",[313,442,352],{},[313,444,445],{},"1.2年",[14,447,448],{},"「夜と霧」が新装版で第37刷、約50年走り続けている。「金持ち父さん」も12年で第92刷。実務書だと「法人税申告書のしくみとポイントがわかる本」が8.6年で第15刷で、税務系の実務書ロングセラーの代表。「DIE WITH ZERO」は出てから1年で10刷、ここ最近の最大ヒット級だと数字で見える。",[281,450,451],{"id":451},"コンテンツ化最有力候補",[14,453,454],{},"★4.0以上 × レビュー1000以上 × 第5刷以上で絞ると、6冊が浮上した。これが「自分が要約・図解化して出すコンテンツの優先順位」の元データになる。",[10,456,457],{"id":457},"明日に積み残し",[52,459,462,472,478,488],{"className":460},[461],"contains-task-list",[55,463,466,471],{"className":464},[465],"task-list-item",[467,468],"input",{"disabled":469,"type":470},true,"checkbox"," Dropbox の「オフラインアクセスを許可」を 00連番フォルダに対して実行（60GB のダウンロード待ち）",[55,473,475,477],{"className":474},[465],[467,476],{"disabled":469,"type":470}," 残り 291冊の画像化を再実行",[55,479,481,483,484,487],{"className":480},[465],[467,482],{"disabled":469,"type":470}," 実務系 110冊（",[18,485,486],{},"data/phase2_practical.csv","）だけ先に Opus 抽出",[55,489,491,493,494,496],{"className":490},[465],[467,492],{"disabled":469,"type":470}," 全件処理後、ISBN不一致を検出して ",[18,495,38],{}," 修正候補を出力する",[10,498,499],{"id":499},"学び",[52,501,502,508,514,520,526],{},[55,503,504,507],{},[108,505,506],{},"Vision の精度はモデルで桁が変わる",": haiku 1/10 → Opus 8/10 は誤差ではなく断絶。日本語の小さい文字（奥付）は Opus 一択",[55,509,510,513],{},[108,511,512],{},"末尾5ページは攻めすぎ",": 10ページに広げただけで no_colophon の取りこぼしが激減した。本のページ構成（謝辞、参考文献、索引、奥付、著者プロフィール）は末尾に1〜10ページのバラつきがある",[55,515,516,519],{},[108,517,518],{},"Dropbox Files On-Demand はバッチ処理と相性が悪い",": 「ローカルにある前提」のスクリプトを書くと、290件が静かに空ディレクトリになって終わる。事前に hydrate 状態を確認するか、エラー時に明示的にスキップログを残す実装が必須",[55,521,522,525],{},[108,523,524],{},"Amazon メタデータは信用しすぎない",": 書名・著者が別本と入れ替わって登録されているケースが56件中2件あった。蔵書数 957件で換算すると30件以上は誤登録の可能性がある",[55,527,528,531],{},[108,529,530],{},"計画書通りに走るとは限らない",": 前日の計画書では「haiku で追加課金ゼロ」を売りにしていたが、実走で精度が足りず、Opus に切り替えた。サブエージェント並列の枠内なので Claude Code サブスクリプション内で済んだのは救い",[14,533,534],{},"形容詞ではなく数字で示せる学びが多い1日だった。「精度が悪かった」ではなく「10件中9件が誤読で書名が別本に化けた」、「Dropbox で詰まった」ではなく「337件のうち290件が空ディレクトリになった」と書けるレベルで現象が見えた。",{"title":160,"searchDepth":536,"depth":536,"links":537},2,[538,539,540,541,542,543,544,545,546,547,553,554],{"id":12,"depth":536,"text":12},{"id":24,"depth":536,"text":25},{"id":46,"depth":536,"text":47},{"id":91,"depth":536,"text":92},{"id":122,"depth":536,"text":123},{"id":143,"depth":536,"text":144},{"id":176,"depth":536,"text":177},{"id":217,"depth":536,"text":217},{"id":256,"depth":536,"text":257},{"id":273,"depth":536,"text":273,"children":548},[549,551,552],{"id":283,"depth":550,"text":284},3,{"id":358,"depth":550,"text":359},{"id":451,"depth":550,"text":451},{"id":457,"depth":536,"text":457},{"id":499,"depth":536,"text":499},"dev","前日に計画書を書いた書籍奥付抽出パイプラインを実走させた。haikuで誤読9/10、Opusに切り替えて完璧8/10に逆転。スケールしようとしたらDropboxのオンライン専用ファイル問題で290件が空ディレクトリ化し、46件で打ち切ってロングセラー検出に進んだ実装ログ。","md",{},null,"/colophon-extraction-haiku-vs-opus",false,"2026-05-11T00:00:00.000Z",{"title":5,"description":556},"2026-05/2026-05-11/colophon-extraction-haiku-vs-opus",[566,567,568,569,570,571],"蔵書管理","Turso","Claude Code","Vision","Dropbox","書誌情報","PZHiYz2Kxo6F3rqPDDCBm2kXd3Ngkzf4UPi4aN1hAyA",[],"https://log.eurekapu.com/og/blog/colophon-extraction-haiku-vs-opus.png?v=2026-05-11T00%3A00%3A00.000Z&title=%E6%9B%B8%E7%B1%8D%E5%A5%A5%E4%BB%98%E6%8A%BD%E5%87%BA%E3%83%91%E3%82%A4%E3%83%97%E3%83%A9%E3%82%A4%E3%83%B3%3A%20Haiku%E3%81%8B%E3%82%89Opus%E3%81%B8%E3%81%AE%E7%B2%BE%E5%BA%A6%E9%80%86%E8%BB%A2%E3%81%A8Dropbox%E3%82%AA%E3%83%B3%E3%83%A9%E3%82%A4%E3%83%B3%E5%B0%82%E7%94%A8%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%95%8F%E9%A1%8C&author=Kei%20Komatsu&sig=82b6780e1fc24fbc",1782528835275]