はじめに
ITシステムの開発におけるコードレビューは品質を保つために重要な工程であり、AIによるレビュー補助ツールも近年増えてきています。開発・保守において変更が生じた差分コードを都度レビューすることが一般的です。
一方で、リポジトリ(※1)全体が高品質なコードかレビューする機会は多くないといえます。開発が落ち着いた後はチームが縮小される傾向があり、機能要件を満たすためのテストに作業が移るため、一貫性や安全性といった品質観点のレビューに割ける時間は限られてきます。また、リポジトリのコードは保守改修や追加開発で変更を繰り返していきます。ある時点で高品質であっても状態が維持されなくなる可能性があり、対応工数に効果が見合わないことも考えられます。
リポジトリ全体が高品質であることは、エンジニアのコード可読性を高め、保守効率を向上させます。まずは現状の品質を知ることで、改善作業の重要性の議論も可能となります。このような全体品質のレビューコストは、リポジトリ全体の自動AIレビューを導入することによって軽減させることが可能です。本記事では、AIによるコードレビューの方法と、弊社エンジニア採用課題における社内事例による効果をご紹介します。
※1 リポジトリ:Gitというバージョン管理方法でソースコードを保管する場所。システム開発で広く用いられている。
AIによるコードレビューとは?
人工知能(AI)を通じてソースコードをレビューする仕組みを指します。近年Chat GPTをはじめとするLLM(大規模言語モデル)が進歩を遂げていますが、AIによるコードレビューもLLMを利用していることが多いです。従来の人間によるコードレビューと比較したメリットと注意点は次のとおりです。
主なメリット
- 人間によるレビューの効率化
AIレビューを参考情報とすることで、人間によるレビューが効率化され、短時間で終わるようになります。 - 自動実行
AIレビューをシステム化することで、任意のタイミングで実行可能となります。1ヶ月に1回定期実行させたり、特定の操作をトリガーとして動かす設定も可能です。 - 一貫した視点のレビュー
人間によるレビューでは、レビュアーのスキルや好みにレビュー結果が左右される場合があります。AIレビューでは常に一貫した視点でコードを評価することができます。
主な注意点
- 最終的には人間が判断する
AIによるレビューは、人間によるレビューの補助ツールです。最後は人間が結論や次のアクションを決めることを推奨します。 - レビューを過信しない
レビュー内容には誤りが含まれる場合があります。同じリポジトリに対して複数回のレビューを実行した場合、異なる評価を出力する場合もあります。この特徴を認識し、内容が正しいかどうかは人間が判断します。 - セキュリティ面の配慮
AIは入力情報を学習に利用する場合があります。コードレビューで扱うソースコードに機密情報が含まれる場合、社内規約と照らし合わせて問題がないか確認が必要です。
リポジトリ全体のコードレビューとは?
コードレビューは、リポジトリのうち変更が生じた差分コードのみに都度実施することが一般的です。レビューを補助するAIツールにおいても、上記を前提としているケースが多くなっています。一方で、リポジトリのコード全体をレビュー対象としたユースケースも存在します。
- 保守によってコード品質が低下しないように定期的にレポートを受け取りたい
- 外部委託で開発したリポジトリの品質を把握したい
- エンジニア採用課題の評価時、レビュアー負荷を減らしたい
このように開発後のコードに対して全体的な評価を行いたい場合、人間によるレビューの前に、AIレビューを先行させることが有効です。AIレビューの結果と照らし合わせて人間がレビューすることで、詳細な確認をより少ない時間で行うことができるようになります。
リポジトリ全体のAIコードレビューの導入事例
NCDCでは、採用課題でAIによるコードレビューを導入しています。ケーススタディとして具体的にご紹介します。
背景
NCDCでは、エンジニアの採用にあたって技術課題を実施しています。提出いただいた技術課題は複数の社内エンジニアがコードレビューを行い、面接の参考とします。社内にはコードレビューによるエンジニアの負荷について、サポートツールによる効率化の声が挙げられていました。この問題をAIレビューの導入で緩和するため、社内ハッカソンにおいてエンジニアがAIコードレビューの開発に取り組みました。
機能
採用課題のレビュー依頼は、社内のGitHub(※2)リポジトリのIssue(※3)として作成されます。この操作が自動検知され、Issue内に記載された対象リポジトリ全体をレビューします。レビュー観点や出力方法は、プロンプトを介してLLM(大規模言語モデル)実行サービスであるAWS Bedrockに指示しています。エンジニアはAIレビューを参考にしつつ、実際に技術課題のコードを動かしたりコードを確認して、最終的に自分のレビュー結果をまとめます。
※2 GitHub: コードの保管・公開サービス。リポジトリの管理機能を含む。
※3 Issue: GitHubにおいてリポジトリに関する課題や対応事項を管理する機能。
技術
採用技術は以下のとおりです。
- AWS Bedrock (Claude 3.5 Sonnet)
- TypeScript
- GitHub Actions
Issueの作成をトリガーとしてGitHub Actionsが動き出し、対象リポジトリを取得してTypeScript経由でBedrockに問い合わせます。
導入後の効果
導入によって、社内では次の効果がみられました。
- レビュー時間の短縮
AIレビューが合っているかどうかの確認を前提に手動レビューを実施するため、一から確認する場合と比べてレビュー時間を短縮できます。 - レビュー記載時間の短縮
AIレビューの内容に同意する場合、人間が詳細を書かなくても伝わるようになりました。同意しかねる箇所や、AIレビューの内容が誤っている箇所に絞ってコメントが可能となり、記載時間が短縮できます。 - レビュー観点の標準化
人間によるレビューは、レビュアーのスキルレベルや好みに左右される側面があります。AIが一定の視点で横断的なレビューを行うことで、レビューの基準が統一できます。AIレビューの指摘によって、レビュアーが気付きを得る場合もあります。
AIレビューの評価は概ね人間によるレビューの評価と合っており、一定の信頼が置けるという意見が得られています。一方で、実際にコードが動作するか、最新の技術に対して適切な評価ができているかなど、現状では人間の確認が必要となる部分も存在します。
導入事例の応用
AIレビューの仕組みを開発済みのリポジトリに適用することで、定期的にリポジトリ全体に対するAIレビュー結果を受け取れるようになります。カスタマイズによって、月に1回実行する、レビュー結果をSlackなどの外部システムに通知するなど、様々な条件で動作させることができます。
まとめ
コードレビューはソフトウェア開発において重要な工程である一方、開発が完了したリポジトリに対する全体的な評価はあまり取り上げられない分野といえます。主な理由として、レビュー工数がかかってしまうことが挙げられます。
今回ご紹介したリポジトリ全体のAIレビューを導入することで、まずは効率的な現状把握から初めてみるのはいかがでしょうか。
生成AIのご相談はNCDCへ
NCDCでは、生成AIをどういった場面で導入するかを検討する段階のコンサルティングから、RAGの構築、精度向上の支援、運用まで一元的にサポートいたします。
この記事を読んで興味を持ってくださった方は、ぜひお気軽にご相談ください。