🔔
WSL2環境でClaude Codeの作業完了時に通知センターから通知を鳴らす
はじめに
こんにちは。なごみんと申します。
先日、Claude CodeのHooks機能がリリースされました。Hooksは特定のイベントでカスタムコマンドを自動実行できる機能です。
今回は、WSL2環境でClaude Codeを使用した際、Windowsの通知センターで作業完了通知を受け取るようにしたいと思います。
前提条件
- Windows 10/11
- WSL2がインストール済み
- Claude Codeがインストール済み(v1.0.38以上)
設定手順
Claude Code起動後、/hooksコマンドを実行することでhooksを設定できます。
- Claude Codeのチャット画面で以下のコマンドを入力:
/hooks
-
hooks設定画面が表示されるので、以下の設定を行います:
-
Event:
Stop
を選択
-
Command: 以下のPowerShellコマンドを入力
powershell.exe -ExecutionPolicy Bypass -Command "Add-Type -AssemblyName System.Windows.Forms; \$n = New-Object System.Windows.Forms.NotifyIcon; \$n.Icon = [System.Drawing.SystemIcons]::Information; \$n.BalloonTipIcon = 'Info'; \$n.BalloonTipTitle = 'Claude Code'; \$n.BalloonTipText = '作業が完了しました'; \$n.Visible = \$true; \$n.ShowBalloonTip(5000); (New-Object System.Media.SoundPlayer 'C:\Windows\Media\notify.wav').PlaySync(); Start-Sleep -Seconds 6; \$n.Dispose()"
-
Event:
-
設定をどこに保存するか聞かれます。
- Project settings (local) - プロジェクト内設定、Gitにコミットされない個人設定(Claude Codeが自動で.gitignoreに追加したりする)
- Project settings - プロジェクト内設定、Gitにコミットされチームで共有
- User settings - 全プロジェクトで適用される個人設定
今回はProject settings (local)を選択します。
- 設定を保存すると
.claude/settings.local.json
にHookの処理内容が追加されます。
もちろん /hooks を使用せず設定ファイルを直接編集することも可能です。
設定内容の詳細
今回のStopイベントでやってること
- 通知アイコンの作成
Add-Type -AssemblyName System.Windows.Forms
$n = New-Object System.Windows.Forms.NotifyIcon
- 通知内容の設定
$n.BalloonTipTitle = 'Claude Code'
$n.BalloonTipText = '作業が完了しました'
- 音声の再生
(New-Object System.Media.SoundPlayer 'C:\Windows\Media\notify.wav').PlaySync()
利用可能な音声ファイル
Windows標準の音声ファイルはC:\Windows\Media\に格納されています
- notify.wav
- chimes.wav
- chord.wav
- ding.wav
- Alarm01.wav~Alarm10.wav
動作確認
- Claude Codeで任意のタスクを実行
- タスク完了時に以下が発生することを確認
- Windowsの通知トレイに通知が表示される
- 指定した音声ファイルが再生される
ちゃんと通知センターで教えてくれましたね!
トラブルシューティング
音が鳴らない場合
- PowerShellの実行ポリシーを確認
- 音声ファイルのパスが正しいか確認
通知が表示されない場合
- Windowsの通知設定を確認
- フォーカスアシスト(集中モード)がオフになっているか確認
hooks機能が動作しない場合
- Claude Codeのバージョンが1.0.38以降であることを確認
- settings.jsonのJSON構文が正しいか確認(特にmatcherフィールドの存在)
- 60秒のタイムアウト制限があるので注意
まとめ
Claude Codeのhooks機能を使用することで、WSL2環境でもWindows側の通知機能を活用できます。今までMCPやらプロンプトで通知するようにしてましたが、Hooksは確実に処理されるのがいいですね。
通知を鳴らす以外にもPreToolUseやPostToolUseイベントに処理を入れることでClaude Codeが暴走しないようにガードレールを作ることが出来ますので、どんどん活用したいですね。
Discussion