2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

WSL2でも、Claude Codeで通知音を鳴らしたい

Last updated at Posted at 2025-07-01

WSL2環境でClaude Codeを使っている開発者の皆さん、タスク完了時の通知音が鳴らなくて困っていませんか?本記事では、WSL2でのサウンド再生設定からClaude CodeのHooks機能を使った通知音設定まで、ガイドをお届けします。

注意: 本記事で使用する音源は、フリー音源サイトなどから入手してください。著作権に配慮した適切な音源をご利用ください。

1. 対象読者

  • WSL2 でClaude Codeを使っている開発者
  • Claude Codeのタスク完了時に音で通知を受け取りたい人
  • libasound_module_pcm_pulse.so が無い」と言われて困っている人
  • CLI だけで効果音・通知音を鳴らしたい人

WSL (Microsoft Store 版) を想定しています。
ディストリは Ubuntu/Debian 系で検証しましたが、他系統でも手順はほぼ同じです。

2. ゴール

Claude CodeのHooks機能を使って、以下のような通知音再生を実現します:

方法 対象 コマンド例 用途
WSLg 経由 WAV aplay notify.wav タスク完了通知
MP3 ffplay -nodisp -autoexit music.mp3 長時間タスク完了

3. WSL2でのサウンド再生環境構築

3-1. WSLg が使える環境(Windows 11 / Store 版 WSL)

必要パッケージのインストール

sudo apt update
sudo apt install alsa-utils ffmpeg libasound2-plugins libpulse0
  • alsa-utilsaplay が入る
  • ffmpegffplay で MP3/OGG など再生
  • libasound2-plugins + libpulse0 … ALSA → PulseAudio ブリッジ

ALSA を PulseAudio に向ける設定

~/.asoundrc を新規作成(全ユーザ共通なら /etc/asound.conf):

pcm.!default {
    type pulse
    fallback "sysdefault"
}
ctl.!default {
    type pulse
}

再生テスト

# WAV
aplay ~/sounds/notify.wav

# MP3
ffplay -nodisp -autoexit ~/sounds/notify.mp3

-nodisp -autoexit を付けるとコンソール専用&再生後に自動終了します。
もっと軽い MP3 プレイヤーが欲しければ sudo apt install mpg123 でも OK。

4. Claude Code hooks機能による通知音設定

4-1. hooks機能とは

Claude Code v.1.0.38で追加されたhooks機能は、Claude Codeのライフサイクルの特定のタイミングで自動実行されるユーザー定義のシェルコマンドです。

4つのイベントタイプがあります:

  • PreToolUse: ツール実行前
  • PostToolUse: ツール実行後
  • Notification: 通知送信時
  • Stop: 応答終了時

4-2. 通知音用のサウンドファイルを準備

まず、通知音用のサウンドファイルを準備します:

# サウンドファイル用ディレクトリを作成
mkdir -p ~/sounds

# フリー音源サイトから通知音をダウンロードし、~/sounds にコピー

# または、Windows側のサウンドファイルを使用
cp /mnt/c/Windows/Media/Windows\ Notify\ System\ Generic.wav ~/sounds/notify.wav

4-3. Claude Code hooksの設定方法

プロジェクト固有設定にするなど、お好みに合わせて設定してください。

方法1: /hooksコマンドを使用(推奨)

  1. Claude Codeセッション内で /hooks コマンドを実行
  2. 4. Stop イベントを選択(タスク完了時に通知)
  3. + Add new matcher… で空のマッチャーを追加(全てのStopイベントに対応)
  4. + Add new hook… で以下のコマンドを追加:

WSLg環境の場合:

aplay ~/sounds/notify.wav > /dev/null 2>&1 || echo "通知音の再生に失敗しました"
  1. 保存場所を User settings に設定(全プロジェクトで使用)

方法2: 設定ファイルに直接記述

~/.claude/settings.json に以下を追加:

{
  "hooks": {
    "Stop": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "aplay ~/sounds/notify.wav > /dev/null 2>&1 || echo '通知音の再生に失敗しました'"
          }
        ]
      }
    ]
  }
}

4-4. 高度な通知設定

Notification イベントでの通知

Claude Codeが許可を求める際にも音を鳴らしたい場合:

{
  "hooks": {
    "Notification": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "aplay ~/sounds/attention.wav > /dev/null 2>&1"
          }
        ]
      }
    ],
    "Stop": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "aplay ~/sounds/notify.wav > /dev/null 2>&1"
          }
        ]
      }
    ]
  }
}

4-5. 設定の確認とテスト

設定が正しく適用されているか確認:

# 設定確認
cat ~/.claude/settings.json

# Claude Code内で確認
/hooks

テスト実行:

# 簡単なタスクを実行して通知音をテスト
echo "Hello, World!" > test.txt

5. トラブルシューティング

5-1. libasound_module_pcm_pulse.so が見つからない

aplay: audio open error: No such device or address

原因
libasound2-plugins が消えて ALSA → PulseAudio ブリッジが失われている。

復旧コマンド

sudo apt update
sudo apt install --reinstall libasound2-plugins libpulse0

sudo apt autoremove 後に再発することがあるので、削除候補に入っていないか確認しましょう。

5-2. hooksが実行されない

  1. 設定ファイルの確認

    # JSON形式が正しいか確認
    python3 -m json.tool ~/.claude/settings.json
    
  2. Claude Codeの再起動

    # 設定変更後は必ず再起動
    /exit
    claude
    

5-3. 音が途切れる・出ない

wsl --shutdown   # PowerShell (管理者)
wsl              # 再起動

WSLg/Audio ブリッジをリセットすると直ることが多いです。

5-4. MP3 を aplay で渡しても無音

aplay非圧縮 PCM 専用。MP3/OGG などは ffplaympg123 を使用。

6. 便利 Tips

6-1. 音量調整

# 音量を50%に調整して再生
aplay -D pulse ~/sounds/notify.wav
amixer set Master 50%

# または、ffplayで音量指定
ffplay -nodisp -autoexit -volume 30 ~/sounds/notify.mp3

6-2. 複数の通知音を使い分け

# 通知音用ディレクトリ構成
~/sounds/
├── notify.wav          # 一般的なタスク完了
├── success.wav         # 成功
├── error.wav           # エラー
├── attention.wav       # 注意・許可要求
└── long_task.wav       # 長時間タスク完了

7. まとめ

  1. WSL2サウンド環境alsa-utils + libasound2-plugins.wav / .mp3 再生可能
  2. Claude Code hooks → Stop/Notificationイベントで通知音自動再生
  3. 設定方法/hooks コマンドまたは settings.json 直接編集
  4. カスタマイズ → 通知タイプ別の音の使い分けも可能

これでWSL2環境でもClaude Codeのタスク完了を音で知ることができます。長時間のタスクでも画面に張り付く必要がなくなり、開発効率が大幅に向上するはずです!

お疲れさまでした!🎵

参考リンク

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?