Claude API×VOICEVOXでAIキャラをしゃべらせる【Windows・GPU不要】コピペで動く入門チュートリアル
目次13項目
「AIへ質問すると、ずんだもんの声で答えてくれる」——AI VTuberの土台になるこの仕組みは、GPUなしのWindows PCと100行未満のPythonで作れます。
この記事では、Claude APIが作った応答文をVOICEVOXへ送り、WAV音声へ変換してスピーカーから再生するところまでを、初心者向けに順番に解説します。すべてのステップに動作確認を入れているため、途中で止まっても原因を切り分けやすい構成です。
この記事で作るのは、キーボードから質問するとAIが短く返答し、その返答をVOICEVOXが読み上げる最小構成です。配信コメント取得、Live2D、OBS、長期記憶などは完成後に追加します。
作るものの全体像
必要な部品は3つです。
あなたの質問 → Claude API → 応答テキスト → VOICEVOX → WAV音声 → スピーカー再生
図の見方:白い枠の外にあるクラウド側でClaudeが返答文を作り、Windows PC内のPythonへ返します。その後はPC内のVOICEVOXが文章を音声へ変換し、WAVファイルをスピーカーで再生します。GPU不要という意味は、ClaudeのLLM計算をクラウド側で行うため、手元のPCにLLM用GPUが不要ということです。インターネット接続は必要です。
Claude APIは応答テキストを作る「頭脳」です。処理はクラウド側で行われるため、PCにLLM用GPUは必要ありません。VOICEVOXはテキストを音声へ変換し、Pythonが2つのサービスと音声再生をつなぎます。
| 部品 | 役割 | 動く場所 |
|---|---|---|
| Claude API | 質問から返答文を生成 | クラウド |
| VOICEVOX | 返答文をWAV音声へ変換 | 自分のPC・CPUで利用可能 |
| Python | API呼び出しと音声再生 | 自分のPC |
料金はいくらかかるか
Claude Haiku 4.5の標準料金は、入力100万トークンあたり1ドル、出力100万トークンあたり5ドルです。1往復を入力200トークン、出力80トークン、1ドル150円として計算すると、次の金額になります。
入力: 200 ÷ 1,000,000 × $1 = $0.0002
出力: 80 ÷ 1,000,000 × $5 = $0.0004
合計: $0.0006 = 約0.09円1日100往復を30日続けた場合は、約1.80ドル、約270円です。実際の入力にはシステムプロンプトや会話履歴も含まれるため、長い履歴を送るほど料金は増えます。最新料金はAnthropic公式の料金表で確認してください。
API料金の考え方を先に知りたい場合は、AI API入門とLLM API月額コストシミュレーターも利用できます。
用意するもの
- Windows 10またはWindows 11
- Python 3.10以降
- VOICEVOX
- Claude PlatformのアカウントとAPIキー
- インターネット接続
- 音声を再生できるスピーカーまたはイヤホン
ステップ1:VOICEVOXを起動してAPIを確認する
VOICEVOX公式サイトからVOICEVOXをダウンロードしてインストールし、起動します。標準のVOICEVOXアプリを起動すると、ローカルPC上の音声合成エンジンへHTTP APIでアクセスできます。
VOICEVOXを起動したまま、ブラウザで次のURLを開いてください。
http://localhost:50021/docsAPIドキュメントが表示されれば、VOICEVOX側の準備は完了です。表示されない場合は、VOICEVOXが起動しているか、ほかのアプリが50021番ポートを使用していないか確認してください。
使用できる声のIDを確認する
次のURLを開くと、現在インストールされているキャラクターとスタイルのIDを確認できます。
http://localhost:50021/speakersこの記事のコードでは、標準構成のずんだもん・ノーマルとしてSPEAKER_ID = 3を使います。インストール内容が異なる場合は、/speakersに表示されたIDへ変更してください。
ステップ2:Claude APIキーを設定する
Claude Platformでアカウントを作成し、API KeysページからAPIキーを発行します。利用状況によっては、先に支払い方法やクレジットの設定が必要です。
APIキーは料金が発生する秘密情報です。Pythonコードへ直接書いたり、GitHubへ公開したりせず、環境変数ANTHROPIC_API_KEYへ保存します。

