[{"data":1,"prerenderedAt":202},["ShallowReactive",2],{"content-/textbook-draft-subagent-parallel":3,"all-pages-for-dir":181,"related-/textbook-draft-subagent-parallel":182,"og-image-/textbook-draft-subagent-parallel":201},{"id":4,"title":5,"body":6,"category":159,"concepts":160,"description":161,"extension":162,"meta":163,"navigation":164,"ogImage":160,"path":165,"project_name":166,"published":167,"publishedAt":168,"seo":169,"source":170,"stem":171,"tags":172,"todo":160,"unpublished":167,"updatedAt":160,"__hash__":180},"pages/2026-09/2026-09-05/textbook-draft-subagent-parallel.md","サブエージェント5体に138節を分担させて、自炊した教材の作業用ドラフトを仕上げた",{"type":7,"value":8,"toc":148},"minimark",[9,13,17,20,23,27,30,33,37,40,43,50,53,56,59,62,65,68,71,75,78,81,84,87,90,93,96,99,102,105,108,111,114,117,120,123,126,129],[10,11,5],"h1",{"id":12},"サブエージェント5体に138節を分担させて自炊した教材の作業用ドラフトを仕上げた",[14,15,16],"p",{},"朝いちばんに、図のビフォーアフターを見比べるページを開いた。",[14,18,19],{},"自炊した教材の原図と、描き直させた候補のSVGが並んでいる。\n1枚ずつ見て、候補のほうでほぼ全部いい、と思った。\n原図に戻す理由が見つからない図が続く。\nそこで採用をいったん確定させることにした。",[14,21,22],{},"気になったのは2件だけだった。\nバッジが乗る位置が1件と、区分の並びが1件。\nどちらもその場で直させて、コミットの前に未追跡のファイルを確かめさせた。\n市販本の原図をgitへ入れてしまわないためだ。\n学習ゲートがコミットを止めたので、今日はスキップして通した。",[24,25,26],"h2",{"id":26},"読める形に写しておきたかった本文",[14,28,29],{},"図が決まると、次は差し込み先の教材へ足していくフェーズになる。\nその手前で、本文のほうへ手を伸ばした。",[14,31,32],{},"2冊とも、市販の本をスキャンして起こしたものだ。\n公開する予定はない。\nそのうえで、作業用のテキストをまるごと作ってくれないか、と頼んだ。\n本文をdevに写し、原図があった位置に候補のSVGを差し替えて、そのまま読める状態にする。",[24,34,36],{"id":35},"レビューを途中でastraに乗り換えた","レビューを途中でAstraに乗り換えた",[14,38,39],{},"計画書はいつもの手順で書かせ、レビューをCodex（gpt-5.6-sol）に投げた。\n1周目で指摘が2件返ってきた。\n反映して2周目を回し、判断が要る2件を3択の決裁フォームに立てさせた。\nここまでは普段どおりだ。",[14,41,42],{},"ちょうどそこへ、ChatGPT側にAstraというモデルが出た。\nレビューをそちらでやり直したくなった。",[14,44,45,49],{},[46,47,48],"code",{},"gpt-6-astra"," はCodex CLIでそのまま疎通した。\n設定ファイルの既定モデルにも、いつのまにかなっていた。\nついでに計画レビューの手順書の既定モデルも書き換えさせておいた。",[14,51,52],{},"Astraの指摘は、当たる場所が違った。\n1周目は、統合された図の採否をどのキーに持たせるかという設計の話だった。\n同じ図が本文の複数の位置に出るとき、採否は1つのレコードを共有する。\nその採否を終端のキーへ集約して保存する形に、計画の該当節と実装フェーズを書き直した。\n2周目は、統合された写しのほうにも採否を持たせると同期のゲートで落ちる、という指摘だった。\nこれも反映して3周目を回した。",[14,54,55],{},"同じ計画書に2つのモデルを当てたので、指摘の傾向を比べたメモを別に残させた。",[24,57,58],{"id":58},"スクリーンショット1枚で返した4つの注文",[14,60,61],{},"実装はPhase T1からT3までの3つに分けてあった。\n一通り作らせて、2冊とも、本文が読めて図の位置に候補が出る状態になった。",[14,63,64],{},"開いてみると、直したい点が4つ出てきた。\n画面を撮って、そのまま渡した。",[14,66,67],{},"左のペインは他のコンテンツと同じMillerカラムレイアウトにしたい。\n右には目次を入れたい。\n矢印の表記が崩れている。\nそして、本文を全部、文章として読める形に変換してほしい。",[14,69,70],{},"最後の1つが重いのはわかっていた。\nOCRから起こしたテキストなので、矢印や記号が地の文に散らばったままになっている。\n読み進めると、そのたびに目が引っかかる。\nしかも2冊ぶんの全節が対象になる。\nサブエージェントをうまく使ってほしい、Sonnetでもいい、と付け足した。",[24,72,74],{"id":73},"_138節を5体に分ける","138節を5体に分ける",[14,76,77],{},"レイアウトの作り直しはその場で片付けさせて、本文の整形はサブエージェント5体（Sonnet）に投げた。\n138節を5体に分担させ、各体には整形したファイルを書いて検査を回すところまでやらせる。\n別セッションに渡す案もあったが、この形ならセッションのコンテキストはほとんど増えない。",[14,79,80],{},"合格数は担当の報告を足し算するだけにせず、親のセッションでも検査を回させて数えさせた。",[14,82,83],{},"最初に返ってきた担当の29節は全件合格だった。\nその時点の全体は、1冊目が80節中44節、2冊目が58節中41節で、不合格が1件残っていた。\n次の担当の26節も全件通り、残っていた不合格の1件も直っていた。\n3体目の27節が通ったところで不合格は0になり、1冊目は68節まで進んだ。\n最後は1冊目の80節がすべて通り、2冊目も残り3節が片付いて、138節が全部合格になった。",[14,85,86],{},"整えた本文を既定にする変更を11ファイルぶんコミットして、origin/mainへプッシュした。\nCloudflareへのビルドとデプロイはバックグラウンドに回した。\n6分か7分かかるので、そのあいだに次の作業へ移った。",[24,88,89],{"id":89},"ルビが13語で止まった",[14,91,92],{},"振り仮名は仕組みを先に実装してから、変換そのものをまた5体に回した。",[14,94,95],{},"1周目は5体とも完了した。\n変換できたのは合計13語だった。\n1冊目が6語、2冊目が7語。",[14,97,98],{},"2冊ぶんの全節が対象で、この数はどう見ても少ない。",[14,100,101],{},"担当からの報告で理由がわかった。\nOCRは、読みを必ずしも漢字の直前には落としていない。\n脚注記号やかぎ括弧、番号見出しを挟んだ位置に置いていることがある。\n漢字の直後に落ちていることもある。\n1周目の検査は漢字の直前しか読みとして認めていなかったので、それ以外は全部こぼれていた。\n13語は、担当の腕ではなく、こちらが渡した検査の条件を映した数字だった。\n5体に同じ検査を配ったので、その狭さも5体ぶんそのまま効いていた。",[14,103,104],{},"検査を広げた。\n読みは漢字の前でも後ろでもよい。\nあいだに空白、改行、番号、脚注記号、開き括弧が挟まってもよい。\nそのぶんのテストを足して、同じ分担で2周目の5体を投入した。\n読みが漢字の語の途中に割り込んでいる型だけは、今回も対象外にした。",[14,106,107],{},"2周目で報告が返ってきた4体の追加は、3語、3語、0語、0語だった。\n広げても大きくは増えなかった。\nある担当の報告では、変換できなかった読みが21件あった。\n内訳は、読みと語が離れているものが16件、語の途中に割り込むものが3件、読み自体がOCRで欠けているものが2件だった。\n残りは、今回広げた範囲の外にある。\n2周でいったん止めてコミットした。",[24,109,110],{"id":110},"開いたままにしておく必要のなかった欄",[14,112,113],{},"Cloudflareのデプロイはルビを回しているあいだに終わり、Workerバンドルの残り容量と本番の反映を確かめさせた。",[14,115,116],{},"その少し前に、図の下に付けさせた差し込みメモの欄を撮って渡してあった。\n採否を未判断か採用か不採用かで選び、差し込み先の章と節、入れる位置、メモを書く。\nそうやって採用台帳へ1図ずつ入れていく欄だ。\n統合された図には、同じ図が別の位置にも出るという注記が付く。",[14,118,119],{},"画面だけ渡したので、どこを直したいのか聞き返された。\n注文は1つだけだった。\nクリックで開く形にしてほしい。",[14,121,122],{},"理由も一緒に伝えた。\nこの欄に書いて渡すことは、たぶんそんなに多くない。\n直接言うほうが早い。\nそれなら畳んでおいて、要るときだけ開けばいい。",[14,124,125],{},"そこに書き込む頻度を先に見積もっていれば、最初から畳んで作らせていたはずだった。",[24,127,128],{"id":128},"今日の学び",[130,131,132,136,139,142,145],"ul",{},[133,134,135],"li",{},"サブエージェントに検査まで回させるなら、渡した検査の条件がそのまま人数ぶん効く。13語で止まったのは担当の腕ではなく、こちらの検査が狭かったからだった",[133,137,138],{},"OCRのテキストでは、読みが漢字の直前にあるとは限らない。脚注記号やかぎ括弧、番号見出しを挟んだ位置や、漢字の直後にも落ちる",[133,140,141],{},"合格数は担当の報告を数えるのではなく、親のセッションでも検査を回させて突き合わせる",[133,143,144],{},"計画書のレビューはモデルを替えると当たる場所が変わる。同じ計画書に2つ当てて、比べたメモを残しておいた",[133,146,147],{},"入力欄を足すときは、そこに書き込む頻度を先に見積もる。毎回開いておく必要のない欄は畳んでおく",{"title":149,"searchDepth":150,"depth":150,"links":151},"",2,[152,153,154,155,156,157,158],{"id":26,"depth":150,"text":26},{"id":35,"depth":150,"text":36},{"id":58,"depth":150,"text":58},{"id":73,"depth":150,"text":74},{"id":89,"depth":150,"text":89},{"id":110,"depth":150,"text":110},{"id":128,"depth":150,"text":128},"dev",null,"自炊した教材2冊の本文をdevに写し、原図の位置に候補SVGを差し込んだ作業用ドラフトを作った。本文の整形はSonnetのサブエージェント5体に138節を分担させた。ルビの変換は1周目が13語で止まり、OCRの癖を見てから検査を広げて2周目を回した。","md",{},true,"/textbook-draft-subagent-parallel","eurekapu-nuxt4",false,"2026-09-05T00:00:00.000Z",{"title":5,"description":161},"make-diary","2026-09/2026-09-05/textbook-draft-subagent-parallel",[173,174,175,176,177,178,179],"サブエージェント","Claude Code","並列実行","OCR","ルビ","GPT-6 Astra","Cloudflare","s5rjurKzkcQKo8rTONsXN-0wIiCIaszaoduTZ9WAZMg",[],[183,187,190,194,197],{"title":184,"path":185,"publishedAt":186},"2026年9月3日の開発日記 - 止まったセッションを二度拾い直した日","/2026-09-03-diary","2026-09-03T00:00:00.000Z",{"title":188,"path":189,"publishedAt":186},"サブエージェントを並列で回して教材の図をSVGに作り直した一日と、その進捗管理","/tax-figure-rework-with-parallel-agents",{"title":191,"path":192,"publishedAt":193},"写真42枚をサブエージェント並列でOCR。前処理の作り直しと独立2回読みで精度を担保する","/bulk-photo-ocr-subagents","2026-08-07T00:00:00.000Z",{"title":195,"path":196,"publishedAt":168},"2026年9月5日の開発日記 - ひと月遅れで届く開示を追う仕組みと、記事1本ごとに走っていた10万字の連鎖","/2026-09-05-diary",{"title":198,"path":199,"publishedAt":200},"常時稼働のLinuxが付くAI Botの使いどころ：Claude Codeとの線引きで解説記事を書き直した","/always-on-cloud-agent-research","2026-09-02T00:00:00.000Z","https://log.eurekapu.com/og/blog/textbook-draft-subagent-parallel.png?v=2026-09-05T00%3A00%3A00.000Z&title=%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%AB138%E7%AF%80%E3%82%92%E5%88%86%E6%8B%85%E3%81%95%E3%81%9B%E3%81%A6%E3%80%81%E8%87%AA%E7%82%8A%E3%81%97%E3%81%9F%E6%95%99%E6%9D%90%E3%81%AE%E4%BD%9C%E6%A5%AD%E7%94%A8%E3%83%89%E3%83%A9%E3%83%95%E3%83%88%E3%82%92%E4%BB%95%E4%B8%8A%E3%81%92%E3%81%9F&author=Kei%20Komatsu&sig=ee2068bdcea013a0",1788821552617]