Claude Code プラグインのeval入門:効果を差分で検証する

Claude Code 2.1.269で追加されたネイティブplugin evalを使い、プラグインあり・なしの実行を比較する方法を解説します。ケースとgraderの設計、WITH・W/OUT・Δの読み方、意図的な回帰テスト、コスト管理、CIゲートへの組み込みまで、再現可能なリリース判定を具体例とともに整理します。

Saturday, September 12, 2026Omid Saffari
Claude Code プラグインのeval入門:効果を差分で検証する

Claude Code プラグインは、ファイルが正しいだけでなく、Claudeの振る舞いを本当に変えたのかまで検証できるようになりました。ネイティブのclaude plugin evalコマンドは、プラグインあり・なしの両条件で同じ現実的なリクエストを実行し、それぞれを採点して差を示します。「スキルが動いたように見える」という曖昧な確認を、時間・ターン数・利用量の予算を伴うリリース判断へ変えられます。

この機能が加わったタイミングは重要です。Claude Code 2.1.269では、2026年9月11日にplugin evalが追加されました。この検索テーマで現在上位にある日付付きチュートリアルは、まだ独自のPythonランナーを前提にしています。ローカルプラグインを保守しているなら、いま最短の手順はネイティブ機能です。振る舞いを確かめるケースを1つ作り、コントロール群と比較してレポートを確認し、最後に意図的に起こした回帰をCIで拒否できるようにします。

Claude Code プラグインのevalは何を測るのか

plugin evalは、エージェントの振る舞いを対象にしたA/Bテストです。同じ作業指示書を渡された、まったく同じ2つの工房を想像してください。一方にはプラグインが入り、もう一方には入っていません。Claude Codeは両方で作業を繰り返して成果を採点し、WITHW/OUTΔを報告します。Δは、プラグインありのスコアから、なしのスコアを引いた値です。

見るべき数字は、この差分です。両方が1.0なら優秀に見えますが、Claudeはプラグインがなくてもタスクを完了できたことになります。プラスの差分は、プラグインの貢献が測定できたことを示します。マイナスなら、テストした振る舞いをプラグインが悪化させています。

デフォルトでは、1ケースにつきプラグインありの新規セッションを3回、なしの新規セッションを3回実行します。各セッションには、隔離されたホーム、作業ディレクトリ、Claude Code設定が用意されます。個人設定、プロジェクトのCLAUDE.md、ほかのプラグイン、メモリ、個人用MCPサーバーは引き継がれません。この隔離によって比較は明快になります。一方、手元のPC環境へ暗黙に依存しているプラグインは、まさに検出すべき理由で失敗します。隔離とセキュリティの詳しい仕様は、Anthropicのplugin evalドキュメントで確認できます。

1つのプロンプトをプラグインあり3回となし3回の実行へ分け、最後に差分レポートへまとめる建築的なインフォグラフィック
1ケースを条件のそろった2群に分けることで、差分からプラグインの貢献だけを読み取れます。

まず動作するローカルプラグインを用意する

振る舞いのevalは2番目の確認であり、最初ではありません。プラグインのディレクトリには、plugin.json.claude-plugin/plugin.json、または有効なskillsディレクトリ構成が必要です。ファイルやスキーマの問題はclaude plugin validateで検証します。claude plugin evalが答えるのは、「自然な依頼でスキルが起動したか」「決められた社内フォーマットで出力したか」といった問いです。

Claude Code v2.1.269以降と、通常のセッションで使っているものと同じ認証も必要です。evalセッション、judge graderによる採点、対話式イニシャライザーは、いずれもプランの利用枠またはAPI課金を消費します。Claude Code全体のセットアップにまだ慣れていない場合は、リリースゲートを加える前に基本的なローカルワークフローから始めてください

信頼できるプラグインのルートで、バージョンを確認して空のケースを作成します。

Bash
claude --version
claude plugin eval init --bare release-note