図の見方:上側がこの記事で使う安全な流れです。APIキーをWindowsの環境変数へ保存し、Pythonは実行時にそこから読み込みます。下側のようにコードへ直接貼り付けると、ファイル共有や公開リポジトリへの登録によって漏れる危険があります。
Windows PowerShell
setx ANTHROPIC_API_KEY "ここにAPIキーを貼り付ける"設定後はPowerShellをいったん閉じ、新しく開き直してください。
APIキーを表示せずに確認する
画面共有やスクリーンショットへAPIキーが映らないよう、キーそのものは表示せず「設定済み」だけを確認します。
# Windows PowerShell
if ($env:ANTHROPIC_API_KEY) { "設定済み" } else { "未設定" }ステップ3:Python環境を用意する
作業用フォルダを作り、その中で次のライブラリをインストールします。
python -m pip install anthropic requestsanthropic:Claude APIを呼び出す公式Python SDKrequests:VOICEVOXのHTTP APIを呼び出すwinsound:生成されたWAVファイルを再生するWindows標準ライブラリ。追加インストールは不要
ステップ4:ClaudeとVOICEVOXをつなぐ
次のコードをllm_voicevox.pyという名前で保存します。
"""Claude APIの応答をVOICEVOXで読み上げる最小構成。"""
from pathlib import Path
import winsound
import requests
from anthropic import Anthropic
VOICEVOX_URL = "http://localhost:50021"
SPEAKER_ID = 3 # ずんだもん・ノーマル。/speakersで確認する
MODEL = "claude-haiku-4-5"
OUTPUT_WAV = Path("output.wav")
SYSTEM_PROMPT = (
"あなたは配信中のAIキャラクターです。"
"必ず日本語の話し言葉で、2文以内に短く答えてください。"
"箇条書きや読み上げに不要な記号は使わないでください。"
)
client = Anthropic() # ANTHROPIC_API_KEYを自動で読み込む
def ask_llm(user_text: str) -> str:
"""Claude APIへ質問し、返答テキストを受け取る。"""
request_options = {}
if MODEL == "claude-sonnet-5":
request_options["thinking"] = {"type": "disabled"}
response = client.messages.create(
model=MODEL,
max_tokens=200,
system=SYSTEM_PROMPT,
messages=[{"role": "user", "content": user_text}],
**request_options,
)
if response.stop_reason == "max_tokens":
raise RuntimeError("Claude APIの出力が上限で途切れました。max_tokensを増やしてください")
text_blocks = [block.text for block in response.content if block.type == "text"]
reply = "".join(text_blocks).strip()
if not reply:
raise RuntimeError("Claude APIからテキストが返りませんでした")
return reply
def speak(text: str, speaker: int = SPEAKER_ID) -> None:
"""VOICEVOXで音声を合成し、WAVとして再生する。"""
query = requests.post(
f"{VOICEVOX_URL}/audio_query",
params={"text": text, "speaker": speaker},
timeout=30,
)
query.raise_for_status()
audio = requests.post(
f"{VOICEVOX_URL}/synthesis",
params={"speaker": speaker},
json=query.json(),
timeout=60,
)
audio.raise_for_status()
OUTPUT_WAV.write_bytes(audio.content)
winsound.PlaySound(str(OUTPUT_WAV), winsound.SND_FILENAME)
def main() -> None:
print("AIキャラと会話します。終了する場合は quit と入力してください。")
while True:
user_text = input("\nあなた> ").strip()
if not user_text:
print("何か入力してください。終了する場合は quit と入力します。")
continue
if user_text.lower() == "quit":
break
reply = ask_llm(user_text)
print(f"AI> {reply}")
speak(reply)
if __name__ == "__main__":
main()VOICEVOXを起動した状態で実行します。
python llm_voicevox.py「あなた>」と表示されたら、質問を入力してEnterを押してください。Claudeの返答が画面に表示され、その内容をずんだもんの声で読み上げれば完成です。何も入力せずEnterを押した場合は終了せず、入力待ちへ戻ります。終了するときはquitと入力してください。
コードの重要部分
Claude APIから返答文を受け取る
client.messages.create()がClaude APIを呼び出している部分です。ClaudeのMessages APIでは、システム指示をトップレベルのsystemへ、会話をmessagesへ渡します。
max_tokens=200は回答の最大長を抑える設定です。AI VTuberでは回答が長すぎると発話待ち時間も伸びるため、短い返答をシステムプロンプトと最大トークン数の両方で指定しています。stop_reasonがmax_tokensなら途中で上限に達した状態なので、サンプルではエラーとして知らせます。
VOICEVOXは2段階で音声を作る
VOICEVOXの音声合成は次の2段階です。
/audio_queryへ文章を送り、アクセントや話速を含む音声合成クエリを作る- そのクエリを
/synthesisへ送り、WAV音声を受け取る

