Claude Code には「フック」と呼ばれる機能があり、特定のイベント発生時に外部のスクリプトやコマンドを自動実行できる。これにより、Claude Code の動作を拡張・カスタマイズすることが可能。
Claude Code では以下のフック種類が利用できる:
- PreToolUse: ツール実行前に発火
- PostToolUse: ツール実行後に発火
- UserPromptSubmit: ユーザーがプロンプトを送信した際に発火
- Notification: 通知発生時に発火 ★今回のターゲット
- Stop/SubagentStop: メインエージェントまたはサブエージェントの応答終了時に発火
Notification フックは以下の2つのシナリオで発火する:
- ツール使用許可待ち: Claude がツール使用許可を求める際(例:「Claude needs your permission to use Bash」)
- ユーザー入力待ち: プロンプト入力が60秒以上アイドル状態の際(例:「Claude is waiting for your input」)
フックスクリプトは標準入力(stdin)経由でJSON形式のデータを受信する:
{
"session_id": "abc123",
"transcript_path": "/path/to/transcript.jsonl",
"cwd": "/current/working/directory",
"hook_event_name": "Notification",
"message": "Claude is waiting for your input"
}CLAUDE_PROJECT_DIR: プロジェクトルートディレクトリの絶対パスCLAUDE_NOTIFICATION: 通知メッセージの内容(Notificationフック専用)
フックの設定は ~/.claude/settings.json ファイルで行う:
{
"hooks": {
"Notification": [
{
"hooks": [
{
"type": "command",
"command": "C:\\path\\to\\notifier.exe"
}
]
}
]
}
}今回作成するアプリケーションは:
- 入力: 標準入力からJSONデータを受信
- 処理: session_idとmessageを解析し、通知内容を決定
- 出力: Windows SAPI5を使用して音声通知を実行
フックは任意のシェルコマンドを実行するため、設定時は十分注意が必要。信頼できないコマンドの実行は避けること。
- Claude Code 公式ドキュメント: https://docs.anthropic.com/en/docs/claude-code/hooks
- 通知は最低60秒のアイドル時間後に「Claude is waiting for your input」メッセージで発火
- フックスクリプトは同期的に実行されるため、長時間の処理は避けるべき