対話式で進めるならclaude plugin eval initを使います。プラグインを読み込み、良い結果の条件を尋ね、ケースとgraderを提案し、一度試験実行してからスイートを書き出します。仕様を理解するには--bareのほうが適しています。実行せず、必要なファイルだけを生成するためです。

理解できる振る舞いを1ケースだけ作る

動作中のプラグインにrelease-notesというスキルがあるとします。その価値は、文章を生成することだけではありません。自然な製品変更の依頼を認識し、チーム所定の3部構成、Summary、Impact、Riskでリリースノートを返す必要があります。

ユーザーが実際に入力しそうな依頼をprompt.mdへ置きます。次に、結果を確認する決定論的graderと、処理経路を確認する決定論的graderを1つずつ追加します。「決定論的」とは、CLIがトレースまたはテキストを直接確認し、judgeモデルを呼び出さないという意味です。

Text
# evals/release-note/prompt.md
---
name: release-note
tags: [smoke]
runs: 3
max_turns: 8
timeout_seconds: 180
allowed_tools: [Skill]
---

Turn this change into a customer-facing release note: checkout now retries a failed payment once before showing an error.

# evals/release-note/graders/format.md
---
type: regex
target: last_message
pattern: 'Summary[\s\S]*Impact[\s\S]*Risk'
flags: i
---

# evals/release-note/graders/skill-fired.md
---
type: tool_used
tool: Skill
input_match: '"skill"\s*:\s*"(?:[\w-]+:)?release-notes"'
---

release-notesは、実際のスキルのSKILL.mdにあるnameへ置き換えてください。このプロンプトでは、あえてスキル名も3つの見出しも指定していません。プラグインが依頼内容を見分け、独自のフォーマットを提供できるかを確かめるためです。プロンプト側に答えをすべて書いてしまうと、プラグインなしの群も合格できるため、差分からは貢献がほとんど読み取れません。

このフロントマターが、現在のネイティブスキーマです。prompt.mdでは、runsmax_turnstimeout_secondsmodeltagsallowed_toolsなどのフィールドをトップレベルに置きます。フィクスチャ、会話履歴、ディレクトリが必要ならcase.yamlを追加します。このファイルにはschema_version: "1.1"nameが必須で、実行関連のフィールドはexecution:以下へ移します。

evalを実行し、レポートを読む

プラグインのルートからclaude plugin eval .を実行します。この1ケースだけなら、プラグインありのセッション3回と、ベースラインのセッション3回が起動します。各セッションが終わるたびに、進行状況の行へgraderの結果が表示されます。最後のサマリーにはWITHW/OUTΔRUNSCOSTNOTESが並びます。

次の順番で読みます。

  1. WITHは、プラグインありのセッションがgraderの条件を満たしたかを示します。
  2. W/OUTは、プラグインなしでもClaudeが同じ結果をどの程度出せたかを示します。
  3. Δは、プラグインの貢献度です。プラスなら有効、ゼロ付近なら要調査、マイナスなら回帰です。
  4. COSTは定価ベースの見積もりであり、サブスクリプションで実際に請求される金額とは限りません。
  5. NOTESには、プラグインありの群で最も重みの高い失敗、または実行エラーが示されます。

ケースが1つ以上あるスイートは、タイムスタンプ付きの結果ディレクトリへaggregate-result.jsonと自己完結型のreport.htmlを必ず書き出します。HTMLレポートでは各実行を開き、graderごとの判定と説明を確認し、プロンプトやgraderの定義とClaudeの実際の処理を比較できます。JSONには、全体スコア、合格ケース、平均差分、部分実行の状態、コスト見積もり、所要時間、Claude Codeのバージョンなど、CIで安定して扱えるフィールドが入ります。

テストを信頼する前に、意図的に回帰を起こす

次に、このテストが本当に失敗できることを証明します。release-notesスキルのdescriptionを一時的に、対象の仕事が分からない曖昧な文へ置き換えてください。evalケースは変更しません。同じコマンドをもう一度実行し、新しいレポートを確認したら、本来のdescriptionへ戻します。

