AI がコードを書く速度が上がるほど、プロジェクトが崩れる速度も上がり得る。問題はモデルが関数を生成できるかではなく、要件を理解し、チームの言葉に従い、既存アーキテクチャの中で小さく進められるかだ。
Matt Pocock が公開した mattpocock/skills は、vibe coding とは逆の方向を示している。AI に開発プロセス全体を任せるのではなく、成熟したソフトウェア工学の制約の中に置く。
プロジェクト:https://github.com/mattpocock/skills
これは魔法の prompt ではない。要件確認、ドメインモデリング、TDD、診断、アーキテクチャレビューを、AI agent が使いやすい workflow にした skills の集合だ。
まずアラインメント失敗を防ぐ
AI コーディングで最も多い失敗は、モデルが理解したと思ったら、実は曖昧な説明から推測していただけ、というものだ。
grill-me はこれを反転させる。コードを書く前に、AI を厳しいレビュアーにし、分岐、境界、未決事項を質問させる。
たとえば「ログインページを作って」と頼んだら、先に聞くべきことは次のようなものだ。
- パスワード忘れはどう扱うか
- 外部ログインをサポートするか
- ログイン失敗時のエラー表示はどうするか
- アカウントロック、CAPTCHA、リスク制御は範囲内か
- 成功後はどこへ遷移するか
この段階は遅く見えるが、後の手戻りを減らす。コード生成が安くなるほど、曖昧な要件のコストは大きくなる。
ドメイン言語をコンテキストに入れる
次の問題は汎用語彙だ。モデルはチーム内の業務用語を知らないため、変数名、関数名、ドキュメントの言葉がずれていく。
grill-with-docs は質問しながら、CONTEXT.md、ADR、ドメイン文書を確認する。確認済みの用語、境界、判断は、再利用できるコンテキストとして残せる。
これはドメイン駆動設計のユビキタス言語に近い。チームが user ではなく customer、order ではなく transaction と呼ぶなら、AI もその言葉を使うべきだ。
コンテキスト文書の価値は、情報量ではなく推測を減らすことにある。
TDD で生成速度を制御する
AI の危険は速さにある。昔は悪いコードを大量に書くにも時間がかかったが、今は数秒で数百行が出る。問題は速さそのものではなく、フィードバックループがないことだ。
tdd skill は RED-GREEN-REFACTOR を戻す。
- ひとつの振る舞いに対して失敗するテストを書く。
- そのテストを通す最小実装を書く。
- リファクタリングする。
- 次の縦スライスへ進む。
重要なのは、ひとつずつ進めることだ。AI は実行し、人間は方向と境界を確認する。
診断ループで複雑な問題を扱う
バグに出会うと、多くの agent は答えを推測し、何度も修正して問題をさらに複雑にする。
diagnose は先にフィードバックループを作らせる。
- 再現する
- 最小化する
- 仮説を立てる
- 観測やログを足す
- 修正する
- 回帰テストを足す
古い方法だが、AI コーディングでは特に重要だ。AI は試行が得意だが、根因に近づいているかを判断するにはレールが必要になる。
アーキテクチャを定期的に見る
単発のタスクが通っても、コードベースが良くなったとは限らない。AI の小さな変更が積み重なると、モジュール境界がぼやけ、インターフェイスが複雑になり、テストしづらくなる。
improve-codebase-architecture のような skill は、現在のタスクから離れて全体を見る。
- 責務が混ざっているモジュールはどこか
- 複雑すぎるインターフェイスはどれか
- テストしづらい経路はどこか
- ドメイン言語と合わない命名はどれか
- 収束すべき重複ロジックはどれか
これは自動で大規模リファクタリングするためではない。構造化された観察と改善方向を出し、人間が判断するためのものだ。
制限すべきは自由度
この方法論の核心は単純だ。AI コーディングはモデルを自由に走らせることではなく、明確な目標、コンテキスト、テスト、停止条件を与えることだ。
人間は問題定義、アーキテクチャ境界、業務上の取捨選択、受け入れ基準を担当する。AI はコード生成、テスト補完、反復修正、局所的なリファクタリングを担当する。
AI が強くなっても、ソフトウェア工学の基礎は古くならない。要件整理、ドメイン言語、TDD、診断、アーキテクチャレビューは、むしろ重要になる。
コードを書ける人は増える。差がつくのは、AI を保守可能で検証可能な工学体系に組み込めるかどうかだ。