Claude Codeを拡張する手段としてSkillsやMCPはよく語られるが、もうひとつ地味ながら強力な仕組みが「Hooks(フック)」だ。Hooksはモデルの「気が向けば従う」指示ではなく、ライフサイクルの節目で必ず実行されるシェルコマンドであり、危険な操作を機械的に止めたり、編集のたびにフォーマッタを走らせたりできる。今回はHooksの基本と実践レシピ、そしてSkills・MCP・サブエージェントとの役割分担を整理する。

Hooksとは何か――「確率的な指示」と「確定的な実行」の違い
Claude Code Hooksは、.claude/settings.json(プロジェクト共有)や.claude/settings.local.json(個人設定)に定義するシェルコマンドで、Claude Codeが特定のライフサイクルイベントに達したタイミングで自動実行される。CLAUDE.mdに「rmコマンドは使わないで」と書いてもモデルが見落とす可能性はゼロではないが、Hookはイベントが発火すれば100%実行される。プロンプトが「確率的(probabilistic)」な指示であるのに対し、Hookは「確定的(deterministic)」な実行だ、という説明がよく使われる。
用途としては、危険なコマンドの事前ブロック、編集後の自動フォーマット、すべてのツール呼び出しのログ記録、セッション終了時の通知、CI連携などが挙げられる。シェルで書けることは何でもHookに配線できる。
主要なイベント一覧
| イベント | 発火タイミング | 代表的な使い道 |
|---|---|---|
| SessionStart | セッション開始時 | 環境変数チェック、依存関係の検証 |
| PreToolUse | ツール実行の直前 | 危険なコマンドのブロック、権限確認の自動化 |
| PostToolUse | ツール実行の成功直後 | 編集後の自動フォーマット、テスト実行 |
| UserPromptSubmit | ユーザーがプロンプトを送信した時 | 入力内容の検証、コンテキスト注入 |
| Notification | Claudeが入力待ちになった時 | デスクトップ通知の送信 |
| Stop / SubagentStop | セッション(サブエージェント)終了時 | 後片付け処理、レポート生成 |
PreToolUseは「アクションの実行そのものを止められる唯一のタイミング」という点で特に重要だ。
実践レシピ3つ
1. 危険なBashコマンドを機械的にブロックする
PreToolUseフックでBashツールの入力を検査し、rm -rfのようなパターンにマッチしたら終了コード2で拒否する。
#!/bin/bash
input=$(cat)
command=$(jq -r '.tool_input.command' <<< "$input")
if [[ "$command" =~ rm\ -rf ]]; then
echo "Blocked: rm -rf is not allowed" >&2
exit 2
fi
exit 0
終了コード2はstderrの内容をそのままモデルへの拒否理由として返す、ブロック専用の合図になる。
2. 編集のたびに自動フォーマット
PostToolUseでWrite|Editにマッチさせ、対象ファイルにフォーマッタ(Prettierやgofmtなど)をかける。人が「フォーマットして」と頼む手間そのものをなくせる。
3. より柔軟な制御にはJSON出力を使う
終了コードだけでは「ブロックか黙認か」の二択になる。もっと細かく制御したい場合は終了コード0のままJSONを標準出力に書く。たとえばPreToolUseで拒否理由を構造化して伝えるなら次のようになる。
{
"hookSpecificOutput": {
"hookEventName": "PreToolUse",
"permissionDecision": "deny",
"permissionDecisionReason": "本番DBへの直接接続は禁止です"
}
}
逆に「いつも許可しているツール呼び出し」は自動承認して、承認ダイアログの手間を減らすこともできる。終了コードとJSONは原則どちらか一方の方式に統一するのがハマりにくい。詳細な仕様は公式リファレンスにまとまっている。

Skills・MCP・サブエージェントとの役割分担
Claude Codeの拡張機構は増えてきたが、それぞれ守備範囲が異なる。混同すると設計が迷子になるので整理しておく。
| 仕組み | 正体 | 向いている用途 |
|---|---|---|
| Hooks | ライフサイクルイベントで必ず動くシェルコマンド | 安全網(危険操作のブロック)、定型処理の自動実行 |
| Agent Skills | Markdown+スクリプトで手順知識を渡す仕組み | タスクに応じて必要な時だけ読み込む手順書 |
| MCP | 外部ツール・データソースへの標準接続規格 | GitHub・Notion・DBなど外部サービスとの連携 |
サブエージェント(.claude/agents/) |
独立したコンテキストを持つ委任先エージェント | レビュー専任・テスト専任など役割分担 |
たとえば「PostToolUseフックでコード編集後にlintを自動実行し、指摘が残っていたらcode-reviewerサブエージェントに投げる」といった組み合わせも可能だ。Hookは「必ず起きること」、Skillsは「必要な時に読み込む知識」、MCPは「外への接続経路」、サブエージェントは「作業の委任先」とざっくり覚えておくと使い分けやすい。
周辺動向:オープン標準化が進むSkillsとMCP
この領域は基盤ごとオープン化が進んでいる。Anthropicは2025年12月18日、Agent Skillsの仕様をオープン標準として公開し、Claude以外のツールでも同じ形式のスキルを使い回せるようにした。同年12月にはMCP自体もAnthropicの手を離れ、Block・OpenAIと共同設立したLinux Foundation傘下の「Agentic AI Foundation」に寄贈されている。公式のMCP Registryはプレビュー中ながら1万件超の公開サーバーを集約しており、GitHubやDocker Desktopのカタログもここと連携し始めている。Hooksはまだ標準化の話題には上っていないが、Skills・MCPが「他社ツールとも共通の土台」になりつつある流れは押さえておきたい。
主な情報源
- Claude Code Docs: Automate actions with hooks
- Claude Code Docs: Hooks reference
- AgentsRoom: Claude Code Hooks
- AgentsRoom: Claude Code Subagents
- Anthropic: Equipping agents for the real world with Agent Skills
- PPC Land: Explaining MCP
- Wikipedia: Model Context Protocol
各ツールは提供元の規約に従ってご利用ください。情報は各情報源の公開時点のものです。収集・要約はAI、公開判断は人。