Anthropic公式のコードレビュープラグインから学ぶ

エクストーンの豊田です。ここ最近、Anthropic社が公式でClaude Codeのプラグインを多数公開しており、活用することで作業効率が向上しているのですが、各プラグインは基本的に自然言語で書かれたプロンプト(一部シェルスクリプト含む)なので、ちゃんと読み込むことで理解を深めることで、より適切に活用できるようになるんじゃないかと考えています。

というわけで、この記事ではコードレビュープラグインのプロンプトを読んで、Claude Codeに適切なコードレビューをさせる手法を学んでいきたいと思います。コードレビュープラグインのコードは以下に公開されているので、この記事と合わせて参照してください。

https://github.com/anthropics/claude-plugins-official/blob/main/plugins/code-review/commands/code-review.md

コードレビュープラグインの使い方について

Claude Codeのコードレビュープラグインは作成したGitHub上のPull Requestを対象として、コードレビューを行い指摘事項があればGitHub上でコメントを行います。指摘事項については信頼度が付与され、信頼度が一定以上のもののみGitHub上でコメントします。

プラグインインストール後、 /code-review:code-review でカスタムコマンドを指定することで、コードレビューを実行することが出来ます。

構造

コードレビュープラグインはカスタムコマンドによって提供されます。カスタムコマンドはClaude Codeに対してプロンプトの文章を入力する代わりにスラッシュコマンドを実行することで、カスタムコマンド側で定義されているスクリプトをそのまま入力することが出来ます。

コードレビュープラグインはこのカスタムコマンドのみによって成り立っており、実際には長めのプロンプトを入力しているのと変わりがありません。実際に使ってみた感じ、もっと複雑な仕組みで動いていそうに見えたので、これには驚きました。

ステップ

このコマンドは8つのステップに分割されていて、順番に実行されます。各ステップはサブエージェントによって実行されるように指示されています。これによって実行内容次第で異なるモデルを利用したり、依存関係がない処理については並列で実行されます。

ステップ1: レビュー実行判断

まず、PRのレビューをすべきかどうかをチェックするサブエージェントをHaikuモデルを利用して実行します。PRがクローズされているか等の単純なPull Requestのステータスに応じて判断するため、高速なモデルを利用しています。

ステップ2: 変更箇所に影響するCLAUDE.mdのパスの収集

このプロジェクトのルートにあるCLAUDE.mdおよび、変更されたファイルのディレクトリにあるCLAUDE.mdを検索し、パスを収集するサブエージェントをHaikuモデルで実行します。このステップではパスの収集のみを行うため、こちらも高速なモデルを利用しています。

ステップ3: PRの概要の要約

PRの変更点の概要を取得するためのサブエージェントをHaikuモデルで実行します。

ステップ4: レビューの実行

5つのサブエージェントを並列で実行し、コードの問題点をリストアップします。それぞれSonnetを利用したサブエージェントで実行します。

  • エージェント1: 変更点がCLAUDE.mdの内容に準拠しているかどうか
  • エージェント2: 差分に含まれる明確なバグの調査
  • エージェント3: git blame を利用し、gitの変更履歴からバグの特定
  • エージェント4: 過去のPRのコメントの分析
  • エージェント5: コード内のコメントの分析

ステップ5: コードの問題点の調査

ステップ4で見つけた問題点について検証します。ステップ2のCLAUDE.mdのパス情報やステップ3のPR概要に基づき、各問題点について0~100までスコアリングします。100に近いほど問題点の指摘の精度が高いです。この検証はHaikuモデルを利用したサブエージェントで実行します。

ステップ6: 低い信頼度の問題の除外

スコアが80以下の問題を除外します。この数値を調整することで、コード内の課題についてどのくらい指摘するかを調整することが出来ます。

ステップ7: レビュー実行判断(再度)

ここまでのプロセスの間、PRの状態が変わってしまう可能性があるため、再度ステップ1で行ったレビュー実行判断を実行します。

ステップ8: PR結果のコメント

レビュー結果をPRのコメントとして記載します。

学びを得たポイント

明確なステップによるレビュープロセスの明文化

そもそもレビューを行うべきかどうかの判断、PRに関する情報収集、明確で異なる目的を持った複数のサブエージェントによる問題発見、問題の検証とスコアリングといったステップが明確であるため、個々のステップについて独立したサブエージェントを定義することが出来ています。

これによって、各ステップの単純化が出来ていて、処理によってはHaikuなどの高速なモデルを利用することが可能になり、トークン使用量の最適化や処理の高速化を実現しています。また、入力と出力が明確なステップに分割することで、サブエージェント化することでコンテキストの質を上げ、より精度の高いレビューが行えるようになっていると感じました。

スキルとサブエージェントの使い分けについて

コードレビューのプラグインがコマンドとして提供されていることにまずは驚きました。スキルを利用して提供されていると予想していたのですが、実際にはシンプルなプロンプトとして提供されていました。

ただ、実際の振る舞いとしてはサブエージェントの移譲を含むステップの実行となっています。スキルは基本的にプロンプトの遅延読み込みによるコンテキスト削減を行っていますが、一度読み込まれたプロンプトについてはそのままコンテキストに加えられてしまうので、入力と出力が明確に定まっているプロセスについてはサブエージェントを利用することで、その過程をコンテキストに残さないようにすることがコンテキスト削減には重要です。

その点でこのコードレビューのコマンドを読むと、確かに遅延読み込みが必要なリソースは存在しないため、スキルを利用する必要が無く、コマンドで十分であることが理解できます。

例えばこのコマンドを拡張し、特定の分野の知見を持たせたうえでより専門的なコードレビューを行いたい場合は、専門的な知識をナレッジとして遅延読み込みさせるスキルとして実装することも検討できるかと思います。

さいごに

Anthropic公式のコードレビューのプラグインのコードを読み、特定の処理をLLMによって自動化するための手法について学ぶことが出来ました。公式のプラグインでは他にも様々なツールが定義されており、その中にはスキルを利用するものやシェルスクリプトと併用するものもあります。興味がある方はぜひ公式のプラグインのコードを読んでみてください。