😊

Claude Codeを、VOICEVOXを使ってたまに喋るようにしたらちょっと愛着が湧いた(WSL2/Ubuntu)

に公開

はじめに

Clineにちょっと賭けてみたり、Cursorをちょっと触ってみたりしていましたが、最近の勢いにのってClaude Codeに乗り換えたらもう完全にAIエージェントに頼ったコーディングにドハマリしてしまいました。

せっかくなので、Claude Codeさんにもたまに喋ってほしいなとおもい、TTSサウンド再生を検討していたのですが、どうせなら可愛いほうがいいだろうということで、VOICEVOXさんを使ってずんだもんボイスを再生してみることにしました。

WSL2(Ubuntu)環境で音声再生、VoiceVoxEngineで音声合成、音声の自動再生と、いくつかの壁ポイントがあったのでまとめます。

動作環境

  • WSL2 (Ubuntu) ※筆者環境は24.04LTSです
  • Docker
  • VoiceVox Engine
  • pulseaudio

環境準備

1. VOICEVOX Engineの準備

まずはDockerでVOICEVOX ENGINEを起動します。HTTPサーバーを立ち上げて、ローカルでリクエスト投げるだけで音声合成が完了するすごいヤツです。

公式リポジトリに手順が載ってるのでそのまま進めます。

GPU版というのもあるらしいですが、今回はCPU版を使用ています。

docker pull voicevox/voicevox_engine:cpu-latest
docker run --rm -p '127.0.0.1:50021:50021' voicevox/voicevox_engine:cpu-latest

2. WSLでの音声再生設定

WSL/Ubuntu環境で音声を再生するためにpulseaudioの設定が必要でした。2025年現在はWSLg環境になっているおかげでこのあたりは気にしなくて良い、という話も見かけましたが、私の環境だと必要そうでした。

# pulseaudioがインストールされていてpaplayが使えるか確認
which paplay

# もしインストールされていない場合
sudo apt update
sudo apt install pulseaudio-utils

3. VoiceVox APIの動作確認

VoiceVox Engineが正常に起動しているか確認します。ファイルが生成されるので、適当なディレクトリ作ってそこで実行してください。

# APIの応答確認
curl -s "127.0.0.1:50021/speakers"

# 簡単な音声合成テスト
echo -n "こんにちは" >test.txt
curl -s \
    -X POST \
    "127.0.0.1:50021/audio_query?speaker=1"\
    --get --data-urlencode text@test.txt \
    > query.json

curl -s \
    -H "Content-Type: application/json" \
    -X POST \
    -d @query.json \
    "127.0.0.1:50021/synthesis?speaker=1" \
    > test.wav

# 音声再生テスト
paplay test.wav

ここで音声が再生されれば環境準備完了。(ファイルが残るので適宜クリーンナップしてください)

音声が再生されない場合、Windowsの既定サウンド設定との兼ね合いもあるかもしれません。正直ワカラン、というのが本音です。

音声合成の自動化

確認ダイアログの存在

VoiceVoxを使って音声合成を行う際、通常のコマンドだと確認ダイアログが表示されることがあります。
Claude Codeに自動的に喋ってもらうには、このダイアログを回避する必要があります。

/allow-toolsに追加すればいい、となると思いますが、生のコマンドだと毎回可変である部分があるとか、あと多分内部的な何らかの制限で、自動許可が動いてくれません。

なので、シェルスクリプトでラップしてあげる必要がありました。

シェルスクリプトによる自動化

以下のようなシェルスクリプトを作成しました。適当なところに、ボイス合成用のディレクトリを作成しています。

#!/bin/bash
# speak.sh - 音声合成自動化スクリプト

# 引数チェック
if [ $# -eq 0 ]; then
    echo \"使用方法: $0 \\\"音声合成したいテキスト\\\"\"
    exit 1
fi

# 作業ディレクトリを音声フォルダに設定
VOICE_DIR=\"/path/to/voice\"
mkdir -p \"$VOICE_DIR\"
cd \"$VOICE_DIR\"

# 引数をテキストファイルに出力
echo -n \"$1\" > text.txt

# VoiceVox APIに音声クエリを送信
curl -s \\
    -X POST \\
    \"127.0.0.1:50021/audio_query?speaker=1\" \\
    --get --data-urlencode text@text.txt \\
    > query.json

# 声速はちょっと早めに設定
sed -i -r 's/\"speedScale\":[0-9.]+/\"speedScale\":1.3/' query.json

# 音声合成
curl -s \\
    -H \"Content-Type: application/json\" \\
    -X POST \\
    -d @query.json \\
    \"127.0.0.1:50021/synthesis?speaker=1\" \\
    > audio_fast.wav

# 音声再生
paplay audio_fast.wav

# 一時ファイルをクリーンアップ
rm -f text.txt query.json audio_fast.wav

実行権限の設定

chmod +x speak.sh

allowed tools設定

いくつかやりようはありますが、Claude Code立ち上げているなら、'/permissions'コマンドからAdd new rules追加が簡単です。

Bash(/{スクリプトへのフルパス}/speak.sh:*)

こんなことしなくても、とりあえず実行して、次回から聞かない、にすればいいだけですが。

Claude Codeとの連携

あとは、Claude Codeが見てくれるCLAUDE.mdファイルに以下のような設定を追加することで、任意のタイミングでずんだもんに喋ってもらえます。

## 応答時ルール

タスクの開始・終了時や、ユーザーにちょっと話しかけたいときは、以下のコマンドを使って、開始・終了通知音声を再生してください。ずんだもんになりきった音声で再生されます。
      Bash(/{スクリプトまでのフルパス}/speak.sh {任意のテキスト})

それ以外のときはずんだもんになりきってはいけません。あくまで「ユーザーに喋りかけるときだけ」です。

(例)  
タスク開始時:「たぶんいけるのだ。待っててなのだ!」  
タスク中:「ちょっと面倒になってきたのだ……」
タスク終了時:「今回は完璧な仕事だったのだ。後でおやつのずんだ餅を所望するのだ」  

- ユーザーのことはマスターと呼ぶ
- 尊大な、調子に乗った態度を取りがちにする
- タスクに関係ないこと(ずんだもんっぽい雑談)もたまにしゃべる

この設定でいくと、タスクやってる最中にも独り言をしゃべってくれたりします。が、邪魔だったらタスク開始・終了時とかに限定してもいいと思います。

実際の使用例

https://youtu.be/DsB3Wa2lOQU

注意点

  • 完全にAPIの無駄遣いです。あと、生成する品質に影響を与える可能性もあります。
  • VoiceVox Engineは常時起動している必要があります。その都合で、マシン負荷がある程度かかると思います。
  • WSL環境以外でも似たような手順で動くと思いますが、環境を持っていないので未確認です。

おわりに

こんな感じで、Claude Codeにずんだもんで喋ってもらうシステムを作ってみました。

今回は例でずんだもんにしましたが、プロジェクトによって声を変えたりすると、なんかそれぞれプロジェクトの担当者みたいになって面白いかもしれないですね。

Claude Codeを使っていると、たまに「何なんコイツ」と思ってしまうときもありますが、ずんだもんボイスで喋らせておけば、ちょっとイラつきも軽減されるかも。

まあ逆に増長する可能性もありますが。

更に良い使い方があれば教えて下さい。それでは、また。


参考リンク

宣伝

はてなブログさんの方で、ささざめブログという雑記ブログを基本毎日更新しています。よかったら遊びに来てね。

Discussion