tech
tech 2026.07.17 6 min read

AI生成されたコードを完全に理解する必要はあるのか

AI生成コードを読むべきか、流すべきか。その不安の置き場所について。

AIにコードを書いてもらうようになってから、差分を見る時間の質が変わった。

前は、差分というのはだいたい「自分が書いたもの」だった。もちろん昨日の自分は他人だし、三日前の自分はほぼ外注先なのだが、それでもまだ身内だった。酔って帰ってきた家族くらいの距離感。何をしでかしていても、まあこいつならやりそう、という諦めがある。

AIが書いた差分は違う。

急に知らない helper がいる。知らない分岐がある。テストが増えている。しかもまあまあ通っている。嬉しい。嬉しいんだけど、どわ〜〜〜〜、今からこれ全部読むのか、という気持ちにもなる。

便利さと不安が同じ PR に同居している。これがなかなか変な感じだ。

「全部読め」は正しい。正しいけど

AI生成コードを完全に理解すべきか、という問いに対して、いちばん安全な答えは「理解すべき」だと思う。

そりゃそう。理解していないコードを出すな。正しい。ぐうの音も出ない。

でも、正しさだけで生活していると疲れる。ちょっとした余白調整や、管理画面の小さい便利ボタンや、誰も見ていない設定画面の文言修正まで、毎回ぜんぶ読むのはしんどい。しんどいというか、たぶん続かない。

なので、自分の中では「完全に理解するべきか」よりも、「ここで不安にならないと後で痛い目を見るか」に近い問いになっている。

信頼するかどうか、ではない。

どこに不安を置くか。

セキュリティまわりは、まだ雑に流せない

まず、機密情報を扱うところ。

APIキー、個人情報、認証、権限、社内だけのデータフロー。こういう場所にAIの手が入ったら読む。さすがに読む。読まないと、夜に布団の中で「ログに何か出てないか?」が来る。あの時間帯の不安は最悪。だいたい寝る直前に来る。

AIがセキュリティを何も分かっていない、とは思っていない。むしろ脆弱そうなところを見つけてくれて助かることもある。ただ「このサービスにとって何が危ないか」は、けっこうローカルな話だったりする。

昔それで怒られた、という記憶。誰も文書化していないが絶対に触らないことになっている項目。営業が顧客に約束してしまった謎仕様。そういう、コードの外側にある泥をAIが全部知っているかというと、まあ知らない。知らないまま、きれいな顔で「問題ありません」と言ってくる。

そのとき、AIの「問題ありません」が妙にまっすぐすぎて、なにが問題ありませんだ、trust me broで信頼できるかコノヤロ、と思っている間はしっかり読む。キレつつ読む。

説明できない機能は、急に怖くなる

人に説明する予定があるコードも読んでおきたい。

これは責任感とか倫理とか、そういう立派な話にしてもいいのだけど、もっと雑にいうと、恥をかきたくない。

たとえば営業同席の場で「IP制限がある環境だと、この機能はブロックされますよね?」と聞かれる。こちらはその機能をリリースした人間として座っている。ここで「えー、たぶん……?」みたいな顔をすると、空気が一段冷える。

別に実装を暗唱したいわけではない。関数名も全部は覚えたくない。そんな人生はつらい。

ただ、どういう条件で動くのか、どこで弾くのか、どこから先は例外なのか。そのへんを自分の言葉で説明できないと、画面の向こうにいる人の不安を増やしてしまう。

LGTM by vibes は気持ちいい。短いし、勢いがある。だが議事録に残すには弱い。vibes は法務レビューを通らない。

増築予定地を知らないまま、増築はできない

一番やっかいなのは、あとから触る場所だと思う。

AIに実装してもらった時点では動いている。テストも通っている。レビューも大きな指摘なし。よかったですね、解散。

そう思っていたら、二週間後にその横へ機能を足す話が出る。

「この関数の挙動をちょっと変えたいです」

えっ、その関数、いま初めて名前を認識しました。

