🔊

Claude Code Hooksでずんだもん音声案内【VOICEVOX不要】

に公開

💡 VOICEVOX不要でずんだもん音声通知

Claude Code Hooksを使って、ずんだもんの声でタスク完了等をお知らせしてくれます。

setup.shで簡単導入カスタム音声生成にも対応しています。

💡 なぜVOICEVOXインストール不要

音声ファイルを事前生成してパッケージに同梱しているからです。

  • 音声生成:VOICEVOXで事前に作成済
  • 音声再生:Claude Code Hooksで再生(実行時)

メリット

  • VOICEVOXのインストール不要
  • 高速で安定した動作

カスタム音声生成

  • VOICEVOXインストールが必要になりますが、通知の際の読み上げ内容をカスタムすることも可能です。

📋 必要な環境

# 必要な環境
- WSL2 (Ubuntu 20.04以上)
- Claude Code
- PowerShell(音声再生用)

🚀 簡単導入

細かいツールの仕様方法はこちらから

この設計により、わずか数コマンドで導入できます:

# リポジトリをクローン
git clone https://github.com/masaway/claudecode-zundamon-voice.git
cd claudecode-zundamon-voice/zundamon-hooks-package

# 実行権限を付与してセットアップ
chmod +x *.sh
./setup.sh

