🧠 AI Codingとテスト
AIコーディングにおいて、AIはテストをちゃんと書いてくれるのか。まだ正直よく分かっていない。頼めば書いてくれる雰囲気はあるが、テストが存在しないプロジェクトでは、自発的に書くことは少ない気がする。一方で、テストが充実しているプロジェクトだと、特に指示しなくても書いてくれることもある。「テストを書いてほしい」という前提条件を明示すれば対応率は上がるが、その前提すらスルーされることもある(最近は t_wata というキーワードを入れると、書いてくれる確率が上がるという話もあるw)。「そもそもテストを書くべきか?」という問いには、「書くべき」だとは思っている(本当に書けているかは強く言えないw)。ただ、ここで考えたいのは、「AIコーディングにおいてもテストを書くべきか?」という新しい問い。そしてこれについては、そうあるべきだと感じた体験がある。
🤖 AIコーディングでテストを書くべき理由
AIにテストを書かせるべきだと思ったきっかけは、AIコーディングを始めた初期の体験だ。Agentモードも使っていなかった頃、AIにコードを質問して、出力されたコードをコピペして動かすという開発スタイルだった。その中で、特定の実装をAIに頼んだが、うまくいかなかった。人間がやれば「数日くらいかかるかも。うまくいけば1日でできるかも」くらいのタスクだった。UI自体はすぐにできた。ボタンを押すと動作もする。しかし、挙動が明らかにおかしい。5回ほどやり取りしても状況は改善せず、コードをすべて捨てて再構築しても結果は同じ。それを3回くらい繰り返して、「このやり方では無理だ」と判断した。
🧪 テストを書いたら一発で通った
そこで方針を変更。自分で書こうと決めたが、その準備として、ロジック部分を切り出してテストを書いてくれとAIに依頼した。すると、UIと分離されたモデル部分に対して、テストコードをしっかり書いてくれた。実行してみると、一発ですべてのテストが通った。そのままUIと統合して再実行してみたところ、なんと今まで何度も失敗していた処理が、完璧に動作した。つまり、UIベースでは何度やってもうまくいかなかったことが、テストベースに切り替えた途端、あっさり成功したのだ。
🎯 なぜうまくいったのか?
UIありきでアルゴリズムを考えるのは、人間でも難しい。つまり、AIにとっても難しい可能性が高い。UIはエラーがないように見えても、期待通りかどうかは人間の主観的判断に依存する。仕様書が完璧に定義されていない限り、エラーは「期待外れ」という結果でしか判断できない。一方で、テストは成功条件が明確。成功か失敗かが即座に分かる。明確なゴールがある状態は、AIにとっても扱いやすい。さらに、ロジックを切り出してテスト可能にすることで、コード構造自体も整理される。UIを含めたあいまいな状態でAIに設計させても失敗する可能性は高いが、テストという明確な評価軸があるだけで、コードの質は上がる。これは人間も同じ。
✅ AIにもテストを書いてもらった方が良い。
それ以降、AIコーディングでも意識的にテストを書いてもらうようにしている。最近では、こちらから明示しなくてもAIがテストを書いてくれることもある。ただ、ミスが完全に減ったというほどの変化はまだ体感していない。失敗するケースは今でも多い。とはいえ、人間と同じで、AIも構造化された環境のほうが力を発揮する。だからこそ、AIにも積極的にテストを書かせるべきだと思っている。
