はじめに
株式会社ネクストスケープ Chief Technology Office所属の小野塚です。
AIによるコーディングが進化するほど問題になるのが品質担保、特にどのようにレビューするかという点が挙げられると思います。
人間が全てレビューできれば良いのですが、対応できるボリュームをはるかに超えてしまっている状態です。
どこまでやるか・できるか、どうやるのかの問題はあるものの、お客様に対してシステム開発している責任として何らかの形で人間がチェックする必要はあるのかなと思います。
ですので程度の差こそあれ、レビューもAIに頼らざるを得ず。ということでAIによるレビュー方法も色々あるのですが、今回はClaude Codeの/code-reviewコマンド、/security-reviewコマンドについて見てみました。
設定・準備
まずは準備としてテスト用のコードを書き、更に以下のような不具合・問題を仕込んでテスト用ブランチにプッシュします。
1.競合状態 / TOCTOU並行性
2.SQLインジェクション
3.アクセス制御不備 (IDOR)
4.PIIログ出力プライバシー
5.NULL参照信頼性
6.sync-over-async + HttpClient
あとはClaudeCodeのバージョンも最新にしてください。正確なバージョンを把握しておらず恐縮なのですが、V2.1.147あたりから実装されていると思います。
試しにプロンプト入力欄に「/code-review」と入力してもらって以下のようにサジェストとして表示されればOKです。
ちなみに今回使用するモデルはSonnet4.6を使います。
※以下、画像はクリックすると別タブにて拡大表示されます
/code-review実施
では、早速実行してみましょう。
最初に解析を行った後、以下のように幾つかのangles、つまり視点を持ったエージェントが作成・実行されます。

しばらくするとレビューが終了し、その旨が表示されます。
7つの問題が結果として見つかりました。

見づらいと思いますので以下に引用します。
Markdownファイルに出力された内容をそのまま貼り付けさせてください。
| # | 重大度 | 問題 |
| 1 | 🔴 Critical | SQLインジェクション(`/orders/search`) |
| 2 | 🔴 Critical | `product` の null 未チェックによるクラッシュ |
| 3 | 🔴 Critical | トランザクションなしによる在庫の競合状態(オーバーセル) |
| 4 | 🟠 High | 通知失敗後のDB不整合(ロールバック不可) |
| 5 | 🟠 High | 負の `Quantity` で在庫が増加 |
| 6 | 🟡 Medium | `.Result` によるスレッドプール枯渇 |
| 7 | 🟡 Medium | `HttpClient` の毎回生成によるソケット枯渇 |
仕込んだ不具合・問題点との比較は以下のとおり

以下の2つの問題が検出されませんでした。これはセキュリティ周りですので、/security-reviewで検出できればよさげですね。
> 3.アクセス制御不備 (IDOR)
> 4.PIIログ出力プライバシー
パラメータ説明
ちょっと順番が前後しますが、/code-reviewのパラメータについて説明しておきます。
/code-review [effort] [--comment] [--fix] [ultra] [target]
素の /code-review は「現在の差分を、セッションの effort でレビューし、ターミナルに出力」します。
1. effort(low / medium / high / max) = 単語で指定(位置引数)
/code-review high のように渡します。Sonnet 4.6 の既定は high です。
2. --comment = 指摘を PR のコメントとして投稿
既定はターミナル出力だけですが、--comment フラグで指摘を PR コメントとして投稿します(GitHub の PR コンテキストが前提)。
3. --fix = 修正を作業ツリーに適用
読むだけでなく、指摘の修正を実際に当てます(例 /code-review --fix)。
4. ultra = クラウドの深いレビュー(ultrareview)
今回割愛しましたが、単一パスではなく、複数の独立したレビュアー・サブエージェントを並列で走らせ、別々の観点から解析し、複数で挙がった指摘ほど高確信度で表面化させる方式です。/ultrareviewコマンドと同じ動作となりますが、プレミアム機能として別途料金がかかることもあり、今回は割愛しております。
5. target = 既定の差分以外を対象にする(位置引数)
targetとしてファイルパス・PR番号・ブランチ名・ref範囲(main...my-feature など)等を渡してレビュー対象を絞れる
使用例:
/code-review high # effort=Highでレビュー
/code-review --fix # 修正を自動適用
/code-review 42 # PR #42 を対象
/code-review src/auth.ts # 特定ファイルを対象
/code-review main...feature # ref範囲を対象
/security-review実行
ということで次に/security-reviewを実行してみましょう。

こちらもAgentという単語が表示され、エージェントが実行されていることがわかります。
以下のように結果が表示されますのでMarkdownファイルに出力してもらいます。

これで/code-reviewで検出できなかった項番3、4も検出できました。
セキュリティ周りの問題検出はやはり/security-reviewが得意なようでして、この2つのコマンドを組み合わせればかなり期待できる結果が得られそうです。
SuperPowersのレビュー機能
ちなみに私は/superpowersというプラグインも使っていまして、その中には「/superpowers:requesting-code-review」というコマンドがあります。
こちらは本来はsuperpowers のワークフローにおいてタスクの合間に requesting-code-review を自動で起動し、計画に照らしてレビューします。
つまり通常の superpowers の利用においては明示的に呼ぶのではなく、実装→次のタスクへ移る区切りなどで勝手に発火する形なのですが、今回は試しに意図的に実行してみました。
結果としては#3 IDOR と #4 PIIログ、それぞれチェックしたことは明らかなのですが、#3は「Strengths(良い点)」、#4は「correct pattern」(名前付きプレースホルダで正しい)と評価し、指摘からは外されていました。
ただ、アドバイス的なものも含めて計12個の指摘があり、3つの機能を試した中で最も多い指摘数となりますのでこの点はさすがだなと思いました。
ちなみに見逃しがあった点について。これは予想なのですが、superpowersに問題があるというよりは「汎用レビュー」の枠に従っただけであり、 認可・プライバシーは問題ではなく長所とみなしたのだと思います。
また、何故か今回はエージェントでは動作せず(コマンドで直接起動したため?)、モデルやプロジェクト(ソースコード等)によってもまた違った結果が出てくる可能性もありますのであくまで参考までに留めてください。
終わりに
当社ネクストスケープはこのように生成AIをはじめとした新しい技術・知識を日々取り入れており、Webサイト、スマホアプリ、Hololensアプリの開発をはじめ、CMSを利用したサイトの新規構築やリニューアルなど、お客様のニーズに幅広く対応いたします。お困りのことがございましたら、いつでもお気軽にお問い合わせください。
(以下当社お問合せフォーム)
当社では一緒に働いてくれる仲間を募集しています。是非以下のサイトよりお申込みください。


