🔔

WSL2環境でClaude Codeの作業完了時に通知センターから通知を鳴らす

に公開

はじめに

こんにちは。なごみんと申します。
先日、Claude CodeのHooks機能がリリースされました。Hooksは特定のイベントでカスタムコマンドを自動実行できる機能です。
今回は、WSL2環境でClaude Codeを使用した際、Windowsの通知センターで作業完了通知を受け取るようにしたいと思います。

前提条件

  • Windows 10/11
  • WSL2がインストール済み
  • Claude Codeがインストール済み(v1.0.38以上)

設定手順

Claude Code起動後、/hooksコマンドを実行することでhooksを設定できます。

  1. Claude Codeのチャット画面で以下のコマンドを入力:
/hooks

  1. 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()"
    
  2. 設定をどこに保存するか聞かれます。

  • Project settings (local) - プロジェクト内設定、Gitにコミットされない個人設定(Claude Codeが自動で.gitignoreに追加したりする)
  • Project settings - プロジェクト内設定、Gitにコミットされチームで共有
  • User settings - 全プロジェクトで適用される個人設定

今回はProject settings (local)を選択します。

  1. 設定を保存すると.claude/settings.local.jsonにHookの処理内容が追加されます。

    もちろん /hooks を使用せず設定ファイルを直接編集することも可能です。

設定内容の詳細

今回のStopイベントでやってること

  1. 通知アイコンの作成
Add-Type -AssemblyName System.Windows.Forms
$n = New-Object System.Windows.Forms.NotifyIcon
  1. 通知内容の設定
$n.BalloonTipTitle = 'Claude Code'
$n.BalloonTipText = '作業が完了しました'
  1. 音声の再生
(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

動作確認

  1. Claude Codeで任意のタスクを実行
  2. タスク完了時に以下が発生することを確認
    • 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