AIToday
AIコーディングZenn AI/ML掲載日時: 2026年10月7日 22:00

AIコードは全行読むな、契約とテストで絞れ

LINEで送る
AIコードは全行読むな、契約とテストで絞れ

3つのポイント

  1. 何が起きたか

    Zennの記事で筆者は、AI生成コードのレビューを契約で行い、Hypothesisのようなプロパティベーステストで検証する手法を提案した。

  2. なぜ重要か

    人間は実装ではなく契約そのものが業務ルールと合っているかに集中できるようになり、筆者は全行を同じ密度で読むことによる注意力疲労を避ける現実的な方法だと述べている。

  3. 注目点

    筆者によればこれは契約が意図を表現できる領域に限って機能し、認可・決済・削除は依然として全行を読み、弱いテストを検出するにはミューテーションテストが必要だという。

誰に効くかAIコード生成を使うチームのソフトウェアエンジニアとエンジニアリングマネージャーは、レビューのチェックリストやプルリクエストのテンプレートが変わるのを目にするだろう。純粋関数は契約とテストで処理され、認可・決済・データ削除の変更は依然として人間が全行読むことになる。

わからないところ、AIに聞けます

質問と回答はこのページに公開されます。

こういう要約が、毎朝あなたのメールに届きます。

背景と解説

記事は単純な観察を土台に議論を組み立てる。AIがコードを生成するほど、人間がそれを読む時間の方が先に尽きる。筆者はすべてを同じ密度で読むのではなく、型・テスト・静的解析で機械的に強制できる部分とそうでない部分を分けることを提案する。鍵となるのは、人間を実装ではなく契約に向けることだ。例では、割引関数の事前条件・事後条件・不変条件をAIが本体を埋める前にdocstringとして書き、プロパティベーステストが入力を生成してその約束を破ろうとする。

筆者は限界にも慎重だ。この提案は仕様が安定し、CIのテスト環境が機能し、副作用が支配的でないコードを前提とする。比較表では、純粋関数とデータマッピングは契約で表現しやすく、外部API連携は部分的にしか表現できず、認可・決済・削除は表現が難しく全行読む必要があるとされる。筆者は認可の抜けがOWASP Top 10の主要リスクだと指摘し、テストが通っても認可が正しいとは限らない——多くの場合、そうしたテストは書かれていないからだと述べる。

弱いテストが仕組み全体を損なわないように、筆者はコードを意図的に壊してテストが失敗するか見るミューテーションテストを挙げ、重要なモジュールに限定することを勧める。工数について筆者は明言する。これは作業を減らす話ではない。契約を書く負担は実装を読む負担とは別物で、総量は減るのではなく移るだけかもしれない。本当の試練は、領域ごとに「守れない層」に属すると誰が決めるかをチームが明言できるかどうかだ。

よくある質問
AI生成コードは人間が書いたコードより厳しくレビューすべきですか?
いいえ。筆者によれば、厳しさは誰が書いたかではなく変更が触れる領域で決まる。認可・金銭・削除の変更は、書き手に関係なく全行読む。
契約とテストはAI生成コードのレビューを完全に置き換えられますか?
いいえ。筆者によれば、機械的に検証できる範囲を広げ人間が読む量を減らすが、契約そのものの妥当性は依然として人間が確認する必要がある。
プロパティベーステストとは何ですか?
入力例を一つずつ書く代わりに、あらゆる入力で成り立つべき性質を書き、ツールに入力を生成させて検証する。PythonではHypothesisが代表的なライブラリだ。
ミューテーションテストはCIビルドごとに実行すべきですか?
筆者によれば、遅いため毎回どこでも実行する必要はない。重要なモジュールに限定するか、夜間ジョブとして実行するのが現実的だとされている。
LINEで送る

あなたの仕事に関係するAIニュースを、毎朝お届けします。

業界と使っているAIツールを選ぶと、仕事に関係するニュースが毎朝届きます。

登録無料・Googleアカウントなら30秒・いつでも解除できますAITodayについて →

AIに質問

この記事についてわからないことをAIに質問できます。AIはこの記事・AIToday の過去記事・Wikipedia を読み、出典を付けて答えます。Q&Aはこのページに公開され、他の読者も読めます。

質問と回答はこのページに公開されます。

関連記事

次の記事へChatGPTがNYer漫画家15人超の署名を偽造