[{"data":1,"prerenderedAt":472},["ShallowReactive",2],{"content-/codex-review-driven-planning":3,"all-pages-for-dir":470,"og-image-/codex-review-driven-planning":471},{"id":4,"title":5,"body":6,"category":449,"description":450,"extension":451,"meta":452,"navigation":87,"path":453,"project_name":454,"published":455,"publishedAt":456,"seo":457,"stem":458,"tags":459,"todo":467,"updatedAt":468,"__hash__":469},"pages/2026-04/2026-04-14/codex-review-driven-planning.md","Codex（GPT-5.4）レビュー駆動の計画策定 -- 5回の往復で致命的指摘をゼロにする",{"type":7,"value":8,"toc":427},"minimark",[9,14,18,21,24,36,119,122,124,128,131,135,214,217,220,229,231,235,238,242,248,251,334,339,342,347,350,352,356,359,362,365,367,371,374,376,379,382,389,391,395,399,402,405,408,412,417,420,423],[10,11,13],"h2",{"id":12},"codexgpt-54レビュー駆動の計画策定","Codex（GPT-5.4）レビュー駆動の計画策定",[15,16,17],"p",{},"4つの実装計画を書き、それぞれCodex（GPT-5.4）にぶつけて致命的指摘だけを拾い、修正して再投入する、というサイクルを合計14回まわした。最初に出てきた指摘は符号の不整合や仕様の移管漏れなど、実装に入ってから発覚したら半日は吹き飛ぶものばかりだった。計画段階でこれらを潰せたことが、この日の最大の収穫になる。",[19,20],"hr",{},[10,22,23],{"id":23},"レビューの仕組み",[15,25,26,27,31,32,35],{},"Codex CLIの ",[28,29,30],"code",{},"exec"," コマンドにマークダウンファイルを渡し、「瑣末な点へのクソリプはしないで。致命的な点だけ指摘して」と指示する。2回目以降は ",[28,33,34],{},"resume --last"," をつけて前回の文脈を保持したまま再レビューする。",[37,38,43],"pre",{"className":39,"code":40,"language":41,"meta":42,"style":42},"language-bash shiki shiki-themes vitesse-light vitesse-light","# 初回\ncodex exec -m gpt-5.4 \"このプランをレビューして。瑣末な点へのクソリプはしないで。致命的な点だけ指摘して: memo/2026-04-14/plan.md\"\n\n# 修正後の再レビュー\ncodex exec resume --last -m gpt-5.4 \"プランを更新したからレビューして。瑣末な点へのクソリプはしないで。致命的な点だけ指摘して: memo/2026-04-14/plan.md\"\n","bash","",[28,44,45,54,82,89,95],{"__ignoreMap":42},[46,47,50],"span",{"class":48,"line":49},"line",1,[46,51,53],{"class":52},"sxvE3","# 初回\n",[46,55,57,61,65,69,72,76,79],{"class":48,"line":56},2,[46,58,60],{"class":59},"senZ8","codex",[46,62,64],{"class":63},"sdGka"," exec",[46,66,68],{"class":67},"snbK4"," -m",[46,70,71],{"class":63}," gpt-5.4",[46,73,75],{"class":74},"sMJiu"," \"",[46,77,78],{"class":63},"このプランをレビューして。瑣末な点へのクソリプはしないで。致命的な点だけ指摘して: memo/2026-04-14/plan.md",[46,80,81],{"class":74},"\"\n",[46,83,85],{"class":48,"line":84},3,[46,86,88],{"emptyLinePlaceholder":87},true,"\n",[46,90,92],{"class":48,"line":91},4,[46,93,94],{"class":52},"# 修正後の再レビュー\n",[46,96,98,100,102,105,108,110,112,114,117],{"class":48,"line":97},5,[46,99,60],{"class":59},[46,101,64],{"class":63},[46,103,104],{"class":63}," resume",[46,106,107],{"class":67}," --last",[46,109,68],{"class":67},[46,111,71],{"class":63},[46,113,75],{"class":74},[46,115,116],{"class":63},"プランを更新したからレビューして。瑣末な点へのクソリプはしないで。致命的な点だけ指摘して: memo/2026-04-14/plan.md",[46,118,81],{"class":74},[15,120,121],{},"この「致命的な点だけ」という縛りが肝になる。縛りを外すとCodexはインデントの揃えや用語の統一を延々と並べてきて、肝心の設計不備が指摘の山に埋もれる。",[19,123],{},[10,125,127],{"id":126},"cf_205-株主資本応用-5回のレビューサイクル","CF_205 株主資本応用: 5回のレビューサイクル",[15,129,130],{},"4つの計画のなかで最も往復を重ねた。圧縮積立金や自己株式など符号が反転する科目が複数あり、1箇所でも符号を取り違えるとCFWS全体の数字が崩れる。",[132,133,134],"h3",{"id":134},"レビューの推移",[136,137,138,154],"table",{},[139,140,141],"thead",{},[142,143,144,148,151],"tr",{},[145,146,147],"th",{},"回",[145,149,150],{},"致命的指摘",[145,152,153],{},"主な内容",[155,156,157,172,182,193,203],"tbody",{},[142,158,159,163,166],{},[160,161,162],"td",{},"1回目",[160,164,165],{},"4件",[160,167,168,171],{},[28,169,170],{},"*-1","符号の付与位置が中間テーブル集約とCFWS配分で二重になる問題、contra-equity（自己株式）の符号が他の純資産科目と逆転する設計漏れ",[142,173,174,177,179],{},[160,175,176],{},"2回目",[160,178,165],{},[160,180,181],{},"修正で新たに浮上した中間テーブルの科目別row_defs設計不備、利益剰余金のBS増減→CF調整の経路が未定義",[142,183,184,187,190],{},[160,185,186],{},"3回目",[160,188,189],{},"2件",[160,191,192],{},"圧縮積立金のCFWS配分で営業CF/投資CF/財務CFへの振り分けルールが曖昧",[142,194,195,198,200],{},[160,196,197],{},"4回目",[160,199,189],{},[160,201,202],{},"row_defs定義とcompute関数の引数が噛み合わない箇所",[142,204,205,208,211],{},[160,206,207],{},"5回目",[160,209,210],{},"1件",[160,212,213],{},"最後の1件を修正し、Codexが「致命的な指摘はない」と返した",[132,215,216],{"id":216},"符号問題の具体例",[15,218,219],{},"自己株式（contra-equity）はBS上で純資産のマイナスとして計上される。他の純資産科目は「増加=貸方=正」だが、自己株式だけ「増加=借方=負」になる。この符号反転を中間テーブルの集約段階で処理するか、CFWS配分段階で処理するかが曖昧だった。",[15,221,222,223,225,226,228],{},"Codexの指摘で「中間テーブル集約時に",[28,224,170],{},"を適用し、CFWS側では符号変換しない」という単一ソースの方針が決まった。計画段階で決めていなければ、実装時に集約と配分の両方で",[28,227,170],{},"を入れてしまい、符号が相殺されて正しく見えるが実際は二重反転、というバグを埋め込むところだった。",[19,230],{},[10,232,234],{"id":233},"cf_202-リファクタリング-4回のレビューサイクル","CF_202 リファクタリング: 4回のレビューサイクル",[15,236,237],{},"3600行の単一Pythonスクリプトを論点別モジュールに分割する計画。Codexの指摘で当初の計画にはなかった3つの方針が加わった。",[132,239,241],{"id":240},"codex指摘で追加された方針","Codex指摘で追加された方針",[15,243,244],{},[245,246,247],"strong",{},"1. registry化",[15,249,250],{},"元のスクリプトでは各論点の処理が巨大なif-elif連鎖で分岐していた。Codexは「論点を追加するたびにif文が伸びる構造は壊れやすい」と指摘し、各論点モジュールを辞書に登録するregistry方式を提案した。",[37,252,256],{"className":253,"code":254,"language":255,"meta":42,"style":42},"language-python shiki shiki-themes vitesse-light vitesse-light","# registry方式のイメージ\nTOPIC_REGISTRY = {\n    \"201_bonds\": bonds_module,\n    \"202_fixed_assets\": fixed_assets_module,\n    \"205_equity\": equity_module,\n}\n","python",[28,257,258,263,275,296,312,328],{"__ignoreMap":42},[46,259,260],{"class":48,"line":49},[46,261,262],{"class":52},"# registry方式のイメージ\n",[46,264,265,268,272],{"class":48,"line":56},[46,266,267],{"class":67},"TOPIC_REGISTRY",[46,269,271],{"class":270},"shFtX"," =",[46,273,274],{"class":270}," {\n",[46,276,277,280,283,286,289,293],{"class":48,"line":84},[46,278,279],{"class":74},"    \"",[46,281,282],{"class":63},"201_bonds",[46,284,285],{"class":74},"\"",[46,287,288],{"class":270},":",[46,290,292],{"class":291},"sG7-3"," bonds_module",[46,294,295],{"class":270},",\n",[46,297,298,300,303,305,307,310],{"class":48,"line":91},[46,299,279],{"class":74},[46,301,302],{"class":63},"202_fixed_assets",[46,304,285],{"class":74},[46,306,288],{"class":270},[46,308,309],{"class":291}," fixed_assets_module",[46,311,295],{"class":270},[46,313,314,316,319,321,323,326],{"class":48,"line":97},[46,315,279],{"class":74},[46,317,318],{"class":63},"205_equity",[46,320,285],{"class":74},[46,322,288],{"class":270},[46,324,325],{"class":291}," equity_module",[46,327,295],{"class":270},[46,329,331],{"class":48,"line":330},6,[46,332,333],{"class":270},"}\n",[15,335,336],{},[245,337,338],{},"2. テストファースト",[15,340,341],{},"分割前に既存の出力をスナップショットとして保存し、分割後の出力と差分比較する手順が計画に入った。3600行を触って「壊していない」と言い切れる根拠がないまま進めば、どこかで回帰バグを踏む。指摘を受けてスナップショット比較を計画に組み込んだ。",[15,343,344],{},[245,345,346],{},"3. compute関数とrow_defsの単一ソース化",[15,348,349],{},"各論点モジュール内でcompute関数（計算ロジック）とrow_defs（行定義）が別々のファイルに散らばる設計を書いていたが、Codexは「row_defsが唯一の真実となり、compute関数はrow_defsから行の並びを読む」構造を推した。この方針を採用したことで、行の追加・削除がrow_defsの1箇所で完結するようになった。",[19,351],{},[10,353,355],{"id":354},"cfドキュメント統合-2回のレビュー","CFドキュメント統合: 2回のレビュー",[15,357,358],{},"5つに分散していたCF関連ドキュメントを3つに統合する計画。2回目のレビューで指摘が消えた。",[132,360,361],{"id":361},"v13フォーマット移管漏れ",[15,363,364],{},"初回レビューでCodexが突いたのは、統合先のドキュメントにv13フォーマット仕様の記述が欠けている点だった。旧ドキュメントの1つにだけv13固有の列定義や色コードの仕様があり、統合作業で落としかけていた。人間が5ファイルを逐一照合して漏れを探すのは目が滑る。Codexはマークダウンを丸ごと飲み込んで「この仕様が統合先に見当たらない」と返してくる。",[19,366],{},[10,368,370],{"id":369},"圧縮積立金のcfws配分-3回のレビュー","圧縮積立金のCFWS配分: 3回のレビュー",[15,372,373],{},"圧縮積立金の積立・取崩がCFWSのどの区分に配分されるかを定義する計画。営業CF調整と投資CF調整の境界線が定まらず、3回の往復を経て配分ルールが1つに収束した。",[19,375],{},[10,377,378],{"id":378},"read-onlyサンドボックスの罠",[15,380,381],{},"Codex CLIはデフォルトでread-onlyサンドボックス内で動く。レビュー中にCodexが「ファイルの中身をgrepで確認したい」とツールを使おうとするが、サンドボックスがブロックする場面が何度かあった。",[15,383,384,385,388],{},"特に日本語を含むコマンド（",[28,386,387],{},"grep \"圧縮積立金\" ...","）を投げるとエンコーディングの壁に当たり、Codexが同じコマンドを微妙に変えながら数回空振りする。対策として、レビュー対象のマークダウンに必要な情報をすべて埋め込んでおく（外部ファイル参照を減らす）ことで、Codexがファイルを読みに行く必要を減らした。",[19,390],{},[10,392,394],{"id":393},"_1日で14回レビューを回して見えたこと","1日で14回レビューを回して見えたこと",[132,396,398],{"id":397},"致命的な点だけの指示が効く","「致命的な点だけ」の指示が効く",[15,400,401],{},"フィルタなしだとCodexは10件以上の指摘を並べてくる。大半は命名規則やコメントの書き方で、設計を壊すものではない。「致命的な点だけ」と絞ると、1回あたり2〜4件まで指摘が削ぎ落とされ、修正すべき箇所がすぐ見える。",[132,403,404],{"id":404},"初回に致命的指摘が集中する",[15,406,407],{},"4つの計画を通して、初回レビューの指摘数が最も多い。2回目以降は修正で新たに露出した問題か、初回で見落とされていた深い層の問題が出る。3回以上回して初めて出てくる指摘は、複数の修正が組み合わさって初めて見える類のものだった。",[132,409,411],{"id":410},"resume-lastの文脈維持が必須","resume --lastの文脈維持が必須",[15,413,414,416],{},[28,415,34],{},"を使わずに2回目のレビューを投入すると、Codexは1回目と同じ指摘を繰り返す。前回の指摘と修正の文脈を引き継ぐことで、「前回の指摘Aは修正されている。新たにBが問題」という積み上げ型のレビューが成立する。",[132,418,419],{"id":419},"計画段階で潰せるバグは計画段階で潰す",[15,421,422],{},"符号の二重反転、フォーマット仕様の移管漏れ、行定義の散在。どれも実装中に発覚すれば、原因を追いかけて半日が消える。計画のマークダウンを書くのに30分、Codexレビューの往復に1時間。合計1.5時間で、実装時の手戻り数時間分を先に潰している。",[424,425,426],"style",{},"html pre.shiki code .sxvE3, html code.shiki .sxvE3{--shiki-default:#A0ADA0;--shiki-dark:#A0ADA0}html pre.shiki code .senZ8, html code.shiki .senZ8{--shiki-default:#59873A;--shiki-dark:#59873A}html pre.shiki code .sdGka, html code.shiki .sdGka{--shiki-default:#B56959;--shiki-dark:#B56959}html pre.shiki code .snbK4, html code.shiki .snbK4{--shiki-default:#A65E2B;--shiki-dark:#A65E2B}html pre.shiki code .sMJiu, html code.shiki .sMJiu{--shiki-default:#B5695977;--shiki-dark:#B5695977}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .shFtX, html code.shiki .shFtX{--shiki-default:#999999;--shiki-dark:#999999}html pre.shiki code .sG7-3, html code.shiki .sG7-3{--shiki-default:#393A34;--shiki-dark:#393A34}",{"title":42,"searchDepth":56,"depth":56,"links":428},[429,430,431,435,438,441,442,443],{"id":12,"depth":56,"text":13},{"id":23,"depth":56,"text":23},{"id":126,"depth":56,"text":127,"children":432},[433,434],{"id":134,"depth":84,"text":134},{"id":216,"depth":84,"text":216},{"id":233,"depth":56,"text":234,"children":436},[437],{"id":240,"depth":84,"text":241},{"id":354,"depth":56,"text":355,"children":439},[440],{"id":361,"depth":84,"text":361},{"id":369,"depth":56,"text":370},{"id":378,"depth":56,"text":378},{"id":393,"depth":56,"text":394,"children":444},[445,446,447,448],{"id":397,"depth":84,"text":398},{"id":404,"depth":84,"text":404},{"id":410,"depth":84,"text":411},{"id":419,"depth":84,"text":419},"dev","CF計算書の4つの実装計画をCodex（GPT-5.4）にレビューさせ、合計14回のレビューサイクルで致命的な設計不備を洗い出した手法と、指摘の具体例をまとめた","md",{},"/codex-review-driven-planning","eurekapu-nuxt4",false,"2026-04-14T00:00:00.000Z",{"title":5,"description":450},"2026-04/2026-04-14/codex-review-driven-planning",[460,461,462,463,464,465,466],"Codex","GPT-5.4","計画策定","コードレビュー","CF計算書","Python","リファクタリング","memo",null,"M7yna_dQ-dXUUiF35k9IblzoZ9uvwIns_fBjoOIbouc",[],"https://log.eurekapu.com/favicon.svg",1776200310151]