どうも
今回は、今携わっているプロジェクトで、直面している課題について、少しまとめておきたいと思います
タイトルの通りで、納期に追われAIが書いたコードをそのまま人間レビューなしで本番にマージしまくった末路についてです
結論、動くは動きます
ただ、積み上がった大量のコードの見通しはかなり悪く、後から直すのにめっちゃくちゃ時間がかかりますという話です
まず背景です
去年の年初から新しくプロジェクトが動き始め、それの設計やらコーディングやらをずっとしていました
新しいプロジェクトが始まった当初も、AIを使ったコーディングはしていました
ただバイブコーディング自体、去年、相当伸びてきたのもあって、途中からがっつり使われるようになりました
そんな中、プロジェクトの途中途中で、ここの期日までには、これだけできてないといけない!というポイントが何度かありました
そもそも我々のチームでは、エンジニアが少ないので、リソースが足りず、ヒイヒイ言いながら、実装してたわけなんです
が、納期に追われ、あるとき、変更ファイル数が1000以上、変更差分が12万とかいうPRのレビュー依頼が来ました
自分は今まで、そんな差分見たことなかったです
レビュいーに聞くと、AIにざっと書いてもらっているもので、確かにCIやAIレビューは通っているということでした
このままマージできることなんてあり得ない…と私も思いました
ただそのとき、自分も相当、納期に追い詰められていました
自分のやらないといけないタスクもたんまり残っています
でもレビューはしなくちゃと思いましたが、細かい点までは到底見れない…
考えた末、アーキテクチャの問題点がないかのみ見るだけで、細かな記述についてはレビューせず、期日も迫っていたため、そのままマージすることになりました
このようなことは、何度か続き、ことあるごとに、人間レビューなしのAIが書いたコードが、どかっとmainにマージされていくということが起きました
しばらくは自分のタスクをこなす日々が続き、自分の書いたコードは、しっかりとセルフチェックを行い、綺麗に読みやすいコードだという保証をしてからマージをしていってました
そんなある日、自分が担当するタスクの調査をしていたら、見覚えのないコードを見つけました…
「あれ、こんなとこにコード書いたっけ?」
自分がサービスクラスとして、まとめていた処理の中に、見覚えのないコードがありました
さらによく見てみると、サービスクラスの中に、幾つもファイルが増えていました
「何が起きてるんだ…?」
よくよく見てみると、どうやらこれらはAIによる変更だということがわかりました
そして、自分のタスクの修正に関わりそうだったところを読み始めて、さらに驚愕しました…
「なんだこの不要なガード祭りは…」
なんと、一つ一つのほんの小さなメソッドにも全てガードロジックが入っており、過剰に防御的になっていることに気づきました
また、メソッドの内部で色々こねくり回しているのですが、要するに本質的な部分は1行だけで、それ以外は不要な変換だったりするのが、大量にメソッドとして存在していたのです
そして、コードを読んでいると、時間が溶けていることに気づきました
なぜならドメインロジックに対して、無駄な処理が多すぎで、極めて読みづらくなっているためでした
「ん、なんでこの処理がこんなところにあるんだ…」
確かにコードとしては動いているのですが、なぜこのメソッドがここにあるか、なぜこのフォルダ構造なのかという部分が、全く意図が見えない状況になっていました
必要な情報を撮りにいきたいと思っても、どこにその記述があるのかが、すぐ追いかけられない状態になってしまっていました
「えーい、AIにきこう、そうすればわかるだろう…」
と思って、AIに聞いたところ、確かに必要な情報がそこに書いてあったのですが、いろいろこねくり回されていて、もうわけがわからない状態でした
デッドコードも要所要所に散らばっているという状態なのに、どうやら意図通りの出力は出てくるという状態で、まさにカオスという言葉が相応しい状況になってました
その結果、そこに関わる簡単なタスクを完了するのにも、一苦労ということが、続くようになりました
そして今、その状態から何をしているかというと、いろいろと修正をしていく中で、少しでもリファクタできるところを見つけたら、面倒くさがらずにリファクタしていくということをやっています
命名や、処理順、不要なガード削除、デッドコードの削除、そもそもどういう処理の内容なのかなどを理解しながら、積み上がってしまったリファクタし放題のコードの山をちょっとずつ綺麗にしていっているという状態です
面倒臭がらず、綺麗に最初から作っておいたら、もっと楽だったろうなと、今になって思いますが、なかなか難しいです
テストもモックを相当使ったテストになっていて、リファクタしづらいのもあります
これから、きっとコードを意識することはなくなっていく、今までよりも、プロダクトに割ける意識が増えていくだろうと思っていますが、まだ、シンプルで綺麗なコードを横断的に書くという部分では、人間に強みがあるかもしれません
そういう広い範囲の横断的な最適解を出せるような、エンジニアは重宝されるだろうと思います
多分、局所的な最適を積み上げすぎると、こうなってしまうのかなと感じました
まぁ自業自得なので、まだまだリファクタできるので、やっていこうと思います
以前の方がアウトプット出せてたなーと思いつつ、これをやらないと、後からしんどくなるのは目に見えてるので。。。
くれぐれもAIが書いたコードをノーチェックでマージすることは、現時点では、ないようにしていきたいなと改めて思いました
ではでは
