AIがコードを書いてくれるし、レビューもしてくれる、ということになってきたので、命からがら書いて、かろうじて動く、みたいな品質の怪しいコードを人間のレビューに回す機会は減ってきている。
コーディングは速くなるけどレビューはスケールしない、ということから、コードレビューの役割として人間のレビューは役目を終えようとしている、という言説もある。
そんな状況にあって、人間によるレビューに何が残るかというと、どんな未来に行きたいかを表明し、編集することだと思う。
優秀なAIが導入されたとして、まわりはスペースでインデントしてるところにいきなり4インデントにしたりはしないだろうから、AIの書くコードは周りのコードを真似して書かれるものが多くなり、レビューで通したコードというのは、AIに真似してほしいコードということになる。
タブとスペースを間違うなんて、人間もやらないだろう、と思われそうだけど、僕はお世話になっているOSSにPull Requestを出したら、このリポジトリはハードタブなんだ…別途取り込んでおくね…とcloseされた思い出があり、インデントが混在していることに全然気づかなかった。
人間の時代にも、まるべく周りを真似しようというプラクティスはあったけど、LLMの動きを考えると、周りのコードがif ! ではなくunlessって書いてたらunlessが出る確率が高くなる、という形で、周りのコードのスタイルに合わせてくれることは期待できる。
AIが周りのコードを自動的に真似してくれる時代においては、インデントを統一させることは、その後そのリポジトリでAIが生成するインデントが統一される確率を上げることにつながる。
最近のコードレビューでよく喋っているのは「こういう場合にこういうことをするコードは減らしていきたい」とか「こういうコードは好きなので増やしたい、みんなでこれを真似していこう」というような話題。
もっと直接的に、「この機能は最近作ったもので、良く出来てるので、迷ったら真似すること」とかinstructionに書いたりもしている。
これは、レビューの場が、目的に対するコードの良し悪しを話す場から、今後のコードベースがどのように成長してほしいか、今後どのようなコードがAIに生成されてほしいか、という、生成されるコードの分布を編集する場へ、変化している、ということだと思う。
これはlintが通っているかどうか、という固定した価値観ではなくて、lintは通る中で、どういう場合にはどんな手法を好みたいか、という状況に応じて調整、適用させたい価値観。
これが何に似ているかというとガーデニングで、昨年、家の前に子供が花の種詰め合わせをばらまいたところ、説明書の10倍の密度でぶちまけたため、ものすごいワシャワシャした花たちが生えてきて、旅行から帰ってきたら自転車が飲み込まれていた。
それはそれで面白かったね、という話だけど、今年になったら、去年生えてたスイートピーが、また生えてきている。
花の種にスイートピーも入っていて、かわいい花だと思ったらいきなり豆ができててびっくりしていた。枯れるまで放っておいたのが、種がこぼれて、今年生えてきたのだと思う。

1年目に花がワシャワシャになったのは、最初にAIによる巨大Pull Requestが押し寄せてきたときに相当する。
今年、エンドウ豆が勝手に生えてきてるのは、AIが書きまくったカオスなコードが既知のコードベースとなり、それを真似したコードが製造されているときに相当する。
ガーデニングの末路を考えると、アイビーが家に飲み込まれている映像をイメージしてほしい。無計画なら悲しいことだけど、ツタに飲み込まれる家って良い…と思ってアイビーの成長を推進していたら、大成功、ということになる。歴史ある建物がいい感じにツタに飲み込まれていて、写真展の会場になっていたりする。

Googleのソフトウェアエンジニアリングによれば、ソフトウェアエンジニアリングは、時間で積分したプログラミングだと言われている。
種まきが1回のコードレビュー、プログラミングに該当し、2年目以降の生態系の管理や計画まで考えられると、ソフトウェアエンジニアリングになる、ということだと思う。
お題
この先、コードレビューはどうなるでしょうか。みなさんどう考えていますか?お題にしてみたので考えてることがあれば書いてみてください!
お題「AI時代のコードレビューはどうなる?」