確認したいのは、振る舞いの失敗です。Skill graderが合格しなくなる、期待したフォーマットの再現性が落ちる、あるいはプラグインありの優位性が縮む、といった変化です。正確なスコアを予想してはいけません。エージェントの実行結果にはばらつきがあります。デフォルトの3回でも、意図的な破壊の前後でレポートがほとんど変わらないなら、そのケースはまだプラグインを守れていません。依頼をより現実的にする、結果用graderを厳密にする、またはスキルが起動してはいけないネガティブケースを追加してください。

これは、煙探知機のテストボタンを押す作業に相当します。関係する欠陥で赤に変わると確認できない限り、緑色のダッシュボードには価値がありません。

ケースを増やす前に、実行予算を決める

デフォルトの1ケースだけでも、エージェントセッションは6回発生します。同じケースへLLM graderを1つ加えると、judgeの投票は18票増えます。6セッションそれぞれに3票です。各セッション自体も複数ターンに及ぶ場合があります。小さなスイートでも、ケース数から想像する以上の利用量になり得るのはこのためです。

判断の段階に応じて、3種類の予算を使い分けます。

段階コマンドの形その予算で得るもの
ローカルでの高速ループ--case release-note --runs 1 --ablation none --no-publishプラグインありのセッション1回だけを動かし、ベースラインなしで、ケース編集中の兆候をすばやく得る
確認両群ともデフォルトの3回6セッションを実行し、より信頼できる差分を得る
CIゲートエージェントとjudgeのモデルを固定し、--json、しきい値、--no-publish--max-cost-usdを指定比較可能な結果、保存できる成果物、推定費用に対する停止ルールを得る

1回だけのループは、意図的にばらつきを許容しています。明らかなミスを見つけるために使い、変更を受け入れる前にはデフォルトの3回で確認してください。頻繁に回す確認にはregextool_usedtool_orderfile_existsを優先します。judgeの呼び出しが増えないためです。安定したルールで表せない短い成果だけに、LLM graderを使います。

コスト上限のフラグには注意点があります。--max-cost-usdは、各実行を始める前にCLIの定価ベース見積もりへ上限を設けます。すでに進行中の実行は完了するため、レポート上の見積もりが上限を超える場合があります。上限に達すると部分的な結果を残し、終了コード2で終了します。これは安全策であり、前払い式のウォレットではありません。

1回の高速ループ、3回対3回のベースライン確認、20ドルのCI上限を示す建築的な予算インフォグラフィック
確信度に合わせて予算を段階化します。編集時は1回、確認時は3回対3回、CIでは上限を明示します。

回帰チェックをCIへ引き渡す

意図的な回帰がレポートに表れ、復元したプラグインが合格したら、同じスイートをバージョン管理へ移します。AnthropicのCI例では、エージェントとjudgeのモデルを固定し、results.jsonを書き出し、しきい値を0.8に設定し、レポートをローカルに保持し、推定コストの上限を$20にしています。--trust-pluginも渡しますが、これはチェックアウトしたプラグインとスイートを自分で実行してもよい場合に限り適切です。

引き渡すコマンドは、正確には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です。Claude Codeのインストールと認証のあとにこのコマンドをジョブへ置き、2つの結果ファイルを保存します。

ビルドのゲートには、コマンドの終了ステータスだけで十分です。終了コード0は、すべてのケースを読み込み、しきい値を満たしたことを意味します。終了コード1は、しきい値未満のスコアと、いくつかのセットアップエラーに対応します。終了コード2は、コスト上限による部分実行、または最初の認証拒否を示します。失敗時もresults.jsonreport.htmlを保存してください。そうすれば、プラグインの回帰、タイムアウト、予算による停止のどれだったかを作者が確認できます。

モデルの固定は重要です。固定しなければ、モデルのロールアウトがプラグインの回帰に見える可能性があります。推論コストにも同じ規律を適用してください。品質とeffortを別々の軸でテストし、コストの変化が振る舞いのスコアへ紛れ込まないようにします。

