WSL2のClaude Codeでユーザー操作が必要な時にWindows通知を受け取る
はじめに
Claude CodeをWindows上で直接使っていたんだけど、パスの扱いやシェルの違いなど色々と困ることがあってWSL2で使うことにした。せっかくなのでゼロから環境をセットアップしてる。
タスク実行中に別の作業をしていると、Claudeから確認を求められたら通知してほしいしタスクが終わったら教えてほしい。ので作った。
車輪の再発明かもしれないけど、Zennに置いておく。
この記事では、Claude Codeのhooks機能を使って、ユーザー操作が必要な時にWindowsのトースト通知を受け取る仕組みを作る。
Claude Codeに実装をまかせたければ、この記事のURLと合わせて以下のようなプロンプトでお願いすればいい感じにやってくれるはず。
Claude Codeのhooks機能を使って、ユーザー操作が必要な時にWindowsのトースト通知を受け取る仕組みを構築してください。以下記事を参考にしてください
https://zenn.dev/articles/361b3ee42f34e3/
完成イメージ
以下のタイミングでWindows通知が届くようになる。
| タイミング | 通知メッセージ |
|---|---|
| 許可確認時 (Bash/Edit/Write等) | 「許可が必要です」 |
| Claudeからの質問時 | 「質問に回答してください」 |
| タスク完了時 | 「タスクが完了しました」 |
前提条件
- WSL2 Ubuntu
- Claude Code
- PowerShell 7 (pwsh)
セットアップ手順
1. BurntToastモジュールのインストール
Windows側でPowerShell 7を管理者として開き、以下を実行する。
Install-Module -Name BurntToast -Force -Scope CurrentUser
BurntToastはPowerShellからWindowsのトースト通知を簡単に送信できるモジュールだ。
2. 通知スクリプトの作成
WSL2側でスクリプト用ディレクトリを作成する。
mkdir -p ~/.claude/scripts
以下の内容で ~/.claude/scripts/notify.sh を作成する。
#!/bin/bash
# Claude Code Windows Notification Script
# BurntToast + PowerShell 7を使用してWindows Toast通知を送信
TYPE="${1:-info}"
MESSAGE="${2:-Claude Code}"
case "$TYPE" in
"permission") TITLE="Claude Code - 許可が必要です" ;;
"idle") TITLE="Claude Code - 入力待ち" ;;
"complete") TITLE="Claude Code - 完了" ;;
*) TITLE="Claude Code" ;;
esac
# PowerShell 7 + BurntToastでWindows Toast通知を送信
"/mnt/c/Program Files/PowerShell/7/pwsh.exe" -NoProfile -Command "New-BurntToastNotification -Text '$TITLE', '$MESSAGE'" 2>/dev/null &
exit 0
実行権限を付与する。
chmod +x ~/.claude/scripts/notify.sh
3. Claude Codeのhooks設定
~/.claude/settings.json に以下の hooks セクションを追加する。
{
"hooks": {
"PermissionRequest": [
{
"matcher": "AskUserQuestion",
"hooks": [{ "type": "command", "command": "~/.claude/scripts/notify.sh idle '質問に回答してください'" }]
},
{
"matcher": "Bash|Edit|Write|NotebookEdit",
"hooks": [{ "type": "command", "command": "~/.claude/scripts/notify.sh permission '許可が必要です'" }]
}
],
"Stop": [
{
"hooks": [{ "type": "command", "command": "~/.claude/scripts/notify.sh complete 'タスクが完了しました'" }]
}
]
}
}
hooksの解説
| イベント | matcher | 説明 |
|---|---|---|
PermissionRequest |
AskUserQuestion |
Claudeがユーザーに質問する時 |
PermissionRequest |
Bash|Edit|Write|NotebookEdit |
ツール実行の許可確認時 |
Stop |
- | Claudeの応答が完了した時 |
動作確認
通知スクリプト単体テスト
~/.claude/scripts/notify.sh complete "テスト通知"
Windowsに通知が表示されれば成功だ。
Claude Code統合テスト
Claude Codeを再起動して、以下を試してみよう。
許可確認テスト:
/tmp/test.txt を作成して
質問テスト:
好きな色を質問して
ファイル構成
~/.claude/
├── settings.json # hooks設定を含む
└── scripts/
└── notify.sh # 通知スクリプト
トラブルシューティング
通知が表示されない
Windowsの通知設定を確認
- 設定 → システム → 通知 が有効になっているか確認しよう
- 集中モードがオフになっているか確認しよう
hooksが動作しない
-
settings.jsonのJSON構文が正しいか確認しよう - Claude Codeを再起動したか確認しよう
まとめ
Claude Codeのhooks機能を使うことで、WSL2環境でもWindowsネイティブの通知を受け取れるようになった。これで長時間タスクを実行しながら、安心して別の作業ができる。
必要最小限しか実装してないから武骨な通知だけどなっ
Discussion