[{"data":1,"prerenderedAt":590},["ShallowReactive",2],{"content-/2026-05-31-diary":3,"all-pages-for-dir":588,"og-image-/2026-05-31-diary":589},{"id":4,"title":5,"body":6,"category":570,"description":571,"extension":572,"meta":573,"navigation":505,"ogImage":574,"path":575,"project_name":576,"published":577,"publishedAt":578,"seo":579,"stem":580,"tags":581,"todo":574,"unpublished":577,"updatedAt":574,"__hash__":587},"pages/2026-05/2026-05-31/diary-2026-05-31.md","2026年5月31日の開発日記 - tool-call-malformedと一日戦い抜いた",{"type":7,"value":8,"toc":551},"minimark",[9,14,23,27,34,37,42,45,51,64,75,78,82,88,92,105,113,115,119,122,126,140,148,150,154,169,173,184,192,194,198,205,209,222,230,232,236,239,243,257,265,267,270,298,300,303,464,466,469,489,491,494,520,522,525],[10,11,13],"h1",{"id":12},"_2026年5月31日の開発日記","2026年5月31日の開発日記",[15,16,17,18,22],"p",{},"今日は朝から晩まで「The model's tool call could not be parsed」が顔を出し続けた。作業の節目ごとにセッションが崩れ落ち、そのたびにリトライを叩き、ダメなら引き継ぎドキュメントへ作業を逃がし、重い読み込みはサブエージェントへ追い出した。malformed という相手の正体をようやく掴み、予防策を ",[19,20,21],"code",{},"/make-diary"," に焼き込んだのが今日いちばんの収穫になる。その合間に microGPT を会計の言葉で読む教材、家族旅行のガイド量産、tripleBeat の GAAP評価拡充、CDPログイン手順の整備まで手を伸ばした。",[24,25,26],"h2",{"id":26},"今日のタイムライン",[15,28,29],{},[30,31],"img",{"alt":32,"src":33},"タイムライン","/2026-05/2026-05-31/timeline-2026-05-31.png",[24,35,36],{"id":36},"今日やったこと",[38,39,41],"h3",{"id":40},"_1-microgptを会計の言葉で読み切る教材","1. microGPTを会計の言葉で読み切る教材",[15,43,44],{},"200行の小さなGPT実装を、簿記・会計の言葉（感応度、配賦、予実差異）に翻訳して読み切るインタラクティブ教材を Nuxt/Vue で組ませた。最初は「会計デモを並べれば完成」のつもりだったが、本当のゴールは「実物の200行を各段階に対応づけて読み切ること」だと途中で見えてきて、設計が組み替わった。ハブ→6段パイプライン→9用語ページの構造に、各段の実コード行番号を貼っていった。",[15,46,47],{},[48,49,50],"strong",{},"主な成果:",[52,53,54,58,61],"ul",{},[55,56,57],"li",{},"純粋関数をテスト先行で固め、32件green・カバレッジ100%",[55,59,60],{},"行番号バッジから飛べない問題に気づき、段別ページ化を依頼",[55,62,63],{},"malformed連発で引き継ぎドキュメント（microgpt-handoff.md）へ退避",[15,65,66,69,70],{},[48,67,68],{},"詳細:"," ",[71,72,74],"a",{"href":73},"/microgpt-accounting-textbook","microGPTを会計の言葉で読み切る教材を作った日",[76,77],"hr",{},[38,79,81],{"id":80},"_2-tool-call-malformedと戦い予防策をコマンドに焼き込んだ","2. tool-call-malformedと戦い、予防策をコマンドに焼き込んだ",[15,83,84,85,87],{},"一日の主役はこれだった。「汚染＝巨大ファイル」という思い込みを捨て、真因が「モデルが生成するツール呼び出しの引数構造の破綻」だと理解し直した。0.1MBの小さなセッションが落ち、48MBの画像だらけセッションが完走していた事実が、サイズ犯人説を退けた。掴んだ予防策を ",[19,86,21],{}," スラッシュコマンドに書き込んで、次回以降も効くようにした。",[15,89,90],{},[48,91,50],{},[52,93,94,97,100],{},[55,95,96],{},"原因をマークダウンに整理（巨大ファイル説の否定）",[55,98,99],{},"予防策3つ（サブエージェント分離＝本命／作業の小分け／引き継ぎメモで別セッション継続）を確立",[55,101,102,104],{},[19,103,21],{}," に予防セクションを追加",[15,106,107,69,109],{},[48,108,68],{},[71,110,112],{"href":111},"/tool-call-malformed-subagent-workflow","tool-call-malformedと一日戦って、予防策を /make-diary に焼き込んだ",[76,114],{},[38,116,118],{"id":117},"_3-大分熊本の家族旅行ガイドをagent-browserで量産","3. 大分・熊本の家族旅行ガイドをagent-browserで量産",[15,120,121],{},"8月の家族旅行に向けて、宿（日田）を旅程アプリのカレンダー・地図ピン・本文に反映させた。日田・阿蘇・別府杉乃井の観光名所を agent-browser に調べさせ、写真付きの独立ガイドページとして量産した。Wikimedia Commons の実在画像をホットリンクで貼り、日田7枚・阿蘇12枚が表示に成功。中岳火口の見学規制など、調査で拾った制約もガイドに書き込んだ。",[15,123,124],{},[48,125,50],{},[52,127,128,131,137],{},[55,129,130],{},"観光ガイドを独立ページとして複数本量産（写真付き）",[55,132,133,136],{},[19,134,135],{},"guides.json"," 未登録でインデックスに出ない問題を修正",[55,138,139],{},"旅程アプリのカレンダー・地図ピンに宿情報を反映",[15,141,142,69,144],{},[48,143,68],{},[71,145,147],{"href":146},"/oita-kumamoto-travel-guide","大分・熊本の家族旅行ガイドを agent-browser で量産した日",[76,149],{},[38,151,153],{"id":152},"_4-triplebeatのgaap評価を9銘柄に拡充散布図に切替を実装","4. tripleBeatのGAAP評価を9銘柄に拡充、散布図に切替を実装",[15,155,156,157,160,161,164,165,168],{},"昨日の積み残し（散布図のGAAP/Non-GAAP切替）を掘り起こし、横軸に要るトレーリング実績GAAP EPSをサブエージェント並列で9銘柄ぶん取得・検証させた。データファイル ",[19,158,159],{},"gaapValuation.ts"," を作り、散布図ページに ",[19,162,163],{},"basis"," ref + ",[19,166,167],{},"watch"," で切替UIを足した。手書きデータの四半期合計・PER算出をテスト化して、整合の番人にした。",[15,170,171],{},[48,172,50],{},[52,174,175,178,181],{},[55,176,177],{},"9銘柄のGAAP評価データを追加（2銘柄ずつEditで積み上げ）",[55,179,180],{},"散布図にGAAP/Non-GAAP切替UIを実装",[55,182,183],{},"全58件のテストでデータ整合を固めた",[15,185,186,69,188],{},[48,187,68],{},[71,189,191],{"href":190},"/triplebeat-gaap-valuation-scatter","tripleBeat の GAAP評価データを9銘柄に拡充し、散布図にGAAP/Non-GAAP切替を実装した",[76,193],{},[38,195,197],{"id":196},"_5-ログイン済みchromeにcdpで繋ぐ手法を手順化し別系統のaiにレビューさせた","5. ログイン済みChromeにCDPで繋ぐ手法を手順化し、別系統のAIにレビューさせた",[15,199,200,201,204],{},"ログイン済みChromeをAIが操作する仕組みは拡張機能ではなくCDP（リモートデバッグ）だと腑分けし、Chrome 136+のプロファイル制約と144+のアタッチ方式を手順書にまとめた。codex側で先にできていた ",[19,202,203],{},"chrome-login-cdp"," スキルをレビューし、さらに自分のレビューをcodex自身に再帰検算させた。別件で台湾月次売上→Turso取り込み手順書をcodexに4周レビューさせて収束させ、翌日の積み残しにした。",[15,206,207],{},[48,208,50],{},[52,210,211,214,219],{},[55,212,213],{},"CDP接続の仕組みと Chrome バージョン別仕様を手順書化",[55,215,216,218],{},[19,217,203],{}," スキルをレビュー（codexにも再検算させた）",[55,220,221],{},"tw_monthly_revenue_ingest を再帰レビューで収束 → 明日へ積み残し",[15,223,224,69,226],{},[48,225,68],{},[71,227,229],{"href":228},"/chrome-cdp-login-documentation","ログイン済みChromeにCDPで繋ぐ手法をドキュメント化し、別系統のAIにレビューさせた",[76,231],{},[38,233,235],{"id":234},"_6-16本の特集記事をagent-browserで巡らせて1本にまとめた","6. 16本の特集記事をagent-browserで巡らせて1本にまとめた",[15,237,238],{},"Yahoo!ファイナンスの資産形成連載（No.1〜16）を agent-browser で全記事アクセスし、無料公開範囲を16本ぶん収集して1本のまとめに統合させた。取得→ファイル保存→集約と段を分けて、コンテキスト汚染を避けながら取り切った。",[15,240,241],{},[48,242,50],{},[52,244,245,248,254],{},[55,246,247],{},"16本を順次取得し、テーマ単位で1本に統合",[55,249,250,253],{},[19,251,252],{},"wait --load networkidle"," のタイムアウトを回避策で突破（issue化）",[55,255,256],{},"進捗をチェックボックスで管理しながら完走",[15,258,259,69,261],{},[48,260,68],{},[71,262,264],{"href":263},"/millionaire-articles-summary","16本の特集記事を agent-browser に全部巡らせて1本にまとめた話",[76,266],{},[38,268,269],{"id":269},"そのほかの細かい作業",[52,271,272,282,292],{},[55,273,274,277,278,281],{},[48,275,276],{},"Git コミットの機能単位分割",": 溜まった変更を ",[19,279,280],{},"/commit"," で機能・カテゴリごとに分割してコミット（途中malformedでリトライ）",[55,283,284,287,288,291],{},[48,285,286],{},"パウロ氏のDRAM記事のローカル立ち上げ",": 先週クローンしておいた ",[19,289,290],{},"note-paul1211-dram-blackhole/index.html"," の置き場所を探し出して立ち上げ",[55,293,294,297],{},[48,295,296],{},"/make-diary の実行",": 前日分の日記生成パイプラインを回した",[76,299],{},[24,301,302],{"id":302},"今日の試行錯誤",[304,305,306,328],"table",{},[307,308,309],"thead",{},[310,311,312,316,319,322,325],"tr",{},[313,314,315],"th",{},"#",[313,317,318],{},"テーマ",[313,320,321],{},"試したこと",[313,323,324],{},"結果",[313,326,327],{},"気づき",[329,330,331,349,365,381,398,420,444],"tbody",{},[310,332,333,337,340,343,346],{},[334,335,336],"td",{},"1",[334,338,339],{},"malformedの原因",[334,341,342],{},"「巨大ファイルが犯人」と疑った",[334,344,345],{},"失敗",[334,347,348],{},"0.1MBで落ち48MBで完走 → サイズは無関係。真因は引数構造の破綻",[310,350,351,354,357,360,362],{},[334,352,353],{},"2",[334,355,356],{},"大きなWrite",[334,358,359],{},"9銘柄データを1回のWriteで吐こうとした",[334,361,345],{},[334,363,364],{},"型定義＋2銘柄ずつのEditに割ったら通った。小分けで破綻率が下がる",[310,366,367,370,373,376,378],{},[334,368,369],{},"3",[334,371,372],{},"重い読み込み",[334,374,375],{},"ログ解析・大量読み込みをメインで抱えた",[334,377,345],{},[334,379,380],{},"サブエージェントに逃がして結論だけ返させるのが本命の予防策",[310,382,383,386,389,392,395],{},[334,384,385],{},"4",[334,387,388],{},"サブエージェント",[334,390,391],{},"注意なしで派遣した",[334,393,394],{},"一部失敗",[334,396,397],{},"「全Read禁止・複雑jq禁止・汚染注意」を添えないと派遣先も落ちる",[310,399,400,403,406,411,413],{},[334,401,402],{},"5",[334,404,405],{},"agent-browser待機",[334,407,408,410],{},[19,409,252],{}," で待った",[334,412,345],{},[334,414,415,416,419],{},"広告で常時通信するサイトはnetworkidle成立せず。",[19,417,418],{},"load","か固定待機で回避",[310,421,422,425,428,434,437],{},[334,423,424],{},"6",[334,426,427],{},"CDPでDOMが読めない",[334,429,430,433],{},[19,431,432],{},"--profile \"Profile 1\""," を疑った",[334,435,436],{},"切り分け",[334,438,439,440,443],{},"名前は一致。真因は",[19,441,442],{},"--profile","が一時コピーを使う実装（codexの解析で判明）",[310,445,446,449,452,458,461],{},[334,447,448],{},"7",[334,450,451],{},"codex再帰レビュー",[334,453,454,457],{},[19,455,456],{},"resume --last","を重ねがけ",[334,459,460],{},"暴走",[334,462,463],{},"文脈が90万トークンに膨れ、無関係なgitコミットを勝手に作ってハング → 即停止",[76,465],{},[24,467,468],{"id":468},"今日の学び",[52,470,471,474,477,480,486],{},[55,472,473],{},"malformedはファイルサイズの問題ではなく、ツール呼び出しの引数構造が破綻して起きる。落ちたらサイズより先に直近のツール引数を疑う",[55,475,476],{},"大きな書き込みは小分けにすると破綻率が下がる。型定義を先に置き、データは2件ずつ足す",[55,478,479],{},"重い読み込み・解析はサブエージェントに追い出して結論だけ受け取る。ただし派遣時に「全Read禁止・複雑jq禁止・汚染注意」を添えないと、派遣先も同じく落ちる",[55,481,482,483,485],{},"別系統のAIに再帰レビューさせるときは文脈の膨張に注意。",[19,484,456],{},"を重ねると暴走してコミットを勝手に作ることがある",[55,487,488],{},"自分は判断する係、AIは実行する係。malformedの谷をまたぐ判断（小分けにする・引き継ぎへ逃がす）が一番効いた",[76,490],{},[24,492,493],{"id":493},"明日やること",[52,495,498,508,514],{"className":496},[497],"contains-task-list",[55,499,502,507],{"className":500},[501],"task-list-item",[503,504],"input",{"disabled":505,"type":506},true,"checkbox"," tw_monthly_revenue_ingest（台湾月次売上→Turso取り込み）の積み残しを片付ける",[55,509,511,513],{"className":510},[501],[503,512],{"disabled":505,"type":506}," microGPT会計教材の段別ページ化の続き（malformedで途中だった分）",[55,515,517,519],{"className":516},[501],[503,518],{"disabled":505,"type":506}," agent-browser の networkidle timeout を恒久回避する設定をデフォルト化するか検討",[76,521],{},[24,523,524],{"id":524},"関連記事",[52,526,527,531,535,539,543,547],{},[55,528,529],{},[71,530,74],{"href":73},[55,532,533],{},[71,534,112],{"href":111},[55,536,537],{},[71,538,147],{"href":146},[55,540,541],{},[71,542,191],{"href":190},[55,544,545],{},[71,546,229],{"href":228},[55,548,549],{},[71,550,264],{"href":263},{"title":552,"searchDepth":553,"depth":553,"links":554},"",2,[555,556,566,567,568,569],{"id":26,"depth":553,"text":26},{"id":36,"depth":553,"text":36,"children":557},[558,560,561,562,563,564,565],{"id":40,"depth":559,"text":41},3,{"id":80,"depth":559,"text":81},{"id":117,"depth":559,"text":118},{"id":152,"depth":559,"text":153},{"id":196,"depth":559,"text":197},{"id":234,"depth":559,"text":235},{"id":269,"depth":559,"text":269},{"id":302,"depth":553,"text":302},{"id":468,"depth":553,"text":468},{"id":493,"depth":553,"text":493},{"id":524,"depth":553,"text":524},"diary","ツール呼び出しが一日中崩れ落ちる中、サブエージェントと引き継ぎドキュメントで乗り切った日。microGPT会計教材、旅行ガイド量産、GAAP評価拡充、CDPログイン手順化まで詰め込んだ。","md",{},null,"/2026-05-31-diary","daily-log",false,"2026-05-31T00:00:00.000Z",{"title":5,"description":571},"2026-05/2026-05-31/diary-2026-05-31",[582,583,388,584,585,586],"日記","tool-call-malformed","Nuxt","agent-browser","Codex","7yA0ZS8eEPqVqJPrl2B2S9Hozj73A7qlwEev_iL8q8c",[],"https://log.eurekapu.com/og/blog/2026-05-31-diary.png?v=2026-05-31T00%3A00%3A00.000Z&title=2026%E5%B9%B45%E6%9C%8831%E6%97%A5%E3%81%AE%E9%96%8B%E7%99%BA%E6%97%A5%E8%A8%98%20-%20tool-call-malformed%E3%81%A8%E4%B8%80%E6%97%A5%E6%88%A6%E3%81%84%E6%8A%9C%E3%81%84%E3%81%9F&author=Kei%20Komatsu&sig=028802651e6f8ff0",1782528845923]