evalのJSONレポートを合格、失敗、部分実行の終了レーンへ振り分ける建築的なCIインフォグラフィック
CIでは色だけでなく理由も残します。合格、回帰、予算による中断は、それぞれ異なる結果です。

最初にテストしたい7つのプラグイン動作

最も大きな効果を得られるのは、ほかの利用者へプラグインを提供するチームです。個人用の補助ツールなら手動確認でも許容できます。一方、マーケットプレイスや組織向けのプラグインでは、弱いdescription、ツール権限、出力変更の1つ1つが、繰り返し発生するサポート業務につながります。

順位対象検証する具体的な振る舞い効果が高い理由
1マーケットプレイス向けプラグインの保守担当スキルを起動すべき自然な依頼と、起動すべきでない隣接領域の依頼を使う見つからないスキルと、過剰に起動する煩わしいスキルの両方を、全利用者へ届く前に検出できる
2コードレビュープラグインのチーム必須のレビュー項目を採点し、レビュースキルが起動したことも確認する表現の自由を保ちながら、製品の出力仕様を守れる
3リリースエンジニアリングチーム現行モデルを固定してプラグインを変更し、同じケースと差分を比較するプラグインの回帰とモデルの変化を切り分け、主観的なリリース議論を減らせる
4セキュリティプラグインの作者無害な保守依頼ではスキルを禁止するネガティブケースを追加する高コストまたは業務を妨げるスキャンが、誤った依頼で始まるのを防げる
5MCPを使うワークフロープラグイン外部ツールの応答をスイートのモックへ置き換え、実行されたツール経路を採点する毎回ライブサービスへ触れずに、失敗やエッジケースを検証できる
6文書生成プラグインの管理者期待するファイルの存在を採点し、安定した内容をregexで確認する親切な最終メッセージだけでは見えない、出力仕様の破損を検出できる
7複数の社内プラグインを持つプラットフォームチーム変更のたびに小さなスモークセットをタグで実行し、リリース前により深いケースを回す日常的なコストを、同僚の作業を止める可能性が高い振る舞いへ集中できる

まず、消えたときにユーザーが気づく振る舞いを2つ選んでください。曖昧なケースを10件並べるより、再現できる欠陥を露出させる起動テスト1件と結果テスト1件のほうが有用です。

ネイティブplugin evalを軸に作れる2つの製品

1. 最有力はプルリクエストの差分ゲート

ネイティブコマンドを実行し、aggregate-result.jsonを読み取り、スコアの変化、差分、コスト、失敗したgrader、保存したレポートへのリンクを1件のレビューとして投稿する軽量なCI製品を作ります。プラグインチームやマーケットプレイスの保守担当者が対価を払うのは、別の評価器ではなく判断レイヤーです。

需要は初期段階ですが、商用意図は明確です。claude code evalsは米国で月間約50回検索され、前年比600%増、CPCは$17.61です。より広い評価プラットフォームにも品質予算が存在し、Braintrustは月額$249のProプランを掲載しています。これはカテゴリの基準点であり、プラグインラッパーの価格提案ではありません。

販売可能な最小構成は、GitHub ActionとPRコメントです。プラグインのパス、しきい値、固定するモデル、推定コスト上限を受け取り、ネイティブのJSONとHTMLをアップロードし、終了コード1とpartialの終了コード2を区別します。ただし、プラットフォーム依存のリスクがあります。AnthropicがファーストパーティのPRレポートを追加する可能性があるためです。防御力になるのは、複数リポジトリをまたぐポリシー、履歴比較、承認ルールであり、ネイティブレポートを見栄えよく複製することではありません。

2. スキル作者には厳選したevalパックを提供できる

コードレビュー、変更履歴の作成、インシデント対応、適切なツール選択といった一般的なプラグイン業務向けに、保守されたケースパックを販売します。パックの実体は、現実的な正例・負例のプロンプトと決定論的graderを備えた通常のevals/ディレクトリです。チームは品質基準をゼロから作る代わりに、自分たち向けに調整できます。