この瞬間がかなり嫌だ。自分のリポジトリなのに、知らない街に迷い込んだ感じがする。看板は読める。道も舗装されている。けど、土地勘がない。

そこでまたAIに頼むと、AIは既存コードをそれっぽく読んで、それっぽく計画を出してくる。こちらは「多分大丈夫だと思うから実装して」と返したくなる。正直、返したこともある。あるよ。あるに決まっている。

でもそれを繰り返すと、自分がどこまで分かっているのかが溶ける。

機密情報を扱っているのか。人に説明する必要があるのか。次に壊れそうなのはどこか。そういう判断まで、なんとなくAIの返答に寄りかかってしまう。

これは便利というより、足場がふわふわしてくる感じに近い。

未来の自分はだいたい容赦なく戻ってくる。しかも issue 付きで戻ってくる。Slack にも来る。やめてほしい。

だから、あとから増築しそうな場所は読む。全部を精密に読めなくてもいいから、せめて地図くらいは持っておく。

それでも、読まない日もある

ここまで書くと、結局読めという話に見える。

でも読まない日もある。

局所的な表示崩れ。管理画面の小さい便利ボタン。失敗しても困る人数が少なくて、戻すのも速い変更。こういうところまで毎回フル読解していたら、気力が先に死ぬ。

差分の雰囲気は見る。変なAPIを触っていないかも見る。知らない依存が増えていたら一応見る。それくらいはする。

でも、影響範囲が小さくて、人に説明する予定もなくて、あとから増築もしなさそうなら、ある程度は流す。

消火器が近くにあって、燃えても一部屋で済むなら、this is fine で様子を見ることはある。家全体が燃える場所ではやらない。

雑だなと思う。

ただ、現場というのは、かなりの部分がこの雑さで回っている気もする。完璧な理解より、壊れたときに戻れること。全部を読むことより、どこが燃えたら困るかを知っていること。

そのくらいのほうが、今の自分には続けやすい。

PR概要欄は、わりと嘘発見器

「完全に理解する」とは何か。

これもけっこう難しい。コードを一行ずつ説明できることなのか。依存ライブラリの内部まで読むことなのか。生成されたテストの意図まで全部言えることなのか。

毎回そこまでやるのは無理だ。少なくとも自分には無理。

最近は、PR概要欄を自分の言葉で書けるかを見ている。

何を変えたのか。なぜ変えたのか。どういう条件で動くのか。危なそうなところはどこか。やらなかったことは何か。

これを書こうとして手が止まるなら、たぶん理解できていない。

空欄のPR概要欄は怖い。あれはただの空欄ではなく、「あなたは本当に分かっていますか?」と聞いてくる白い圧力である。GitHub の白って、たまに怖い。

自分で概要を書いたあと、AIに「この理解でズレてない?」と聞くこともある。AIに書かせたコードをAIに確認させる。循環している。変な絵面だ。でも意外と効く。

AIに全部任せるためではなく、自分の理解がどこで薄くなっているかを見るために使う。

この使い方は、けっこう気に入っている。

ちゃんと不安になる

AI生成コードを毎回ぜんぶ理解しないといけない、とは思っていない。

でも、読まなくていいとも思っていない。

機密情報を扱うところ。人に説明するところ。あとから増築するところ。このへんは読む。少なくとも、自分が何を分かっていないかくらいは見ておく。

逆に、影響範囲が小さくて、説明する予定もなくて、あとで触る予定も薄いなら、そこまで神経質にならなくていい日がある。

全部読むか、全部読まないか。

たぶんそういう話ではない。

どこでちゃんと不安になるか。

どこなら少し雑に笑えるか。

AIとコードを書く生活は、今のところその境界線を毎日ちょっとずつ引き直す作業に近い。線はすぐズレる。昨日の線は今日もう怪しい。それでも、何も線を引かないよりはだいぶまし。

今日も差分を開く。

知らない helper がいる。

どわ〜〜〜。

早く仕事を奪ってくれ、AI。

できれば、差分を読む仕事から先に。