図の見方:最初の処理では、文章からアクセント、音高、話速などを含む設計データを作ります。次の処理では、その設計データを実際の音声波形へ変換します。コード内のquery.json()を変更すると、2段階目へ渡す前に話し方を調整できます。
VOICEVOX ENGINEの公式APIドキュメントでも、audio_queryで作ったクエリをそのまま音声合成へ利用できると説明されています。
声や話し方を変更する
VOICEVOXの声を変更する
SPEAKER_IDをhttp://localhost:50021/speakersで確認した別のIDへ変更すると、キャラクターやスタイルを変更できます。
話速や音高を細かく変更したい場合は、query.json()のspeedScaleやpitchScaleを変更してからsynthesisへ送ります。極端な値は不自然になりやすいため、少しずつ調整してください。
AIキャラクターの性格を変更する
SYSTEM_PROMPTがAIキャラクターの話し方を決めます。口調、性格、回答の長さ、避ける表現などを追加できます。
ただし、VOICEVOXのキャラクターへ独自の口調や設定を付ける場合も、各キャラクターの利用規約やイメージを確認してください。
Claudeのモデルを変更する
応答品質を優先する場合は、MODELをclaude-sonnet-5へ変更できます。HaikuよりAPI料金が高くなるため、雑談の試作ではHaikuから始めるのが分かりやすいでしょう。
Claude Sonnet 5はadaptive thinkingが既定で有効です。思考を有効にしたまま使う場合、max_tokensは思考トークンと画面に出る回答を合わせた上限になるため、200のままでは回答が空になったり途中で切れたりする可能性があります。このサンプルはMODELだけをSonnet 5へ変更しても短い会話を続けられるよう、Sonnet 5を選んだときだけthinking={"type": "disabled"}を送ります。思考を利用したい場合はこの無効化を外し、max_tokensを十分に増やして、レスポンスのstop_reasonとusageを確認してください。
サンプルコードでは、Claude Haiku 4.5の短いエイリアスclaude-haiku-4-5を使用しています。エイリアスは同じマイナーバージョンの最新スナップショットを指すため、日付付きIDが更新された場合もコードを変更せず追随できます。反対に、実行結果の再現性を優先してモデルを固定したい場合は、公式一覧に存在する日付付きIDclaude-haiku-4-5-20251001を指定します。
日付付きIDはすべての現行モデルに用意されているわけではありません。たとえばSonnet 5とOpus 5は公式のモデルIDをそのまま使い、Haiku 4.5の形式をまねて日付を付け足さないでください。モデルIDと利用可能なモデルは更新されるため、公開・運用前にClaude公式モデル一覧を確認してください。
VOICEVOXのクレジット表記に注意する
VOICEVOX公式のソフトウェア利用規約では、生成音声を使う場合にVOICEVOXを利用したことが分かるクレジット表記が必要です。さらに、使用する音声ライブラリごとの利用規約にも従う必要があります。
ずんだもんの音声を動画や配信で使う場合は、利用規約を確認したうえで、概要欄などに次のようなクレジットを記載します。
VOICEVOX:ずんだもん公開前に、VOICEVOXソフトウェア利用規約とVOICEVOX公式サイトのキャラクター一覧から、使用するキャラクターの規約を必ず確認してください。
うまく動かない場合
ConnectionErrorが表示される
VOICEVOXが起動していない可能性があります。http://localhost:50021/docsが開くか確認してください。
authentication_errorが表示される
APIキーが読めていないか、無効になっている可能性があります。環境変数を設定したあとにターミナルを開き直したか確認してください。Anthropic公式では、APIキーの問題は401エラーとして返されます。
billing_errorが表示される
Claude Platformの支払い情報や残高を確認してください。現在のAnthropic APIでは、課金情報の問題は402エラーとして返されます。
音は出るが読み方が不自然
返答に英語、URL、記号が多く含まれている可能性があります。システムプロンプトで日本語の話し言葉を指定し、必要に応じてVOICEVOXの辞書やAudioQueryを調整してください。
winsoundで音声を再生できない
winsoundはWindows標準ライブラリなので、追加インストールは不要です。エラーになる場合は、output.wavが作成されているか、別の音声プレーヤーで開けるかを確認してください。output.wavが作成されていなければ、直前のVOICEVOXへのリクエストでエラーが出ていないか確認します。
AI VTuberへ発展させるには
今回の最小構成が動いたら、次の順番で機能を追加できます。
messagesへ会話履歴を追加して、直前の会話を覚えさせる- Claudeのストリーミング応答を文単位でVOICEVOXへ送る
- OBSへ音声を流して配信に載せる
- VTube Studioと連携して口パクや表情を動かす
- YouTubeコメントを取得して視聴者へ返答する
- 不適切なコメントや長すぎる返答を制限する
完全にオフラインで動かしたい場合は、Claude APIの部分をOllamaなどのローカルLLMへ差し替えられます。その場合はGPUやメインメモリが必要になるため、GPUとコンテキスト長によるローカルLLM動作判定ツールで目安を確認してください。
まとめ
Claude APIとVOICEVOXを組み合わせると、AI VTuberの基本となる「質問を受け取る」「返答を考える」「声で読み上げる」という流れを、GPUなしのPCでも試せます。
最初は今回の短い会話プログラムを確実に動かし、そこから会話履歴、ストリーミング、OBS、Live2D、コメント取得を一つずつ追加するのがおすすめです。
情報確認日:2026年7月29日。Claude API、Anthropic Python SDK、VOICEVOX ENGINEの仕様や料金は更新される可能性があります。実装前に各公式ドキュメントの最新情報を確認してください。

コメント欄に近づくと読み込みます。