AIコードレビューがチームの”文脈”を読めるようになるまで 〜 レビューの暗黙知を継承する育成コマンド 〜 – エムスリーテックブログ


【Unit7 ブログリレー2日目】こんにちは、Unit7チームリーダーの丸山です。私が所属するUnit7では、主に医師向けのアンケートサービスの開発・運用を担当しています。

私たちのチームでは、開発プロセスを効率化し、コードの品質を向上させるためにAIによるコードレビューを活用しています。
今回は、便利なAIコードレビューが抱えていた課題と、その課題を解決するために開発した「AIレビュアー育成コマンド」についてご紹介します。

AIコードレビュー、はじめの一歩

エンジニアリンググループでは、開発プロセスの中にAIを活用する取り組みが進んでいます。他のチームでの活用事例は次の記事をご覧ください。

www.m3tech.blog

www.m3tech.blog

私たちのチームでは、開発フローにAIコードレビューを組み込んでいます。社内には有志のエンジニアが整備したCI連携用のテンプレートがあり、これを利用することでスムーズに導入できました。

各プロジェクトでは、CIのジョブを手動で実行することで、任意のタイミングでAIによるコードレビューができるようにしています。この仕組みにより、次のような恩恵を受けています。

  • 人間の目では見落としがちな、変数名のタイポや文法ミスを指摘してくれる。
  • 冗長なコードを特定し、よりシンプルで読みやすい書き方を提案してくれる。
  • 入力値の検証が不足している箇所を見つけ、セキュリティや信頼性向上に寄与する。

これらのレビューをAIが担ってくれることで、私たちはより本質的なロジックや設計といった、思考が求められるレビューへ集中できるようになりました。

浮かび上がった「チームの文脈が伝わらない」問題

AIコードレビューは非常に強力ですが、運用を続ける中でAIがチーム固有の文脈を汲み取れないという課題も見えてきました。

汎用的なレビューは得意な一方で、現在のプロンプトでは、次のようなチームの「暗黙知」や「お作法」を反映したレビューをしてもらうことが困難でした。

  • 実装されたコードが、プロジェクト全体の設計思想やアーキテクチャから逸脱していないか。
  • すでに共通関数があるにもかかわらず、同様の処理を再実装していないか。
  • 新しく作成されたファイルの置き場所が、プロジェクトのディレクトリ構成のルールに沿っているか。

加えて、レビューAIに与えるプロンプトも一度作成されてから更新が滞りがちで、日々アップデートされるチームの知見が十分に反映されていないという課題もありました。

私たちのチームでは、日々の技術的な議論の多くがGitLabのマージリクエスト(GitHubでいうところのプルリクエスト)上のコメントで行われています。これらの議論や指摘をAIのレビューへ反映させ、よりチーム最適化されたレビュアーへ育てられないかと考えました。

チームの知見を学ぶ「AIレビュアー育成コマンド」

そこで私たちは「AIレビュアー育成コマンド」を開発しました。これは、過去の人間によるレビュー内容をAIに学習させ、AIへのプロンプトを自動でアップデートする、Claude Codeで使用できるコマンドです。

このコマンドは、次のステップで動作します。

  1. 直近のマージリクエストを取得: GitLab APIを介して、最近マージされたマージリクエストの一覧を取得する。
  2. コメントとコードの抽出: 各マージリクエストから、レビューでの指摘コメントとその対象コードをペアで抽出する。
  3. レビュー観点の要約: 抽出したコメント群から、AIが学習すべき汎用的なレビュー観点をAI自身に要約させ、Markdownファイルとして出力する。
  4. プロンプトの更新: 生成されたMarkdownファイルからレビュー観点を整理し、既存のAIコードレビュー用のプロンプトに追記・更新する。

この仕組みにより、人間のレビューから得られた知見が継続的にAIのプロンプトに反映され、AIがチームの文脈を学んでいくことを目指しています。

実装の裏側

社内のGitLabからマージリクエストの取得やコメントを参照する際には、GitLabのMCPを使用しています。
また、各マージリクエストのコメントを解析してレビュー観点を要約する処理では、処理を細分化するために特定の役割を持たせたサブエージェントを活用しています。これは、メインのAIエージェントのコンテキストが長くなりすぎて、本来の指示を忘れてしまうといった問題を避けるための工夫です。

docs.anthropic.com

以下は、レビュー観点を抽出するサブエージェントに与えているプロンプトです。