setup.shが自動で行うこと

  • 音声ファイルの配置(/mnt/c/temp/voice/
  • Hooksスクリプトの配置(~/.claude/hooks-scripts/
  • Claude Code設定の更新(~/.claude/settings.json

これで、Claude Codeがずんだもんの声で案内してくれるようになります!

音声が聞こえない場合

基本的には自動設定で動作しますが、うまくいかない場合は以下を確認:

1. hooks設定確認

Claude Codeで以下を実行して現在の設定を確認:

/hooks

PreToolUseNotificationStopの設定が表示されれば正常です。

2. 手動hooks登録(自動設定が反映されない場合)

上記で設定が表示されない場合、手動登録を試してください:

/hooks

その後、 hooks-template.json を参考に設定してください。

3. Claude Codeをデバッグモードで起動する

$ claude --debug --continue

これでhooks設定したものがmatchしているかが見れます。

🎯 この記事で分かること

Claude Code Hooksを使った音声システムの構成と実装方法について解説します:

  • システム構成: Claude Code → Hooks → 音声再生の流れ
  • ファイル構成: スクリプトや設定ファイルの役割と配置
  • WSL2での音声再生: PowerShellを使った実装アプローチ
  • 自動セットアップ: パッケージとしての配布方法
  • カスタマイズ方法: 音声メッセージや設定の変更手順

🚀 完成したパッケージの特徴

細かいツールの仕様方法はこちら

主な機能

  • ツール実行前の確認音声: 「実行許可を求めている」
  • 通知音声: 「クロードコードが呼んでいるのだ」
  • タスク完了音声: 「タスクが完了したのだ」
  • カスタム音声生成: 好きなメッセージで音声を作成可能

技術的な特徴

  • 即座に使用可能: 音声ファイル付きでVOICEVOX不要
  • WSL2対応: PowerShellを使った音声再生
  • 自動設定: Claude Code設定の自動更新
  • カスタマイズ可能: 音声メッセージや使用キャラクターの変更

🔧 システム構成

アーキテクチャ概要

┌─────────────────┐    ┌─────────────────┐    ┌─────────────────┐
│   Claude Code   │───▶│   Hooks System  │───▶│   音声再生      │
│                 │    │                 │    │                 │
│ - Tool実行      │    │ - PreToolUse    │    │ - PowerShell    │
│ - 通知          │    │ - Notification  │    │ - 音声ファイル  │
│ - タスク完了    │    │ - Stop          │    │ - ずんだもん    │
└─────────────────┘    └─────────────────┘    └─────────────────┘

ファイル構成

zundamon-hooks-package/
├── setup.sh              # メインセットアップスクリプト
├── hooks-scripts/         # Hooks実行用スクリプト
│   ├── PreToolUse.sh     # ツール実行前音声
│   ├── Notification.sh   # 通知音声
│   ├── Stop.sh           # タスク完了音声
│   ├── play-voice.sh     # 音声再生共通スクリプト
│   └── voice-config.json # 音声設定ファイル
├── voices/               # プリビルド音声ファイル
│   ├── notification.wav
│   └── task_completion.wav
└── generate-voices.sh    # カスタム音声生成ツール

🎵 音声システムの実装

1. WSL2での音声再生

WSL2から Windows の音声を再生する仕組みを実装しました:

# play-voice.sh の核心部分
#!/bin/bash

# 音声設定ファイルから設定を読み込み
VOICE_CONFIG="$HOME/.claude/hooks-scripts/voice-config.json"
VOICE_DIR=$(jq -r '.voice_dir // "/mnt/c/temp/voice"' "$VOICE_CONFIG" 2>/dev/null)

play_voice() {
    local voice_file="$1"
    local full_path="$VOICE_DIR/$voice_file"
    
    if [ -f "$full_path" ]; then
        # WSL2パスをWindowsパスに変換
        local win_path=$(echo "$full_path" | sed 's|/mnt/c|C:|')
        
        # PowerShellで音声再生
        powershell.exe -Command "
            try {
                \$sound = New-Object Media.SoundPlayer '$win_path'
                \$sound.PlaySync()
            } catch {
                Write-Error \"音声再生エラー: \$_\"
            }
        " 2>/dev/null
    fi
}

2. 設定ファイルによる柔軟な音声管理

JSON設定ファイルで音声の割り当てを管理:

{
  "voice_mappings": {
    "PreToolUse": "notification.wav",
    "Notification": "notification.wav",
    "Stop": "task_completion.wav"
  },
  "voice_dir": "/mnt/c/temp/voice"
}

3. Hooks統合スクリプト

各Hookで呼び出される専用スクリプト:

# PreToolUse.sh
#!/bin/bash
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$SCRIPT_DIR/play-voice.sh"

# 設定ファイルから音声ファイルを取得
VOICE_FILE=$(get_voice_file "PreToolUse")
play_voice "$VOICE_FILE"

🛠️ 自動セットアップシステム

setup.sh の主要機能

# Claude Code設定の自動更新
update_claude_settings() {
    local settings_file="$HOME/.claude/settings.json"
    local backup_file="$settings_file.backup.$(date +%Y%m%d_%H%M%S)"
    
    # 既存設定をバックアップ
    cp "$settings_file" "$backup_file"
    
    # Hooks設定をマージ
    jq --slurpfile hooks_config hooks-template.json \
       '.hooks = ($hooks_config[0].hooks)' \
       "$settings_file" > "$settings_file.tmp"
    
    mv "$settings_file.tmp" "$settings_file"
    echo "✅ Claude Code設定を更新しました"
}

# スクリプトファイルの配置
install_hooks_scripts() {
    local target_dir="$HOME/.claude/hooks-scripts"
    mkdir -p "$target_dir"
    
    # 実行権限付きでコピー
    cp -r hooks-scripts/* "$target_dir/"
    chmod +x "$target_dir"/*.sh
    
    echo "✅ Hooksスクリプトを配置しました"
}

🎨 カスタム音声生成システム

VOICEVOX連携

# generate-voices.sh での音声生成
generate_voice() {
    local text="$1"
    local filename="$2"
    local speaker_id="${3:-1}"  # デフォルト: ずんだもん
    
    # 音声クエリ生成
    local query=$(curl -s -X POST \
        "$VOICEVOX_URL/audio_query" \
        -H "Content-Type: application/json" \
        -d "{\"text\":\"$text\",\"speaker\":$speaker_id}")
    
    # 音声合成
    curl -s -X POST \
        "$VOICEVOX_URL/synthesis" \
        -H "Content-Type: application/json" \
        -d "$query" \
        -o "$VOICE_DIR/$filename.wav"
}

対話式音声生成

# 対話モードでの音声生成
interactive_voice_generation() {
    echo "🎤 対話式音声生成モード"
    
    while true; do
        echo ""
        read -p "📝 生成したいテキストを入力してください(終了: quit): " text
        
        if [ "$text" = "quit" ]; then
            break
        fi
        
        read -p "💾 保存ファイル名を入力してください(.wav不要): " filename
        
        echo "🔊 音声を生成中..."
        generate_voice "$text" "$filename"
        
        echo "✅ 音声ファイルを生成しました: $filename.wav"
    done
}

📦 配布パッケージの工夫

1. プリビルド音声ファイル

ユーザーがVOICEVOXを用意しなくても即座に使用できるよう、基本的な音声ファイルを事前生成して同梱:

# プリビルド音声の生成
declare -A VOICE_MESSAGES=(
    ["notification"]="クロードコードが呼んでいるのだ"
    ["task_completion"]="タスクが完了したのだ"
)

for key in "${!VOICE_MESSAGES[@]}"; do
    generate_voice "${VOICE_MESSAGES[$key]}" "$key"
done

2. 段階的セットアップ

# セットアップの段階的実行
main() {
    echo "🚀 Claude Code ずんだもんHooks セットアップ"
    
    # 1. 環境チェック
    check_requirements
    
    # 2. 音声ファイル配置
    setup_voice_files
    
    # 3. Hooksスクリプト配置
    install_hooks_scripts
    
    # 4. Claude Code設定更新
    update_claude_settings
    
    # 5. 動作確認
    if [ "$RUN_TEST" = true ]; then
        run_tests
    fi
    
    echo "✅ セットアップが完了しました!"
}

🔍 動作確認方法

セットアップ後の確認

# 音声ファイルの確認
ls -la /mnt/c/temp/voice/*.wav

# Hooksスクリプトの確認
ls -la ~/.claude/hooks-scripts/*.sh

# Claude Code設定の確認
jq '.hooks' ~/.claude/settings.json

# 手動音声テスト
powershell.exe -Command "(New-Object Media.SoundPlayer 'C:\temp\voice\notification.wav').PlaySync()"

📈 実用的な使用例

日常的な開発作業での活用

# 例:ファイル編集時
claude: Edit機能を使用 → 「実行許可を求めている」音声
        編集完了 → 「タスクが完了したのだ」音声

# 例:複数ファイルの一括処理
claude: 複数ファイルの処理開始 → 確認音声
        各ファイル処理完了 → 通知音声  
        全処理完了 → 完了音声

カスタム音声の活用

# プロジェクト固有の音声を作成
./generate-voices.sh
# 「デプロイを開始するのだ」
# 「テストが成功したのだ」
# 「エラーが発生したのだ」

📚 参考リンク


この記事が参考になったら、ぜひスキやフォローをお願いします!

Discussion