AIコード生成ツールを使っていると、妙に防御的なコードが生成されることに気づきます。
画面をリプレイスする指示を出すと、古い画面を消さずに新しい画面から呼び出す構造を作ってしまう。
まだリリースすらしていない新規プロジェクトなのに、古いコードを残したまま新しい実装を追加してくる。
1. フォールバックが隠す不具合
フォールバック処理は一見すると「丁寧なコード」に見えます。
しかし実際には正常系に見せかけた異常系を作り出してしまうのが問題です。
エラーが静かに握りつぶされるため、不具合の発見が大幅に遅れます。
例外を潰すより観測できる設計の方が結局は早い。
1.1. AGENTS.mdで指針を示す
この問題への対策として、AGENTS.mdやCLAUDE.mdを置く方法があります1。
これらのファイルはAIエージェントが参照するため、コーディング方針を明記できます。
# エージェント指針
まずは、常にシンプルであるように。
極端に正確性を求めるのではなく、YAGNI(You Aren't Gonna Need It)、KISS(Keep It Simple, Stupid)、DRY(Don't Repeat Yourself)などの設計原則を尊重してください。
また、後方互換性のためのつぎはぎコードや代替処理の分岐は、複雑さの原因になるため回避し、正しい原因を突き止めてから実装するようにしましょう。
つまり、将来や稀なケースのためにコードを複雑化するのではなく、今の機能にとって必要なことを、シンプルに書いてください。Code language: PHP (php)
OpenAI Codexなら.codex/AGENTS.mdに配置すると、プロジェクトを横断して有効です。
この指針では、とくにYAGNI原則を強調しています。
YAGNI(You Aren’t Gonna Need It)は「今必要ないものは作るな」という意味です。
1.2. 否定文より肯定文で指示する
指針を書く上で意識したいのが「ピンクの象」問題です。
LLMは否定形の処理が本質的に苦手です。
「ピンクの象を想像するな」と言われると、ピンクの象が頭に浮かんでしまう。
これは人間も同じです。
つまり、「フォールバックを書くな」という指示は、フォールバックという概念を強く意識させてしまいます。
そこで否定文を肯定文に変換します。
「フォールバックは作成せず、代わりにログを出力して処理を停止する」のように、やるべきことを具体的に指示するわけです。
禁止するだけでなく代替処理まで示すと、無視されにくくなります。
2. 学習データがOSSだから?
AIコード生成ツールを使っていると、妙に防御的なコードが生成されることに気づきます。
AIエージェントが、防御的なコードを書く理由としては、学習データの偏りが考えられます。
AIが学習するデータの多くはOSSですが、それらのコードは後方互換性を重視しているからです。
メジャーなフレームワークは機能を消すのに何年もかけます。
そのため「古い実装を残したコード」が学習データに多い可能性が高いのです。
AIエージェントは強力な開発パートナーです。
ただし過剰な防御コードを生成する癖を理解し、適切に制御する必要があります。
AGENTS.mdでの方針明示と肯定文での指示が、その第一歩になるでしょう。