与えられたマージリクエストのコメントを分析し、プロジェクトに最適化されたコードレビュー規約を生成する。

## ルール
- 指定されたマージリクエストのコメントを分析し、レビュー観点を抽出
    - そのマージリクエストについたコメントを取得
    - コメントの内容からレビュー観点を洗い出す
    - 得られたレビュー観点を`tmp/reviews/{マージリクエストのID}.md`に書き出す
- 対象となるコメント: 設計、可読性、堅牢性、テスト網羅性など、このプロジェクトの他のマージリクエストでも応用可能な指摘。
- 対象外: 「LGTM」等の単純な反応、AI Reviewerからのコメント、実装と無関係な会話。
- **実際についたコメントとコメントをつけたユーザ名も併記すること。**

GitLabへのアクセスは、GitLab MCPを通じて行うこと。

## 注意点

- **ユーザがつけたコメントからのみレビュー観点を作成する。自分で新しいレビュー観点を考えない**
- **レビュー観点は具体的かつ実践的に**: 「コードの可読性を高める」ではなく、「関数は一つの責務に集中させ、長すぎる関数は避ける」など。
- コメントがついていないマージリクエストは無視する。
- **絶対に @code_review.md に書き込みを行わない。**

特に工夫した点が、プロンプト内の「実際についたコメントとコメントをつけたユーザ名も併記すること」という一文です。この指示がないと、AIが良かれと思って「ありそうなレビュー観点」を創作してしまう事象が起きていました。そこで、実際のユーザの名前とコメント内容を併記させることで、AIが創作することを防ぎ、実際のレビュー内容に基づいた観点を抽出できるようになりました。

実行するときは、Claude Codeのカスタムスラッシュコマンドを作成しているので、そこから実行します。以下はコマンドの内容です。

---
description: "AIコードレビュー観点をメンテナンス"
---

あなたはシニアエンジニアです。

@code_review.md には、  コードレビューに関するガイドラインが書かれています。

あなたはチームコードレビュー品質向上のため、コードレビューの観点をメンテナンスする必要があります。

以下の`やりたいこと`に従ってこのプロジェクトで有用なコードレビューの観点を作成してください。

## やりたいこと
- GitLab MCPを使用して{{リポジトリの場所}}に作成された過去2週間分のマージリクエストを取得
- 取得したマージリクエストから、以下の選定基準でマージリクエストを選定する
    - 技術的複雑性が高い
    - ビジネスロジックやアーキテクチャに関する議論が含まれそう
    - コメントが多くついていて、議論が活発に行われている
- それぞれのマージリクエストについて`review-rules-generator`エージェントを呼び出して各マージリクエストの分析からレビュー規約を作成する
- 最後に、`tmp/reviews/`に作成されたファイルをまとめて、プロジェクト全体で有用なレビュー観点をまとめて @code_review.md に追記する

注意点
- 指摘する必要がないコメントも洗い出してください。
- `AI Reviewer`というレビュワーからのコメントは無視してください。
- 参考マージリクエストの追記は不要です。
- **@code_review.mdに既に記載されている内容は絶対に消さないでください。追記する文章の体裁は元々あった文章に合わせてください。**

使ってみた感想と今後の展望

このコマンドを実際に使ってみると、直近のマージリクエストで議論された内容が自動的にプロンプトへ反映されるため、運用が非常に楽であると感じています。
また、これまでの議論がプロンプトという形で集約されることで、チームの知見を振り返る良い機会にもなり、勉強になっています。

一方で、現状では「LGTM」や「修正しました」といった、知見として有用ではないコメントまで抽出されてしまうことがあります。この点は、今後の改善課題として取り組んでいきます。

現状、この「AIレビュアー育成コマンド」は開発者が手動で実行しなければなりません。
将来的には、このコマンドを週に1回程度の頻度で自動実行し、プロンプトの更新案を盛り込んだマージリクエストが自動で作成される仕組みを目指しています。

これにより、人間の手を介さずともAIがチームの文脈や最新の知見を自律的に読み取り、自己成長するAIレビュアーが実現できると考えています。

今後も開発を続け、レビューのコストを下げ、チーム全体の開発体験を向上させていきます。

We are hiring!!

エムスリーエンジニアリンググループでは、一緒に働く仲間を募集しています! まずはカジュアル面談から、以下URLよりご応募をお待ちしています。

jobs.m3.com

また、リサーチプロダクトチームに関する詳細は以下をご覧ください。




Source link

関連記事

コメント

この記事へのコメントはありません。