• #claude-code
  • #hooks
  • #windows

Claude Code の通知 Hooks 設定

複数の Claude Code セッションを並行実行しているとき、どのセッションが入力待ちかを把握するのは難しい。本記事では、Hooks 機能を使ってビープ音で通知することで、この問題を解決する方法を説明する。

設定ファイルの場所

~/.claude/settings.json

Windows の場合:

C:\Users\{ユーザー名}\.claude\settings.json

全体設定

{
  "model": "opus",
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "TodoWrite",
        "hooks": [
          {
            "type": "command",
            "command": "powershell.exe -Command \"[console]::beep(600, 100)\""
          }
        ]
      }
    ],
    "Stop": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "powershell.exe -Command \"[console]::beep(1000, 500); [console]::beep(1200, 500); [console]::beep(1500, 500)\""
          }
        ]
      }
    ],
    "PostToolUse": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "powershell.exe -Command \"[console]::beep(800, 200)\""
          }
        ]
      }
    ],
    "SubagentStop": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "powershell.exe -Command \"[console]::beep(1200, 100); [console]::beep(1200, 100); [console]::beep(1200, 100)\""
          }
        ]
      }
    ],
    "Notification": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "powershell.exe -Command \"[console]::beep(2000, 150); [console]::beep(2000, 150)\""
          }
        ]
      }
    ]
  }
}

各 Hook の説明

Hookタイミング音の特徴
PreToolUseツール実行前(TodoWrite のみ)低め 600Hz × 1回
PostToolUseツール実行後中程度 800Hz × 1回
StopClaude の処理完了時上昇音 1000→1200→1500Hz
SubagentStopサブエージェント完了時1200Hz × 3回
Notification入力待ち通知高め 2000Hz × 2回

重要:Notification Hook

Notification Hook が入力待ち通知の鍵。これを設定することで、Claude が入力を求めているときにビープ音が鳴る。

複数タブで Claude を並行実行しているとき、どのタブが入力待ちかすぐにわかるようになる。

"Notification": [
  {
    "matcher": "",
    "hooks": [
      {
        "type": "command",
        "command": "powershell.exe -Command \"[console]::beep(2000, 150); [console]::beep(2000, 150)\""
      }
    ]
  }
]

beep コマンドの書式

[console]::beep(周波数Hz, 継続時間ms)
  • 周波数:37〜32767 Hz(人間の可聴域は約20〜20000Hz)
  • 継続時間:ミリ秒単位

音の使い分け例

用途周波数印象
注意喚起2000Hz高くて目立つ
完了通知1000-1500Hz心地よい
軽い通知600-800Hz控えめ

Windows Terminal との組み合わせ

Windows Terminal の「ベル通知スタイル」設定と組み合わせることもできるが、Claude Code が BEL 文字を出力しないため、Hooks を使う方が確実

設定場所:Windows Terminal → 設定 → プロファイル → 詳細設定 → ベル通知スタイル

ベル通知スタイルの選択肢

  • 音によるチャイム: ビープ音を鳴らす
  • フラッシュ ウィンドウ: ウィンドウがフラッシュする
  • フラッシュ タスク バー: タスクバーがフラッシュする

※ただしこれは BEL 文字が出力されたときのみ動作する。Claude Code は BEL を出力しないため、Hooks での通知が推奨される。

注意:beep 音だけではどのタブかわからない

[console]::beep() はシステム全体で音が鳴るため、どのタブが入力待ちかは区別できない

音が鳴ったら各タブを確認する必要がある。これを解決するには ペイン分割 が有効。

Windows Terminal でのペイン分割(推奨)

複数の Claude を一画面で表示すれば、どれが入力待ちか一目でわかる。

ペイン分割のショートカット

ショートカット動作
Alt+Shift+D現在のペインを自動分割
Alt+Shift+-水平分割(上下)
Alt+Shift++垂直分割(左右)
Alt+矢印キーペイン間を移動
Ctrl+Shift+W現在のペインを閉じる

運用例

  1. Windows Terminal を開く
  2. Alt+Shift+D で分割(2つ目のペイン)
  3. さらに Alt+Shift+D で分割(3つ目)
  4. 各ペインで claude を起動
  5. 音が鳴ったら、どのペインが入力待ちか一目でわかる

カスタムプロファイルの設定

Windows Terminal の settings.json に以下を追加すると、Claude 専用プロファイルを作成できる:

{
  "profiles": {
    "list": [
      {
        "name": "Claude 1",
        "commandline": "cmd /c \"title Claude 1 && claude\"",
        "bellStyle": ["window", "taskbar"]
      },
      {
        "name": "Claude 2",
        "commandline": "cmd /c \"title Claude 2 && claude\"",
        "bellStyle": ["window", "taskbar"]
      }
    ]
  }
}

settings.json の場所:Ctrl+Shift+, で開く、または設定画面左下の「JSON ファイルを開く」

まとめ

方法利点欠点
Hooks(推奨)確実に動作、細かくカスタマイズ可能設定が必要
Windows Terminal ベルOS 標準機能Claude が BEL を出力しない

結論:Hooks の Notification を設定するのが最も確実な方法。