直接的なキーワードであるclaude code skill evalsの米国での検索は月間約10回です。非常に小さいため、単独でベンチャー規模を狙う市場ではなく、焦点を絞ったアドオン向けです。MVPは、価値の高いプラグインカテゴリを1つ選び、そのカテゴリに特化した優れたパックを1つ作ることです。Claude Codeのリリースに合わせてバージョン管理し、短いキャリブレーションガイドを添えます。課題も明確です。claude plugin eval initは、すでにケースを提案し、試験実行まで行います。パックが勝つには、その分野のシナリオと失敗基準が汎用生成より優れていなければなりません。

このコマンドだけでは解決しないこと

ネイティブevalは、プラグインがあらゆる状況で優れているとは証明しません。証明できるのは、選んだプロンプト、環境、モデル、ツール権限、graderのもとでどう振る舞ったかです。弱いプロンプトは都合のよいスコアを生みます。regexなら、内容が誤っていても見出しだけで加点する可能性があります。LLM judgeにはばらつきがあり、graderごと、実行ごとに3票が追加されます。

隔離にも、把握しておくべき制約があります。実行のたびにクリーンな状態から始まるため、プロジェクトファイル、ユーザー設定、フック、個人用サーバーは存在しません。再現性には理想的ですが、フィクスチャの宣言を忘れたケースには不向きです。読み取り専用の標準セットを超えるツールには、明示的なコマンドライン権限が必要です。実物のプラグインMCPサーバーには追加のオプトインと権限が必要であり、フックや実サーバーはエージェントのサンドボックス外で動作できるため、隔離されたランナーで扱うべきです。

最後に、正当な処理が上限へ達するほどmax_turnstimeout_secondsを切り詰めないでください。タイムアウトまたはターン数上限に達した実行はエラーとして記録され、通常はスコアを下げます。意図した仕事に十分な余裕を持たせたうえで、推定コスト上限を使ってスイート全体を管理します。

Claude Code プラグインをevalでテストするには?

Claude Code v2.1.269以降を使い、動作するプラグインのルートからclaude plugin eval initを実行してスイートを生成するか、claude plugin eval init --bare <name>で空のケースを作ります。evals/以下へ現実的なプロンプトとgraderを置き、claude plugin eval .を実行したら、サマリーとレポートのWITHW/OUTΔを比較します。

Claude Code evalとは?

決定論的graderまたはモデルが判定するgraderで採点する、反復型かつ隔離されたClaude Codeセッションです。plugin evalにはデフォルトでプラグインなしのコントロール群が加わるため、Claudeが単にタスクを完了したかではなく、プラグインが結果を改善したかを測れます。

Claude Codeのskill evalはどう動く?

ユーザーが普段使う自然な言葉でプロンプトを書き、結果と、Skillツールが対象スキルを呼び出したかの両方を採点します。スキルが起動して結果が不合格なら、instructionsの改善が必要です。プラグインなしでも同程度に合格するなら、そのケースではスキルが測定可能な価値を加えていない可能性があります。

月曜日には、プラグイン保守担当者が起動テストを1件追加し、意図的に失敗させ、プラグインを元に戻したうえで、そのテストにCIのコスト上限を設定してください。チーム全体のプラグインへこのリリース判定を導入したい場合は、本番向けゲートの設計を支援できます

最終更新
2026年9月12日
カテゴリー
Build

Googleでこのサイトを優先する

omidsaffari.comをGoogle検索の優先ソースに追加

omidsaffari.comを優先ソースに設定すると、GoogleがTop Stories・AI Overviews・AI Modeであなたのために優先表示します。

音声AIエージェントの遅延原因をCloudflareで切り分ける

音声AIエージェントの遅延原因をCloudflareで切り分ける

