CC逆引きリファレンス

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 が実行するコマンドを記録したい時
  • セキュリティ監査のため
  • トラブルシューティングのため
  • チームで作業履歴を共有したい時

使い方

  1. 1PreToolUse イベントに Bash マッチャーを設定
  2. 2$CLAUDE_TOOL_INPUT でコマンド入力を取得
  3. 3$CLAUDE_TOOL_NAME でツール名を取得
  4. 4JSONL 形式で記録すると後から解析しやすい

Tips

  • $CLAUDE_TOOL_INPUT は JSON 形式で渡される
  • 日付ごとにファイルを分けるとログ管理が楽
  • 機密情報がログに残らないよう注意
  • jq コマンドで JSON を解析して必要な部分だけ記録も可能