🔔

WSL2のClaude Codeでユーザー操作が必要な時にWindows通知を受け取る

に公開
2026/02/05

はじめに

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 を作成する。

~/.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 セクションを追加する。

~/.claude/settings.json
{
  "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