Bash コマンドをログしたい
10. フックコマンド / 機能
PreToolUse + Bash概要
Bash ツール実行前にコマンドをログに記録する設定例です。環境変数 $CLAUDE_TOOL_INPUT からコマンド内容を JSON 形式で取得できます。
設定例
// settings.json
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "echo \"[$(date '+%Y-%m-%d %H:%M:%S')] $CLAUDE_TOOL_INPUT\" >> ~/.claude/bash.log"
}
]
}
]
}
}
// より詳細なログを JSON 形式で記録
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "echo '{\"timestamp\": \"'$(date -Iseconds)'\", \"tool\": \"'$CLAUDE_TOOL_NAME'\", \"input\": '$CLAUDE_TOOL_INPUT'}' >> ~/.claude/audit.jsonl"
}
]
}
]
}
}
// ログローテーションを含む例
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "LOG=~/.claude/bash-$(date +%Y%m%d).log && echo \"[$(date '+%H:%M:%S')] $CLAUDE_TOOL_INPUT\" >> \"$LOG\""
}
]
}
]
}
}こんな時に使う
- Claude が実行するコマンドを記録したい時
- セキュリティ監査のため
- トラブルシューティングのため
- チームで作業履歴を共有したい時
使い方
- 1PreToolUse イベントに Bash マッチャーを設定
- 2$CLAUDE_TOOL_INPUT でコマンド入力を取得
- 3$CLAUDE_TOOL_NAME でツール名を取得
- 4JSONL 形式で記録すると後から解析しやすい
Tips
- $CLAUDE_TOOL_INPUT は JSON 形式で渡される
- 日付ごとにファイルを分けるとログ管理が楽
- 機密情報がログに残らないよう注意
- jq コマンドで JSON を解析して必要な部分だけ記録も可能