ツール実行前にフックしたい
10. フックコマンド / 機能
PreToolUse事前処理
概要
ツール(Bash、Write、Edit など)が実行される直前に呼び出されます。exit 0 で許可、exit 2 でブロック(エラー表示あり)、それ以外はエラーとして扱われます。
設定例
// settings.json
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "echo \"[$(date '+%Y-%m-%d %H:%M:%S')] Bash: $CLAUDE_TOOL_INPUT\" >> ~/.claude/commands.log"
}
]
},
{
"matcher": "Bash(rm -rf*)",
"hooks": [
{
"type": "command",
"command": "echo 'rm -rf は禁止されています' && exit 2"
}
]
},
{
"matcher": "Write",
"hooks": [
{
"type": "command",
"command": "echo \"書き込み対象: $CLAUDE_FILE_PATH\" >> ~/.claude/writes.log"
}
]
}
]
}
}こんな時に使う
- 実行前にチェックを入れたい時
- 危険な操作をブロックしたい時
- 操作をログに記録したい時
- 特定のファイルへのアクセスを制限したい時
使い方
- 1PreToolUse イベントにフック定義を追加
- 2matcher でツール名を指定(Bash、Write、Edit、Read など)
- 3ブロックしたい場合は exit 2 を返す
- 4環境変数 $CLAUDE_TOOL_INPUT でツール入力を取得
Tips
- exit 0: 許可して続行
- exit 2: ブロックしてエラーメッセージを Claude に表示
- stdout への出力は Claude にフィードバックされる
- 複数の matcher を設定すると、マッチした全てのフックが実行される