powered by TechFeed
表示モード
Anthropic

Claude Codeのプラグインが「本当に機能しているか」をCI上で自動検証できるように — Anthropicがプラグイン評価コマンドを追加、ベースラインとの差分で効果を数値化

9月11日、MarkTechPostが「Anthropic Adds Plugin Evals to Claude Code: 6 Grader Types, a No-Plugin Baseline, and a CI Gate for Skills」と題した記事を公開した。この記事では、AnthropicがClaude Codeにプラグイン評価(Plugin Evals)機能を追加し、6種類のGrader・ベースライン比較・CI連携を実装したことが詳しく紹介されている。

9月11日、MarkTechPostが「Anthropic Adds Plugin Evals to Claude Code: 6 Grader Types, a No-Plugin Baseline, and a CI Gate for Skills」と題した記事を公開した。この記事では、AnthropicがClaude Codeにプラグイン評価(Plugin Evals)機能を追加し、6種類のGrader・ベースライン比較・CI連携を実装したことが詳しく紹介されている。


背景:「プラグインが効いているか」を測る手段がなかった

Claude Codeは、Anthropicが提供するターミナル上で動作するAIコーディングエージェントだ。プラグイン(スキル)機構を通じて機能拡張が可能であり、開発者は独自のツールやワークフローをClaudeに組み込める。

ところが、これまでのプラグイン開発には根本的な検証の欠如という問題があった。既存のclaude plugin validateコマンドはマニフェストの構文やスキーマの整合性を確認するが、実際にClaudeがそのスキルを選択するかどうかは確認できなかった。プラグインの設定が正しくても、Claudeが実際のプロンプトに対してそのスキルを呼ばないというケースが発生しうる。

GitHub CopilotやCursorといった競合のAIコーディングツールでも、拡張機能の動作検証はCI/CDパイプラインへの組み込みが課題となっており、定量的なevalの仕組みを整備する動きは業界全体のトレンドでもある。Claude Codeは今回の追加により、プラグインレベルのeval基盤を公式に持つこととなった。


「プラグインが実際に動いているか」を初めて測れるようになった

新たに追加されたclaude plugin evalコマンドはこの問題に直接対応する。リアルなプロンプトに対してプラグインを実行し、Claudeの出力を採点した上で、プラグインを読み込まない場合との差分(Δ)を算出する。

対応バージョンはClaude Code v2.1.269以降plugin.jsonまたは.claude-plugin/plugin.jsonを含むディレクトリ、あるいはスキルズディレクトリ形式のプラグインに対して実行できる。


Δ(デルタ)が唯一の証拠

評価の核心は、すべてのテストケースを2回走らせることだ。

  • with-arm:プラグインを読み込んだ状態("arm" はtest armの意味であり、CPUアーキテクチャのARMとは無関係)
  • without-arm:プラグインを読み込まない状態(ベアモデル)

その差がΔであり、「プラグインが実際に貢献した分」を示す。ドキュメントに掲載されているサンプル出力では、あるケースが WITH 1.00 / W/OUT 0.33 / Δ +0.67 という結果になっており、6回の実行で推定コスト$0.41・所要時間74秒と記載されている。

Anthropicが「最もよくある最初の発見」として挙げているのが、Δがゼロに近い状態だ。tool_used: Skillグレーダーが失敗していれば、Claudeが自然な言い回しのプロンプトに対してそのスキルを選択していないことを意味する。マニフェストの設定は正しくても、実運用では機能しないというケースがこれで可視化される。


6種類のGraderと課金の仕組み

Graderはテストケース内のgraders/フォルダにMarkdownファイルとして配置する。フロントマターでtypeweightarmを設定する。

無料(トランスクリプトとディスク上のファイルから計算):

  • regex:出力のパターンマッチ
  • tool_used:特定ツールが呼ばれたかどうか
  • tool_order:ツールの呼び出し順序
  • file_exists:指定ファイルが生成されたかどうか

課金あり(ジャッジモデルへのAPI呼び出しが発生):

  • llm:自由記述の基準に対して出力を採点
  • baseline:参照回答と比較

コストはおおよそ「ケース数 × 実行回数 × arm数」のエージェント実行に、llmbaselineグレーダー1件あたり1実行ごとに3回の短いジャッジ呼び出しが加算される。regextool_usedといった無料グレーダーを軸に設計し、主観的な品質判定にのみllmグレーダーを用いるという設計がコスト最適化の基本方針になるだろう。


CI組み込みのための設定

本番のCI環境での利用を想定した公式のコマンド例が以下だ。

claude plugin eval . \
  --trust-plugin \
  --json results.json \
  --threshold 0.8 \
  --model claude-sonnet-5 \
  --judge-model claude-haiku-4-5 \
  --no-publish \
  --max-cost-usd 20
  • --threshold:スコアがこの値を下回るとexit 1でCIを落とす
  • --max-cost-usd:コスト上限を設定。超過した場合は使用量制限エラーになるが、これは誤った回帰検出(偽陽性)の原因になりうるとドキュメントが明示している
  • --trust-plugin:ターミナルなし環境で未信頼のプラグインを拒否する挙動を回避する
  • --no-publish:結果をclaude.aiへ公開しない(デフォルトはアカウントが対応していれば公開)

--jsonを指定するとプログレス出力が抑制され、結果はresults.jsonに書き出される。レポートはevals/results/<timestamp>/report.htmlに生成され、グレーダーごとの判定とジャッジの投票内容を確認できる。


最初のテストスイートの作り方

claude plugin eval initを実行すると、プラグインの内容を読み取り、良い結果の条件をインタラクティブに確認した上で、テストケースとグレーダーを自動生成して実際に試す。CI環境など非インタラクティブな場面では--bare <name>でブランクテンプレートだけを出力する。

テストスイートはevals/ディレクトリ以下に各ケースをサブディレクトリとして配置する構造だ。prompt.mdのフロントマターでmax_turns(デフォルト10)・timeout_seconds(デフォルト300)・modeltagsallowed_toolsを指定できる。

プラグインのエコシステムが成熟するにつれ、こうしたeval基盤の存在がプラグインの品質担保において不可欠になっていく。今回の追加は、Claude Codeのプラグイン開発を「動けばいい」から「定量的に検証する」フェーズへ引き上げる一手といえる。


詳細はAnthropic Adds Plugin Evals to Claude Code: 6 Grader Types, a No-Plugin Baseline, and a CI Gate for Skillsを参照していただきたい。