claude plugin eval 完全ガイド|自作スキルの「効果ゼロ」を数値で見抜く
「スキルを書いたのに、Claudeが全然使ってくれない。なんで?」
Qiitaユーザーのnaoki_ishimura氏が2026年9月12日に書いたこの一文は、多くのClaude Codeユーザーに刺さった。記事のタイトルは「自作スキルは本当に効いているのか、数値で確かめる」。氏がclaude plugin evalで測定したΔスコアはほぼ0だった。スキルがなくても結果は同じ。つまり自作スキルは「飾り」だったという発見だ。
同日、別のQiitaユーザーmoha0918_氏も同様の体験を報告した。「プラグインなし状態でも同じスコアが出た。スキル名の命名が自然言語とかけ離れていたのが原因だった」。
これほど痛烈なフィードバックを、感覚ではなくデータで示せるのが、Claude Code v2.1.269(2026年9月11日リリース)で追加されたclaude plugin evalだ。
- Claude Codeで自作スキル・プラグインを運用している開発者
- スキルが本当に機能しているか不安なエンジニア
- プラグインの品質をCI/CDに組み込みたいチームリード
- Agent Pluginsエコシステムを活用したい方
claude plugin evalとは何か
claude plugin evalは、Claude Codeのスキル(プラグイン)が実際に機能しているかを再現可能な数値で検証するコマンドだ。
v2.1.269以前、開発者はスキルの効果を「なんとなく良さそう」という感覚で判断するしかなかった。リリースノートはスキルが「動く」かどうかを教えてくれても、「効いているか」は教えてくれない。この空白を埋めるのがplugin evalの設計思想だ。
仕組みはシンプルだ。各テストケースをプラグインあり(WITH)で3回、プラグインなし(WOUT)で3回実行する。合計6回の実行結果からそれぞれの平均スコアを算出し、その差分をΔ(デルタ)として出力する。
WITHスコア平均 - WOUTスコア平均 = Δ
このΔが「プラグインが実際に貢献している量」だ。スコア単体ではなくΔだけがプラグインの価値を証明する。
eval suiteの構造
テストスイートはプラグインフォルダ内のevals/ディレクトリに格納される。各ケースは独立したサブディレクトリを持つ。
my-skill/
├── SKILL.md
└── evals/
├── case-commit-msg/
│ ├── prompt.md ← ユーザー入力を模したプロンプト
│ └── graders/
│ ├── tool_used.yaml
│ └── regex.yaml
└── case-no-trigger/
├── prompt.md
└── graders/
└── regex.yaml
prompt.mdには実際のユーザーがタイプするような自然な表現を使う。「コミットメッセージを書いて」は良い例だ。「commit-messageスキルを使ってコミットメッセージを書いて」は悪い例だ。ユーザーはスキル名を知らない。
6種類のグレーダー — 無料4種と有料2種
グレーダーはテストケースの合否を判定するルールだ。コストの観点から2グループに分かれる。
無料の4種(トランスクリプト・ファイル検査)
regex: Claudeの返答に特定のパターンが含まれるかを正規表現で検査する。最も手軽で、フォーマット検証に向いている。
# graders/regex.yaml
type: regex
pattern: "^feat\\(.+\\):" # Conventional Commits形式を検査
target: response
tool_used: 特定のツール(スキル)が呼び出されたかを確認する。「このプロンプトでスキルが発火するか」の検証に不可欠だ。
# graders/tool_used.yaml
type: tool_used
tool: commit-message-skill
tool_order: 複数ツールの呼び出し順序を検証する。依存関係のある処理フローの検証に使う。
file_exists: 特定のファイルが生成・変更されたかを確認する。コード生成スキルなどに有効だ。
有料の2種(ジャッジモデル呼び出し)
llm: Claudeがジャッジとして返答の質を評価する。自由記述形式の出力(コードレビュー、要約など)の品質検証に使う。追加APIコストが発生する。
# graders/llm.yaml
type: llm
criteria: "コミットメッセージは変更の意図を明確に説明しているか"
baseline: 参照回答と比較して品質を評価する。最もコストが高いが、正確な品質基準がある場合に有効だ。
実践: initからレポート解読まで
Step 1: テストスイートを自動生成する
プラグインフォルダ内で以下を実行する。
cd my-skill/
claude plugin eval init
Claudeが対話形式でスキルの目的を質問し、テストケースとグレーダーの候補を提案してくれる。提案を確認・調整してからevals/ディレクトリに書き出す。実行前にコスト見積もりが表示されるので、--max-cost-usd 2.00のような上限を設定しておくと安心だ。
Step 2: 評価を実行する
# スキルフォルダのルートで実行
claude plugin eval .
# コスト上限を設定する場合
claude plugin eval . --max-cost-usd 5.00
各ケースが6回(WITH×3、WOUT×3)実行される。完了後にHTMLレポートとJSONが生成される。
Step 3: レポートを読む
出力例は次のようになる。
Case: case-commit-msg
WITH: 0.83 (avg of 3 runs)
WOUT: 0.81 (avg of 3 runs)
Δ: +0.02 ← ほぼ効果なし
Case: case-no-trigger
WITH: 0.30
WOUT: 0.89
Δ: -0.59 ← プラグインが邪魔している
Δが0に近い場合の診断と対処
「Δ≈0かつtool_usedグレーダーが失敗」は最も多い失敗パターンだ。スキルが一度も呼び出されていないことを意味する。
原因1: スキルの説明文がユーザーの言葉と乖離している
SKILL.mdのdescription:に書いた表現が技術的すぎると、Claudeはそのスキルを選ばない。「commit-message-generatorを使ってコミットメッセージを作成する」ではなく「このdiffを見てコミットメッセージを書いてほしい」のような自然な言い方で発火するかをprompt.mdで試す。
原因2: trigger_phraseが自然な入力と一致していない
スキルのトリガー設定がある場合、実際のユーザー入力と一致するよう調整する。kai_kou氏はQiitaの記事で「プロンプトをユーザー視点で書き直したらΔが0.4改善した」と報告している。
原因3: 「WITHもWOUTも高スコア」パターン
ベースモデルが十分賢くて、スキルなしでも同じ品質の出力を出せている場合だ。この場合、スキルの存在意義を問い直す必要がある。一貫性の強制(特定のフォーマット指定など)に絞ってスキルを再設計すると効果が出やすい。
CI/CDゲートとして使う — 光と影
光: スキルのデグレを自動で検出できる
claude plugin evalはCI-friendlyな終了コードを返す。
- 終了コード0: 全ケースパス
- 終了コード1: Δ閾値を下回るケースあり
- 終了コード2:
--max-cost-usdの上限に到達
GitHub Actionsに組み込む場合は次のようになる。
- name: Verify plugin quality
run: |
claude plugin eval . --delta-threshold 0.1 --max-cost-usd 3.00
Claudeのモデルアップデートがあるたびに、以前は機能していたスキルが意図通り動かなくなることがある。suwa_nobu氏はQiitaで「47本のスキルを運用して学んだこと」として「モデル更新でΔが突然0に近づいたスキルが3本あった。evalがなければ気づかなかった」と報告している。
影: コストと実行時間のトレードオフ
1ケースあたり6回実行するため、テストスイートが大きくなるとコストが無視できなくなる。MarkTechPostの分析記事によると、10ケース×llmグレーダー使用時のコストは1回あたり約$0.5〜$1.5程度(モデルやプロンプト長による)。毎PRで実行するには割高な場合もある。
現実的な運用方針:
- プルリクエスト時: 無料グレーダー(regex、tool_used)のみで高速チェック
- 週次または手動: llmグレーダーを含む完全評価
- モデルアップデート後: 必ず全スイートを実行
どのスキルにも最低1つのtool_usedグレーダーを含めることを推奨する。「スキルが呼ばれているか」は最も基本的な品質指標であり、これが通らないならスコアがどれだけ高くてもΔは意味をなさない。
Claude Codeのスキルとプラグインについてさらに詳しく知りたい方は、関連記事もあわせて読んでほしい。
関連記事
- Agent Plugins 1.0|MCP・SKILL.md統合の新標準とClaude Codeへの影響
- Claude Code ネストサブエージェント完全ガイド
- Claude Code v2.1.260 — diffパネル・キャッシュ・GitLab対応
- AIエージェント時代の開発者の役割シフト
本記事の情報はClaude Code v2.1.269(2026年9月11日リリース)時点のものだ。コマンドの仕様、グレーダーの種類、コスト体系は今後のアップデートで変更される可能性がある。最新情報は公式ドキュメントを参照すること。