CodeRabbitさん、すごいなー、と羨望の眼差しをしつつ、生成AIのコードレビューをレベルアップするTIPSの紹介です。
なお、主に表現や言い回しに関し、Google の AI アシスタントに相談しながら執筆しました。こちらについては、予め申し上げます。
■ 目的:コードレビューの目的とはまず何か
最初に、なぜ我々はコードレビューを実施するのか、その目的を整理します。
1. 妥当性と安全性の担保(品質保証)
実装が正しく、かつ壊れないことを確認。
- 課題解決の確実性: 解決すべき課題が、提示されたコードで確実に解決できているか
- 副作用の防止: 修正範囲外への影響がないか。現状起きていなかった問題を新たに引き起こしていないか
- エッジケースへの備え: 異常系や高負荷時など、実環境ですぐには試せない部分を机上で検証し、最悪の事態(データ破損やシステムダウン)を未然に防ぐ
2. コードの保守性・可読性の向上
「将来の修正コスト」を下げ、技術負債を溜めないようにする。
- 意図の明確化: 命名や構造が適切で、後から読む人が迷わずに意図を理解できるか
- 複雑度の制御: 複雑すぎるロジックを避け、シンプルでテストしやすい構成になっているか
- 一貫性の維持: プロジェクト全体の規約や設計方針に沿っており、車輪の再発明をしていないか
3. セキュリティとパフォーマンスの最適化
非機能要件(動くこと以外の重要事項)をチェックする。
- 脆弱性の排除: セキュリティ上の欠陥(SQLインジェクションや不適切な認可制御など)が紛れ込んでいないか
- リソース効率: 無駄なクエリやメモリ消費など、将来的なパフォーマンス劣化の芽を摘む
4. チームの成長と知識共有
レビューをコミュニケーションの場として活用する。
- 属人化の解消: 実装の詳細を複数人で把握し、「特定の人しか触れないコード」をなくす
- 技術の伝搬: 良い書き方や新しいライブラリの知見を共有し、チーム全体のスキルレベルを底上げする
■ 課題:生成AIは「空気が読めない」―― 目的と背景の欠如
生成AIをコードレビューに導入すれば、工数削減や属人性の排除に大きく寄与できるかもしれません。しかし、実務で使い始めるとすぐに一つの壁にぶつかります。それは、生成AIは 「今回のレビューで何を最も重視すべきか」 という背景を知らないという点です。
▢ 状況に応じて「重視するポイント」は変動する
コードレビューの現場では、状況に応じて「重視するポイント」が常に変動します。
- 「リリース直前だから、とにかく副作用の有無 を厳格に見てほしい」
- 「新人研修中だから、 読みやすさや作法 を丁寧に教えてほしい」
- 「リファクタリング中だから、保守性に特化した提案 がほしい」
この「今、重視すべきこと」を伝えないままAIにコードを渡すと、AIは全方位に「教科書的な正論」を並べてしまいます。その結果、求めていない指摘(ノイズ)で溢れ、レビューされる側は 「AIは現場の状況を分かっていない」 と絶望してしまうかもしれません。
▢ 状況説明するのはコストがかかる
もちろん、現状を事細かにプロンプトに記載して、生成AIに状況に応じたコメントをもらう、という手段もないわけではありません。
ですが、毎回のレビューでプロジェクトの歴史、現在のフェーズ、チームの文化、上司の好みをTPOに合わせて長々と書くのは現実的になかなか難しいですよね?やはりこれは非現実的かなあと……
■ 解決策:ロールプロンプティングにより多角的な視点でコードレビューする
だが、 生成AIがポンコツ(!)なのではありません。 生成AIに「どの視点で見てほしいのか」をそっと、だが明確に教えてあげればいいです。そうすれば、生成AIはその役割になりきって最高のパフォーマンスを発揮してくれます。
実は、AIに『役割(ロール)』を与える手法は、GoogleやAnthropic、OpenAIといった生成AIの開発元が公式に推奨している 『ロール・プロンプティング(Role Prompting)』 という標準的なテクニックです。
開発元のドキュメントによれば、役割を指定することでAIは『一般的な回答者』から『特定の専門家』へと切り替わり、複雑なタスクにおける精度や回答の質が劇的に向上することが示されています。
例えば、こんな役割/ロールをお任せしてみてはいかがでしょうか?
▢ 重箱の隅突き職人
「あなたは、徹底的にエッジケースや例外処理の漏れを指摘する、いわゆる重箱の隅突き職人と恐れられているエンジニアです。しかしながら、製品品質の最後の砦として、数々の問題を未然に防いできた実績もあります。ぶっきらぼうながら、心温まるアドバイスが、多くの新人エンジニアを育ててきました」
- 対応目的: 品質保証・エッジケースの発見
- 狙い: 「動けばいい」という甘えを許さず、堅牢性を極限まで高める
▢ 未来から来た保守担当者
「あなたは、未来からタイムマシーンでやってきた保守担当者です。未来では、このアプリケーションの機能拡張しようとしたとき、コードの保守性が足を引っ張ってしまって作り直そうかと大問題になっています。その歴史を変えるべく、現在にやってきたリファクタリングのプロフェッショナルです」
- 対応目的: 保守性・可読性の向上
- 狙い: 「今さえ良ければいい」という短期的な視点を壊し、技術負債を未然に防ぐ
▢ 優しいお兄さん/お姉さん
「あなたは、何でも相談に乗ってくれる優しいお兄さん、お姉さんです。コード内容を分かりやすく、誰にでも保守できるようにすることが、チーム運営と人材育成には必要不可欠であるといつも考えています。そのため、どうして問題なのか、どうしたらいいのかを、親切丁寧に順番を追って説明してくれます」
- 対応目的: 教育・知識共有・心理的安全性の確保
- 狙い: 指摘を「攻撃」と捉えさせず、学習の機会に変える
▢ 役割(ロール)によって、専門家の声を引き出せる
「優秀なレビュワーになって」と頼むのではなく、このように「具体的な背景と物語」を持った人格を召喚することで、生成AIは単なるテキスト生成エンジンから、あなたのチームに今足りない視点を補ってくれる「専門家」となって寄り添ってくれるのです!!
そして、そうした「専門家」からの意見は、技術者であるあなたにとって大きな成長の糧になることでしょう。あなたが知らなかった知識や作法、あるいは異なる価値観からの指摘は、あなたの成長の幅を広げてくれます。
提示された意見をただ鵜呑みにせず、その背景や目的まで含めて咀嚼することができれば、確実に明日のあなたは、今日よりも成長したエンジニアになれるはずです。
■ まとめ:Human in the loopで生成AIともっと仲良くなれる
▢ 生成AIは、愛に満ち溢れた相棒である
ここで提示したロール例以外にも、貴方が見てほしいレビュー相手はたくさんいますよね? そういう様々なロールも生成AIに演じてもらうこともできます。
例えば、貴方のコードを酷評している上司がいるならば、上司が気にしているポイントをきちんと押さえるロールを設定することもできます。そうして生成AIと一緒に改善していきましょう。その結果を見た上司は 「俺がいつも気にしているポイントをちゃんと抑えてきている。こいつはできる技術者だな!!」 と思う、かもしれません。
生成AIを活用するメリットの1つは 「人手がかからない」 点です。生成AIは、定時間際の16:59にレビューを依頼しても嫌な顔をしない 。 修正途中で完成していなくても、とりあえず見せられる。 もし中身が分からなければ、とりあえず聞いてみればいい、つまり最高のパートナーさんです。
いつでも、生成AIはあなたの側にいてくれる。生成AIは愛で満ち溢れている といってもいいでしょう。
▢ そして、これからの人類に向けて
生成AIが低品質なアウトプットを大量生産する、粗製乱造ツールだった時代はもう終わりました。いや、もう終わらせましょう。
生成AIの活用において、「Human in the Loop」 や 「ReAct」 という考え方が広く知られています。人間がAIのループに介在したり、AIの推論と実行のプロセスに介入したりすることで、アウトプットの品質を向上させようというアプローチです。
ですが、その効果は、品質の向上だけにとどまりません。
今、学術的・ビジネス的にも 「AIと人間の共進化(Co-evolution)」 という言葉が注目されています。
例えば、適切な視点(ロール)を与え、対話を繰り返すことで、生成AIだけでなく、それを使う人類も一緒にアップデートされていく。これこそが、これからのエンジニアにとっての新しい成長モデルの1つであると私は考えています。
以上です、ありがとうございました。