create-hooks について
Claude Code 向けに、イベントに応じてコマンドやプロンプトを実行するフックを作成するスキルです。イベント、ツールマッチャー、操作のブロック、デバッグ、安全な設定を扱います。
主な機能
- 01イベントに応じたコマンドやプロンプトの実行
- 02マッチャーによるツール呼び出しの選別
- 03操作のブロックやコンテキストの追加
- 04ログ、フォーマット、通知の設定
- 05フックのデバッグと JSON 検証
活用シーン
- 01ツール実行前にコマンドの安全性を確認
- 02編集後にファイルを自動フォーマット
- 03セッション開始時にプロジェクト情報を追加
- 04ツール利用を記録してフックの問題を診断
MCP 対応
`mcp__.*` などのマッチャーで MCP ツール呼び出しを絞り込み、フックを実行する方法を説明します。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ glittercowboy/ taches-cc-resources --skill create-hooksインストール後、Claude Code で/create-hooksを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/command-vs-prompt.mdexamples.mdhook-types.mdinput-output-schemas.mdmatchers.mdtroubleshooting.md詳細
Hooks を使うと、コアコードを変更せずに Claude の動作をプログラムで制御できるため、プロジェクト固有の自動化、安全性チェック、ワークフローのカスタマイズが可能になります。
Hooks は、Claude Code のイベントに応じて実行されるシェルコマンド、または LLM が評価するプロンプトです。イベント階層内で動作し、イベント(PreToolUse、PostToolUse、Stop など)がマッチャー(ツールパターン)をトリガーし、マッチャーが Hooks(コマンドまたはプロンプト)を実行します。Hooks はアクションのブロック、ツール入力の変更、コンテキストの注入、または Claude の操作の監視やログ記録のみを行うことができます。<quick_start>
- Hooks の設定ファイルを作成します:
- プロジェクト:
.claude/hooks.json - ユーザー:
~/.claude/hooks.json
- プロジェクト:
- Hook イベント(実行されるタイミング)を選択します
- Hook の種類(コマンドまたはプロンプト)を選択します
- マッチャー(トリガーとなるツール)を設定します
claude --debugでテストします
.claude/hooks.json:
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "jq -r '\"\\(.tool_input.command) - \\(.tool_input.description // \\\"No description\\\")\"' >> ~/.claude/bash-log.txt"
}
]
}
]
}
}
この Hook は次の処理を行います:
- すべての
Bashツールの使用前(PreToolUse)に実行されます commandを実行します(LLM プロンプトではありません)- コマンドと説明をファイルに記録します
</quick_start>
<hook_types>
| イベント | 実行されるタイミング | ブロック可能か |
|---|---|---|
| PreToolUse | ツールの実行前 | はい |
| PostToolUse | ツールの実行後 | いいえ |
| UserPromptSubmit | ユーザーがプロンプトを送信したとき | はい |
| Stop | Claude が停止しようとしたとき | はい |
| SubagentStop | サブエージェントが停止しようとしたとき | はい |
| SessionStart | セッションの開始時 | いいえ |
| SessionEnd | セッションの終了時 | いいえ |
| PreCompact | コンテキストの圧縮前 | はい |
| Notification | Claude が入力を必要としたとき | いいえ |
ブロックする Hooks は "decision": "block" を返して、アクションを阻止できます。詳しい使用例については、references/hook-types.md を参照してください。
</hook_types>
<hook_anatomy> <hook_type name="command"> 種類:シェルコマンドを実行します
用途:
- 簡単な検証(ファイルの存在確認)
- ログ記録(ファイルへの追記)
- 外部ツール(フォーマッター、リンター)
- デスクトップ通知
入力:stdin 経由の JSON 出力:stdout 経由の JSON(任意)
{
"type": "command",
"command": "/path/to/script.sh",
"timeout": 30000
}
</hook_type>
<hook_type name="prompt"> 種類:LLM がプロンプトを評価します
用途:
- 複雑な判断ロジック
- 自然言語による検証
- コンテキストを考慮したチェック
- 推論が必要な場合
入力:$ARGUMENTS プレースホルダーを含むプロンプト
出力:decision と reason を含む JSON
{
"type": "prompt",
"prompt": "Evaluate if this command is safe: $ARGUMENTS\n\nReturn JSON: {\"decision\": \"approve\" or \"block\", \"reason\": \"explanation\"}"
}
</hook_type> </hook_anatomy>
マッチャーは、Hook をトリガーするツールを絞り込みます:{
"matcher": "Bash", // Exact match
"matcher": "Write|Edit", // Multiple tools (regex OR)
"matcher": "mcp__.*", // All MCP tools
"matcher": "mcp__memory__.*" // Specific MCP server
}
マッチャーなし:Hook はすべてのツールに対して実行されます
{
"hooks": {
"UserPromptSubmit": [
{
"hooks": [...] // No matcher - fires on every user prompt
}
]
}
}
<input_output> Hooks は、セッション情報、現在のディレクトリ、イベント固有のデータを含む JSON を stdin 経由で受け取ります。ブロックする Hooks は、アクションを許可またはブロックするため、あるいは入力を変更するための JSON を返すことができます。
出力例(ブロックする Hooks):
{
"decision": "approve" | "block",
"reason": "Why this decision was made"
}
各 Hook の種類に対応する完全なスキーマについては、references/input-output-schemas.md を参照してください。 </input_output>
<environment_variables> Hook コマンドで使用できる環境変数:
| 変数 | 値 |
|---|---|
$CLAUDE_PROJECT_DIR | プロジェクトのルートディレクトリ |
${CLAUDE_PLUGIN_ROOT} | プラグインのディレクトリ(プラグインの Hooks のみ) |
$ARGUMENTS | Hook 入力の JSON(プロンプト Hooks のみ) |
例:
{
"command": "$CLAUDE_PROJECT_DIR/.claude/hooks/validate.sh"
}
</environment_variables>
<common_patterns> 入力が必要なときにデスクトップ通知を表示する:
{
"hooks": {
"Notification": [
{
"hooks": [
{
"type": "command",
"command": "osascript -e 'display notification \"Claude needs input\" with title \"Claude Code\"'"
}
]
}
]
}
}
破壊的な git コマンドをブロックする:
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "prompt",
"prompt": "Check if this command is destructive: $ARGUMENTS\n\nBlock if it contains: 'git push --force', 'rm -rf', 'git reset --hard'\n\nReturn: {\"decision\": \"approve\" or \"block\", \"reason\": \"explanation\"}"
}
]
}
]
}
}
編集後にコードを自動フォーマットする:
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write|Edit",
"hooks": [
{
"type": "command",
"command": "prettier --write $CLAUDE_PROJECT_DIR",
"timeout": 10000
}
]
}
]
}
}
セッション開始時にコンテキストを追加する:
{
"hooks": {
"SessionStart": [
{
"hooks": [
{
"type": "command",
"command": "echo '{\"hookSpecificOutput\": {\"hookEventName\": \"SessionStart\", \"additionalContext\": \"Current sprint: Sprint 23. Focus: User authentication\"}}'"
}
]
}
]
}
}
</common_patterns>
Hooks は必ずデバッグフラグを使ってテストしてください: ```bash claude --debug ``` これは、どのフックが一致したか、コマンドの実行、および出力を示します。一般的な問題と解決策については、[references/troubleshooting.md](references/troubleshooting.md) を参照してください。<reference_guides> フックの種類とイベント: references/hook-types.md
- フックイベントの完全なリスト
- 各イベントが発火するタイミング
- それぞれの入力/出力スキーマ
- ブロッキングフックと非ブロッキングフック
コマンドフックとプロンプトフック: references/command-vs-prompt.md
- 判断ツリー: どちらの種類を使うか
- コマンドフックのパターンと例
- プロンプトフックのパターンと例
- パフォーマンスに関する考慮事項
マッチャーとパターン: references/matchers.md
- ツールマッチング用の正規表現パターン
- MCP ツールのマッチングパターン
- 複数ツールのマッチング
- マッチャーの問題のデバッグ
入力/出力スキーマ: references/input-output-schemas.md
- 各フックの種類の完全なスキーマ
- フィールドの説明と型
- フック固有の出力フィールド
- 各イベントの JSON の例
動作する例: references/examples.md
- デスクトップ通知
- コマンドの検証
- 自動フォーマットのワークフロー
- ログ記録と監査証跡
- 停止ロジックのパターン
- セッションコンテキストの注入
トラブルシューティング: references/troubleshooting.md
- フックが発火しない
- コマンド実行の失敗
- プロンプトフックの問題
- 権限の問題
- タイムアウトの処理
- デバッグワークフロー </reference_guides>
<security_checklist> 重要な安全要件:
- 無限ループの防止: Stop フックで
stop_hook_activeフラグを確認し、再帰的な発火を防ぎます - タイムアウトの設定: ハングを防ぐために適切なタイムアウトを設定します(デフォルト: 60秒)
- 権限の検証: フックスクリプトに実行権限があることを確認します(
chmod +x) - パスの安全性: パスインジェクションを避けるために
$CLAUDE_PROJECT_DIRを付けた絶対パスを使用します - JSON の検証: 構文エラーを検出するために、使用前に
jqでフック設定を検証します - 選択的なブロッキング: ワークフローの中断を避けるために、ブロッキングフックは慎重に使用します
テストプロトコル:
# Always test with debug flag first
claude --debug
# Validate JSON config
jq . .claude/hooks.json
</security_checklist>
<success_criteria> 動作するフック設定には以下が含まれます:
.claude/hooks.json内の有効な JSON(jqで検証済み)- ユースケースに適したフックイベントの選択
- 対象のツールに一致する正しいマッチャーパターン
- エラーなく実行されるコマンドまたはプロンプト
- 適切な出力スキーマ(ブロッキングフックの decision/reason)
- 期待どおりの動作を示す
--debugフラグでのテスト - Stop フックに無限ループがないこと(
stop_hook_activeフラグを確認) - 適切なタイムアウトの設定(特に外部コマンドの場合)
- ファイルパスを使用する場合のスクリプトファイルの実行権限 </success_criteria>