Cloudflareのturnmetricsを使い、音声AIエージェントの遅延や無音応答をステージ別に切り分ける方法を解説します。7つのoutcome、各タイミングの読み方、3つの制御テストを押さえれば、モデルやTTSを推測で変更する前に、文字起こし・モデル・音声生成・ブラウザ再生のどこを調べるべきか判断できます。2026年9月12日Build
動画に字幕を入れる:RendiでSRTを焼き付ける実践ガイド

動画に字幕を入れる:RendiでSRTを焼き付ける実践ガイド

動画に字幕を入れる方法を、Rendiの非同期FFmpeg APIを使った実装例で解説します。SRTの事前確認、字幕スタイルの指定、ジョブ送信と完了確認、出力MP4の品質チェック、料金を左右する容量計算まで、バッチ処理へ進む前に押さえる実務手順と注意点を具体的にわかりやすくまとめました。2026年9月11日Build
OpenAI Agents SDKかAgents APIか:開発体制で決める選び方

OpenAI Agents SDKかAgents APIか:開発体制で決める選び方

OpenAI Agents SDKとAgents APIのどちらを選ぶべきか。セッション管理、実行環境、データ保持、料金、移行コストを比較し、小規模チームから規制業界まで、開発体制に合う判断基準を具体例と試算で整理します。長時間タスク、ZDR、セルフホスト、運用負荷の違いも分かります。2026年9月11日Build
FFmpeg APIで見るRendi料金:動画時間より処理バイト数で選ぶ

FFmpeg APIで見るRendi料金:動画時間より処理バイト数で選ぶ

RendiのFFmpeg API料金を、入出力の処理量、ストレージ、コマンド実行時間、vCPUの4条件で比較。Freeから月額$25のPro、実行時間無制限プランまで、動画処理パイプラインに必要な最小構成の選び方、隠れコスト、Very Good FFmpeg・RenderIOとの違いを具体例で解説します。2026年9月11日Build
Codex CLI 0.154.0のworktree実践術:隔離から統合まで

Codex CLI 0.154.0のworktree実践術:隔離から統合まで

Codex CLI 0.154.0のworktree機能を実践的に解説します。隔離セッションの起動、作業場所と差分の確認、テスト、コミットの取り込み、後片付けまでを順に整理。依存関係、ポート、データベース、キャッシュ、秘密情報を別途管理する際の注意点や、並列開発で役立つ用途もわかります。2026年9月10日Build
Claude Code 使い方ガイド:maxEffortLevelで推論レベルを制御

Claude Code 使い方ガイド:maxEffortLevelで推論レベルを制御

Claude Code 2.1.267で追加されたmaxEffortLevelの使い方を解説します。ユーザー、プロジェクト、マネージド設定で推論負荷に上限を設け、どの値が優先されるかを検証。条件をそろえた日常タスクで品質とトークン支出を別々に測り、導入すべき上限を判断する方法が分かります。2026年9月10日Build
ブラウザ自動化の録画FPSはどう選ぶ?agent-browser v0.37.0実践ガイド

ブラウザ自動化の録画FPSはどう選ぶ?agent-browser v0.37.0実践ガイド

ブラウザ自動化の実行結果を、チームがレビューしやすい動画証跡として残す方法を解説します。agent-browser v0.37.0の新しい30 fps既定値、1〜60 fpsの使い分け、ffmpegの確認、MP4/WebM保存、CIで失敗原因を追える証拠を残す実践手順まで具体的に整理しました。2026年9月8日Build
VPS 料金で見るUltaHostの更新コスト:契約期間・追加費用を徹底比較

VPS 料金で見るUltaHostの更新コスト:契約期間・追加費用を徹底比較

UltaHostのVPS 料金と更新費用を契約期間別に検証。Basicは月額$6.89からですが、長期契約は返金対象外となる場合があります。Plesk・cPanelの追加料金、2026年8月の値上げ、旧SKU、Hostinger・DigitalOceanとの比較まで、更新前に必要な判断材料を整理します。2026年9月7日Build
ニュースレター

毎週日曜、一通の手紙。動くシステムの話。感想戦ではなく。

週刊。スパムなし。いつでも解除できます。