計画書を書かせ、別モデルでレビューし、3択フォームで決裁するまで

開発misc-dev

Xを眺めていたら、UIデザイナーの人が自作スキルを紹介する投稿が流れてきた。 オブジェクトがどう紐づいているのかを見たくて、デザインデータと概念図とER図を同じキャンバスに乗せ、メニューひとつで行き来できるようにしたという。 スクリーンショットが4枚ついていた。

見た瞬間、自分のChrome拡張でも同じことをやりたくなった。 会計ソフトAの画面に機能を足している拡張だ。 画像4枚をそのままClaude Codeに貼りつけた。

貼ったあと、すぐ実装へ走らせてもよかった。 そうはせず、計画から入らせた。 まずリポジトリの中身を把握させ、そのうえで計画書を書かせた。

足した機能そのものの話は別記事に書いた。

heredocがクォートで崩れた

計画書の本文をheredocでファイルへ流し込もうとしたら、クォートの扱いで途中から崩れた。 バッククォートも引用符も混ざるマークダウンを、シェル越しに長文で渡したのがまずかった。

書き方を変えて、Writeツールで直接ファイルを作らせたら、そのまま通った。

レビューを回している間に、図を描かせた

計画書の初稿ができたところで、Codexへレビューを投げた。 返事が来るまで、こちらの手は空く。

そのまま待つ理由はない。 決裁フォームに載せる選択肢を先に用意させた。 続けてsvg-diagramを読ませ、計画書に入れる図を描かせた。 レビューが返るころには、図も選択肢も揃っている。

レビューで返ってきた1件の指摘

返ってきたのは、文章の良し悪しではなく、実データの誤りを1件突く指摘だった。 計画書に書いた保存キーの前提が違う、という。

鵜呑みにはしない。 Codexの判定をそのまま受け取らないのは普段からの方針だし、今回はコードを見れば済む話だった。 拡張のコードをもう一度grepし直して、自分で確かめた。

指摘どおりだった。

mfc:year:...   帳簿チェックが使う保存キー
mfv:year:...   明細一覧ビューが使う保存キー

接頭辞が2種類あって、別物を保存している。 最初に計画書を書かせたとき、mfc: だけを検索していた。 片方しか見ていない状態でキーの一覧を作り、その一覧を前提に設計を組み立てていたことになる。

このまま実装へ入っていたら、キーの一覧を前提に組んだ部分を書き直すことになっていたはずだ。 すぐ作らせずに計画書を挟んだのは、これのためだった。

計画書を直して、もう一度Codexに投げた。 今度は「承認」が返ってきた。

判断事項は3択ボタンにした

計画書が固まっても、こちらが決めないと先へ進めない項目が3件残った。

ターミナルの選択肢で聞かれるのは、この手の判断と相性が悪い。 何を天秤にかけているのかは計画書の本文に書いてあるのに、選ぶ画面には選択肢の文字列しか出ない。 前提を読み返そうとすると、選択の画面をいったん抜けることになる。

そこで計画書をHTML化して、判断が必要な箇所に3択ボタンを埋め込んだフォームを立てた。 計画書を上から読んでいき、読み終わった流れのままボタンを押せばいい。

デバッグポートが開いていなかった

フォームを立てたら、描画を自分の目で確認する。

ところが、いつも使っているChromeのデバッグポートが開いていなかった。 ここで復旧に時間を使う理由もないので、ヘッドレスで立ち上げてスクリーンショットを撮らせた。

1枚目で、UIが生成されていることは分かった。 ただし全体を1枚に収めた画像では、ボタンの見た目までは分からない。 判断事項の部分だけを切り出してもう1枚撮らせ、3択が崩れずに並んでいることを見た。 最後に、待ち時間のあいだに描かせた図の描画も確かめた。

ここまで済ませてから、判断事項3件をブラウザで選べる状態にしたと報告し、http://127.0.0.1:8899/ を添えた。

学びメモ

  • 別モデルのレビューは、文章の体裁ではなく実データの前提を突いてきたときに効く。今回の1件がそれだった
  • 指摘が当たっているかは自分で確かめる。当たっていたのは結果であって、確かめるまでは分からない
  • grepの網が狭いと、計画書の前提がまるごとずれる。接頭辞が1種類とは限らない、と疑う癖をつける
  • レビューの待ち時間は空いている。図を描かせる、決裁の選択肢を用意する、といった作業を差し込める
  • 判断を求めるときは、判断材料のすぐ隣にボタンを置く。前提と選択肢を別の画面に分けない
  • ブラウザの確認経路が塞がっていても、ヘッドレスで撮れば描画は見られる。全景1枚で終わらせず、見たい部分を切り出して撮る
#計画書#Codexレビュー#決裁フォーム#Claude Code#開発プロセス#開発日記