決定フレームワーク
CLAUDE.md / Hooks / Skills / MCP — 4つの拡張メカニズムの正しい使い分け。このページを読めば、「どこに何を書くべきか」の判断に迷わなくなります。
全体像
Claude Codeには4つの拡張メカニズムがあります。それぞれの目的と特性を理解し、正しく使い分けることが最も重要です。
CLAUDE.md
プロジェクトの「会社ポリシー」。常時ロードされ、全会話に適用される。プロジェクトの基本方針やコーディング規約を記述する。
Hooks
「セキュリティゲート」。シェルコマンドで100%確実に自動実行される。Claudeの判断を介さない決定的な安全装置。
Skills
「手順書」。必要な時だけ文脈に応じて自動ロードされる。専門知識やワークフローを格納する。
MCP
「専門ツールの配線」。外部サービスへの接続プロトコル。ブラウザ操作やデータベース連携など、外界との橋渡しを担う。
決定的 vs 確率的
拡張メカニズムを理解する上で最も重要な概念が「決定的(Deterministic)」と「確率的(Probabilistic)」の違いです。
決定的(Deterministic)
- CLAUDE.md — 起動時に100%ロード。ルールに従う確率は約80%。
- Hooks — イベント発火時に100%実行。シェルスクリプトなので判断の余地なし。
確率的(Probabilistic)
- Skills — 起動時はdescription(1行)のみロード。関連する会話が発生した時にフルコンテンツをロード。
- Agents — サブエージェントとして呼び出され、特定タスクを処理。
この区別がClaude Code設計の核心です。「安全に関わるものは決定的に(Hooks)」「知識やガイドラインは確率的に(Skills)」が基本原則。CLAUDE.mdは決定的にロードされますが、遵守は確率的(約80%)である点に注意してください。
CLAUDE.md
特性
- 毎セッション開始時に自動ロード
- 常にコンテキストを占有する(短く保つ理由)
- 公式推奨は200行以内(@importやrules/分割で補完)
- Claudeは約80%の確率で遵守
✅ 適するもの
- プロジェクト概要と基本原則
- コーディング規約(MUST/NEVER)
- ワークフロー宣言(Plan Mode Default)
- 主要ファイルパス
❌ 適さないもの
- 長い手順書(→ Skills)
- 自動実行すべきチェック(→ Hooks)
- 外部ツールの設定(→ MCP)
- 500行の百科事典(→ 分割)
Hooks
特性
- イベント駆動で100%実行
- シェルコマンド/スクリプトを実行
- Claudeの判断を介さない(決定的)
- 設定場所:
settings.json
主なイベント
| イベント | タイミング | 用途例 |
|---|---|---|
PreToolUse |
ツール実行前 | 危険コマンドブロック |
PostToolUse |
ツール実行後 | 結果検証 |
PostWrite |
ファイル書き込み後 | 自動lint/test |
Stop |
セッション終了時 | レポート生成 |
SubagentStop |
サブエージェント終了時 | 結果検証 |
UserPromptSubmit |
ユーザー入力時 | 入力バリデーション |
Hooksは全22イベントに対応しています(上記は主要6イベント)。その他: PermissionRequest, SubagentStart, SessionStart, SessionEnd, PreCompact, PostCompact, WorktreeCreate, TaskCompleted, ConfigChange, Elicitation等。
ハンドラーは4種類: command(シェルコマンド)、http(HTTPリクエスト)、prompt(LLM判断)、agent(サブエージェント起動)
✅ 適するもの
- 破壊操作の完全ブロック(rm -rf, force push)
- シークレットキーの自動チェック
- ファイル保存後の自動lint/format
- 長セッション警告
❌ 適さないもの
- 複雑な判断が必要な処理(→ Skills)
- 外部API連携(→ MCP)
Skills
特性
- 起動時はdescription(1行の説明文)のみロード
- 会話の文脈に応じて自動的にフルコンテンツがロード
/skill-nameで手動起動も可能- SKILL.md形式(YAMLフロントマター + Markdownコンテンツ)
context: forkを設定すると、スキルがサブエージェントで実行され、メインコンテキストを汚染しません
✅ 適するもの
- コードレビュー手順
- デプロイワークフロー
- テスト設計ガイドライン
- フロントエンド設計パターン
- デバッグ手順
❌ 適さないもの
- 毎回必ず適用すべきルール(→ CLAUDE.md)
- 100%実行すべき安全チェック(→ Hooks)
- 外部サービスとの接続(→ MCP)
MCP
特性
- Model Context Protocol(標準プロトコル)
- 外部ツールやデータソースへの接続
- stdio / SSE / HTTP の3つの接続方式
.mcp.jsonで設定
✅ 適するもの
- ブラウザ操作(Playwright)
- ドキュメント連携(Notion)
- データベース接続
- Webスクレイピング(Firecrawl)
- GitHub操作
❌ 適さないもの
- プロジェクト内ルール(→ CLAUDE.md)
- 自動チェック(→ Hooks)
- 知識・手順(→ Skills)
決定木フローチャート
「このルール/機能をどこに置くべきか?」を判断するフローチャートです。上から順に質問に答えていくことで、最適な配置先が決まります。
迷ったらこのフローチャートに戻ってください。ほとんどのケースは3つの質問で解決します。複数のメカニズムを組み合わせる場合(例: CLAUDE.mdで方針宣言 + Hooksで強制)は、それぞれの役割を明確に分けましょう。
よくある判断ミス
多くの開発者が陥りがちな3つのアンチパターンとその対策です。
1「全部CLAUDE.mdに書く」
300行のCLAUDE.mdは情報過多でClaudeの注意力が分散します。CLAUDE.mdはプロジェクト概要とMUST/NEVERルールだけに絞り、詳細な手順はSkillsへ、カテゴリ別のルールは .claude/rules/ に分割してください。理想は80-120行です。
2「Hooksを使わずSkillsで安全を担保」
「ファイル削除前に確認して」とSkillsに書いても、Claudeは確率的にしか従いません。安全に関わるもの — 破壊的操作のブロック、シークレットキーの漏洩防止、本番環境の保護 — はHooksで100%ブロックすべきです。安全は「お願い」ではなく「仕組み」で担保してください。
3「MCPの代わりにBash toolで外部連携」
curl や fetch で無理やり外部APIを叩くより、MCPサーバーを設定した方が安定・安全です。MCPでは認証やエラーハンドリングが標準化され、レート制限の管理も組み込まれます。一度設定すれば、Claudeが自然に外部ツールを使いこなせるようになります。