3つの拡張機構を正しく選択する
Claude CodeにはAgent・Command・Skillという3つの拡張機構があります。 それぞれ似ているように見えますが、設計思想と動作が異なります。 まずは全体像を比較表で把握しましょう。
| 特性 | Agent | Command | Skill |
|---|---|---|---|
| 配置場所 | .claude/agents/ | .claude/commands/ | .claude/skills/ |
| コンテキスト | 分離(別プロセス) | インライン(メイン共有) | インライン(fork可能) |
| /メニュー表示 | なし | 常に表示 | デフォルト表示(非表示可能) |
| 自動呼び出し | あり(description経由) | なし | あり(description経由) |
| 引数 | promptパラメータ | $ARGUMENTS, $0, $1 | $ARGUMENTS, $0, $1 |
| 動的コンテキスト | なし | !`command` | !`command` |
| ツール制限 | tools / disallowedTools | allowed-tools | allowed-tools |
| メモリ | memoryフィールド | なし | なし |
| Skillプリロード | skillsフィールド | なし | なし |
| MCPサーバー | mcpServersフィールド | なし | なし |
Agentは独立したコンテキストウィンドウで動作する自律的なエージェントです。 メインの会話とは完全に分離されて動くため、以下のような場面で力を発揮します。
memoryフィールドで セッション間で情報を引き継ぎたい場合background: trueで メインの作業と並行して処理を進めたい場合isolation: worktreeで Git worktreeを使った完全分離実行が必要な場合# .claude/agents/code-reviewer.md
---
name: code-reviewer
description: Use this agent PROACTIVELY when reviewing pull requests
tools: Read, Glob, Grep
model: sonnet
maxTurns: 10
memory: project
skills:
- review-guidelines
---
# コードレビュー手順
1. 変更されたファイルを全て読む
2. コーディング規約との整合性を確認
3. パフォーマンスやセキュリティの問題を検出
4. レビューコメントを構造化して返すCommandはユーザーが意図的に起動するエントリーポイントです。 以下のような場面に向いています。
/メニューに常に表示されるため、チームメンバーが使いやすい# .claude/commands/deploy-check.md
---
description: デプロイ前の最終チェックを実行
model: haiku
---
# デプロイ前チェック
1. Agent tool で code-reviewer を呼び出し、
直近の変更をレビュー
2. テストを実行して全パスを確認
3. Skill tool で changelog-generator を呼び出し、
変更履歴を生成
4. 結果をサマリーとして報告SkillはClaudeが自動的に適用する再利用可能な手順です。 以下のような場面で選択します。
user-invocable: falseに設定し、 Agentのskills:フィールドで指定してドメイン知識を注入したい場合# .claude/skills/test-writer/SKILL.md
---
name: test-writer
description: TypeScriptのテストファイルを作成・更新するとき
allowed-tools: Read, Edit, Bash
---
# テスト作成ガイドライン
- テストフレームワーク: Vitest
- ファイル命名: *.test.ts
- カバレッジ目標: 80%以上
## Gotchas
- モック化する際は vi.mock() を使用
- 非同期テストは必ず await を付けるClaudeが自動的に拡張機構を呼び出す場合、以下の優先順位で判断します。
意図しない自動呼び出しを防ぐための制御手段があります。
disable-model-invocation: trueを フロントマターに設定すると、Claudeがそのスキルを自動的に呼び出さなくなります。 ユーザーの明示呼び出しのみに制限されますdescriptionの文言を弱めるか削除します。PROACTIVELYのような積極的な表現を避け、具体的なトリガー条件を曖昧にすることで、 Claudeが自動的に呼び出す頻度を下げられます# Skillの自動呼び出しを防止する例
---
name: dangerous-migration
description: データベースマイグレーションを実行
disable-model-invocation: true
---
# 注意: このスキルは必ずユーザーの明示的な
# 指示のもとで実行してください最後に、どの拡張機構を選ぶべきかの判断フローを示します。 迷ったときはこのフローに沿って考えてみてください。
Claudeが会話の流れから自動的に判断して呼び出してほしいなら → Skillを選びます。descriptionにトリガー条件を明確に書き、Claudeが適切なタイミングで適用できるようにします。
メインの会話とは別のコンテキストで、自律的に複数ステップの処理を行わせたいなら → Agentを選びます。 永続メモリやバックグラウンド実行が必要な場合もAgentが適切です。
自分のタイミングで起動し、結果をメインの会話で確認したいなら → Commandを選びます。/メニューに表示されるため、チームでの共有にも適しています。
判断のまとめ:自動呼び出しが必要 → Skill / コンテキスト分離・自律実行が必要 → Agent / ユーザー起動のエントリーポイント → Command。 迷った場合はまずCommandとして作り、自動化したくなったらSkillに昇格させるのが実践的なアプローチです。
Agent・Command・Skillの3つの拡張機構は、それぞれ異なる役割を持っています。 Agentは自律的なマルチステップ処理、Commandはユーザー起動のエントリーポイント、 Skillは再利用可能な手順と自動呼び出しの仕組みです。 自動呼び出しの優先順位を理解し、disable-model-invocationやdescriptionの調整で 呼び出し制御を適切に行うことで、安全かつ効率的なワークフローを設計できます。