AIにコードを書かせても、責任は消えない
AIが書いたコードをレビューするべきか、しなくてもよいのか。
わたしは、責任を取れる範囲ならレビューしなくてもいいと思っています。
個人開発や自分だけで使うツールなら、なおさら自由に決めればよいです。
ユーザーに提供するプロダクトでも、すべてのAI生成コードに人間が目を通すべきだと言いたいわけではありません。レビューを省くのも、AIに任せる範囲を広げるのも、運用上の判断です。
ただし、その判断の結果までAIに渡すことはできません。
AIに実装させるのはよい。レビューを省くのもよい。ただし、責任は人間が負う。
コードに限らず、資料作成、調査、テストのたたき台、設計案の比較など、AIを使うことで成果物の質が上がる場面はあります。手作業より速いだけでなく、自分だけでは出てこない観点を拾えることもあります。
なので、わたしは「AIを使うこと」自体にはかなり肯定的です。
問題は、AIを使ったかどうかではありません。
どこまでなら責任を取れるのかです。
AIが書いたこと自体は問題ではない
AI生成コードで危ないのは、AIが書いたこと自体ではありません。
危ないのは、責任を取れない範囲までそのまま出すことです。
これは人間が書いたコードでも同じです。よく分からない外部のコードをコピーして、動いたから本番に入れる。影響範囲を見ずに大きな差分をマージする。仕様を理解しないままテストが通ったのでOKにする。
どれも危ない。
AIはこの危なさを増幅します。
短時間で大量のコードを書けるので、人間の理解が追いつかない差分が簡単に生まれます。しかも、一見するとそれっぽく動きます。変数名も自然で、コメントもあり、テストまで付いてくることがあります。
だからこそ危ない。
「それっぽく完成しているもの」は、未完成なものより責任の境界を曖昧にしやすいからです。
出力者と責任者は違う
AIがコードを出力したとしても、そのコードを main branch に入れる判断をしたのは人間です。
AIがテストを書いたとしても、そのテストで十分だと判断したのは人間です。
AIがリファクタ案を出したとしても、その設計でよいと承認したのは人間です。
つまり、出力者はAIでも、責任者は人間です。
ここを混ぜるとおかしくなります。
「AIが書いたから自分は知らない」とは言えません。ユーザーから見れば、そのコードはプロダクトの一部です。障害が起きたときに説明するのも、直すのも、影響を受けるユーザーに向き合うのも人間です。
AIは作業を肩代わりできます。
でも、責任までは肩代わりできません。
Linux kernel の AI coding assistants ドキュメントでも、この線引きは明確です。AI agent は Signed-off-by を追加してはならず、DCO を法的に証明できるのは人間だけだとされています。人間の提出者が、AI生成コードのレビュー、ライセンス要件の確認、そして貢献そのものへの責任を負う、という整理です。
参考: AI Coding Assistants - The Linux Kernel documentation
この考え方は、かなり現実的だと思います。
もちろん、すべての開発現場が Linux kernel と同じ運用をする必要はありません。ただ、この責任の線引きは多くのチームにとって参考になるはずです。
AIを禁止するのではなく、AIを使った成果物を人間が引き受けられる状態にする。
大事なのはそこです。
AIレビューも責任の肩代わりにはならない
AIにコードを書かせ、別のAIにレビューさせる。
これは便利です。自分も使います。
ただし、それで人間の判断が不要になるとは思いません。
AIレビューは、明らかなミスを見つけたり、見落としていた観点を出したり、テスト不足を指摘したりする補助として有用です。
でも、最後に「この変更を入れてよい」と判断するのは人間です。
なぜなら、プロダクトの文脈、過去の障害、チームの設計方針、運用上の都合、ユーザーへの影響は、コードの字面だけでは決まらないからです。
AIはコード上の問題を見つける助けにはなります。
でも、その変更を自分たちのプロダクトとして引き受ける判断はできません。
レビューは責任を引き受けるための手段
レビューは、単にバグを探す作業ではありません。
その変更を、自分たちの成果物として出してよいかを判断するための手段です。
なので、レビューそのものが目的ではありません。
責任を取れる範囲なら、レビューを省いてもよいと思います。
影響範囲が小さい。すぐ戻せる。失敗してもユーザーに大きな不利益がない。ログや監視で検知できる。そういう条件がそろっていて、自分たちが結果を引き受けられるなら、毎回重いレビューを挟む必要はありません。
AIレビュー、静的解析、自動テスト、型チェック、CI、セキュリティツールは使えばよいです。むしろ使ったほうがよい。
ただし、それらは責任を分散する道具ではありません。
人間が判断するための材料です。
判断材料になるのは、細かい書き方だけではありません。その変更が何を解決するのか。既存の設計方針とずれていないか。テストは仕様を十分に表しているか。失敗したときに検知できるか。問題が起きたときに戻せるか。
そうした材料を十分だと見なして出すのか、足りないから止めるのか。そこを決めるのが人間の仕事です。レビューを薄くするなら、そのぶん問題が起きたときの責任も含めて引き受けることになります。
まとめ
AIでコードを書くこと自体は問題ではありません。
AIに実装、調査、資料作成、テスト生成、レビュー補助を任せることで、成果物の質が上がることもあります。
ただし、AIが出力したものをそのままリリースするとき、その責任までAIに渡せるわけではありません。
AIは出力できます。
でも、責任は負えません。
だから、レビューしないなら、レビューしない判断の結果も引き受ける必要があります。
説明できないものをリリースするなら、説明できないまま出した責任が残ります。
レビューするか、テストや仕組みで担保するか、あえてリスクを取るか。
どれを選んでも、責任はAIには移りません。
出力はAIが作っても、責任は人間が負う。
少なくとも、わたしはそういう姿勢でいたいです。
Discussion