🐇

AI駆動開発時代のコードレビュー

に公開
デバッグはコードを書くときの2倍は難しい。
したがってその定義に従うならば、コードをできる限り複雑に書けば、
そのコードをデバッグできるほど自分は賢くないことになる。

この言葉は、ブライアン・W・カーニハンとデニス・M・リッチーによる古典的な著作『The C Programming Language』の中で述べられたものです。書かれたコードに対して、デバッグ作業は難しいものです(ここでは、コーディングの2倍難しいとしています)。つまり、自分の限界とも言えるほど複雑なコードを書けば、そのコードをデバッグすることは不可能になる、という意味です。

これは他人の書いたコードでも同様です。Googleのレビューガイドラインによれば、 コードを一行ずつ 見るのが大切とされています。コードには開発者の意図があり、なぜそのように書かれたのかを理解しなければならないからです。

しかし、AI駆動開発の時代になって、その前提が大きく変わろうとしています。AIは人のように疲労することがないので、割と力技のコードを平気で書いたりします。さらにコーディングガイドラインを用意しても、コンテキスト圧縮によって平気で無視したり、突如謎のディレクトリを作成することもあります。

昔はコピペプログラマーと呼ばれた、Web検索して出てきたそれっぽいコードを貼り付けたら動いたというスタイルがありました。レビューの時に、なぜこの書き方にしたのかを確認すると、「Webで見つけたから」と答えるのです。それが今は、AI駆動開発によって「AIがそう書いたから」となっています。レビュアーは、AIの書いたコードをレビューするという非常に疑問の残る作業を強いられています。

コードの責任は誰のものか

AIが絶対に行ってくれないのは、責任を取るということです。すべてのAIが「AIは間違えることがあります」と記載されています。ハルシネーションは大幅に減っていますが、それでも絶対にゼロにはなりません。たとえAIを使っていたとしても、そのコードは最終的に人間(PRを送った人)が責任を取らなければなりません。

それが何故か、レビュアーに覆いかぶさろうとしています。プログラマーが単なるプロンプターになり、結果をそのまま受け入れてPRを作成するならば、もはやプログラマーの価値がありません。多くの中小企業で嫌われる中抜き構造みたいなものですし、多くの若者が嫌う「仕事をしない人」と同じです。シニアエンジニアとしても、Devinに任せた方がマシとなってしまうでしょう。

コメントをAIに入れてもらう

一つのポイントとして、生成されるコードについて必ず「十分なコメント」を入れるように指示しましょう。その内容を読めば、なぜそのコードが書かれたのかを理解できるようになるでしょう。そこで疑問を感じれば、さらに修正が可能です。

そうやって、AIが書いたコードを理解して、自分が納得できる形になったらレビューを送るようにしましょう。AIが書いたコードをそのまま受け入れるのは、非常に危険です。必ず自分の頭で理解してから、責任を持ってレビューしましょう。

プロダクトの品質を決めるのはテスト

よく、レビューを通過した = 不具合がないという認識を持たれることがありますが、そんなことはありません。不具合の有無、プロダクトの品質を決めるのはテストです。

そのため、不具合の有無の責任をレビュアーに押し付けるのは止めましょう。逆に、レビュアーはテストが十分に行われているかを確認する責任があります。テストが不十分であれば、レビューを拒否して、テストの追加を要求しましょう。

PRに対して自動でCIが走るようにして、カバレッジ率(70〜80%程度など)を担保するようにしましょう。そうすれば、レビュアーはコードの品質に集中できるようになります。

じゃぁレビューって何なの?

では、レビューに求められるものは何なのでしょうか?それは、コードの品質担保です。コードの品質とは、主に以下のような点が挙げられます。

  • コードの可読性
  • コードの保守性
  • テストの設計
  • コードの再利用性
  • パフォーマンス
  • 他のメンバーでも理解・修正できるか

そして、レビューを通してチーム内の情報共有やコミュニケーションを促進します。

  • コードの意図や設計思想の共有
  • ビジネス要件・ロジックの理解
  • ベストプラクティスの共有
  • チームのコーディングスタイルの確認

AIコードレビューによる品質担保

AIコードレビューは、日々進化しています。LLM登場以前は、コードの静的エラー解析(Linter)やセキュリティスキャンが主流でしたが、現在ではAIがコードの品質をより深く理解し、レビューできるようになっています。タイポや簡単なバグ検出からはじまり、ベストプラクティスに沿った提案や、コーディングガイドラインの遵守確認まで行えるようになっています。

私たちの提供するCodeRabbitも、AIコードレビューを提供しています。2023年の登場以降、多くの進化をしており、レビュアーとしてカバーできる範囲が広がっています。適切なコンテキストさえ与えられれば、ファーストレビュアーとして十分に活躍できるでしょう。

ただし、最終的な責任は人が取らなければなりません。AIコードレビュアーができるのは、人がレビューする前に下地を整え、無用なストレスと時間を削減することです。

まとめ

AI駆動開発が注目を集める中で、AIコードレビューの話題が出ることが増えています。今後、ますますコード生産「量」が増えていくことが予想されますので、レビュアーの負担軽減は急務と言えます。

ぜひ、CodeRabbitを導入して、コード品質の担保とレビュアーの負担軽減を実現してください。

AI Code Reviews | CodeRabbit | Try for Free

CodeRabbit

Discussion