• #日記
  • #ElevenLabs
  • #TTS
  • #Cloudflare R2
  • #NarrationViewer
  • #eurekapu
daily-log

2026年3月16日の開発日記

前日にVOICEVOXとGoogle Cloud TTSでナレーション機能を組み上げたのを受けて、今日は音声の品質・管理・配信の3つを一気に底上げした。朝にElevenLabs v3のAPIを叩き始め、夜にはステレオパン付きのナレーションが本番環境から流れるところまで持っていった。

今日やったこと

1. ElevenLabs v3 TTS導入と音声サービス比較

日本語TTSを4サービス(OpenAI TTS、Google Cloud TTS、ElevenLabs v3、VOICEVOX)で比較した。ElevenLabs v3が最も自然な日本語を生成すると判断し、APIスクリプトを組んでテスト音声を生成。Audio Tagsで文中に[gentle][serious]を挿入して感情を揺らすテストも実施した。聞き比べページ(/admin/voice-compare)を立てて3サービスを横並びで再生できるようにし、最終的にChapter 04全59行をElevenLabsで本番生成した。

主な成果:

  • 4サービスの比較調査とElevenLabs v3の選定
  • Audio Tags感情制御(文中挿入パターン)のテスト
  • 聞き比べページ(4カラム構成)の構築
  • Chapter 04の全59行をElevenLabsで本番生成(3,458文字消費)

詳細: ElevenLabs v3で日本語TTS - サービス比較から本番生成まで


2. 音声ファイル管理基盤の整備

152個の音声ファイルをpublic/audio/からaudio-assets/に移行し、.gitignoreで除外した。dev server middleware(dev-audio.ts)を作成してローカル開発でaudio-assets/から配信し、useAudioUrl composableで本番(R2 CDN)と開発(ローカル)のURL解決を一元化した。Cloudflare R2にElevenLabs音声とVOICEVOX音声をアップロードし、DEPLOY.mdにデプロイ手順を文書化した。

主な成果:

  • audio-assets/ への一元移行(gitignore済み)
  • dev middleware + useAudioUrl composable でURL解決統一
  • R2アップロード(--remoteフラグ忘れの教訓も記録)
  • DEPLOY.md 作成

詳細: 音声ファイル管理基盤の整備 - Git除外・R2配信・dev middleware構築


3. ナレーションコンテンツ改善とNarrationViewer拡張

Chapter 01+04の計196行のナレーションを通しレビューし、未解説の専門用語やスライドのずれ、scene.idの重複など8件の問題を修正した。旧プロジェクトから移行時に書き換わっていたメッセージラインを原文に忠実に復元。NarrationViewerにはmessageLine表示、ステレオパン(ユイ=左、カイ先生=右)、デバッグパネル(Dキー)を追加した。Playwright+ffmpegによる動画レンダリングも試行し、NarrationViewerのロジックを純粋関数に抽出してVitest 49テストを新規作成した。

主な成果:

  • 196行の通しレビューで8件修正
  • messageLine原文復元(旧プロジェクトとの整合性)
  • ステレオパン実装とデバッグパネル追加
  • Playwright+ffmpegで動画レンダリングのパイプライン構築
  • 純粋関数抽出 + 49テスト新規作成(全292テスト合格)
  • 命名規則移行計画(Section > Chapter > Topic)のマークダウン作成

詳細: ナレーションコンテンツ改善とNarrationViewer拡張


今日の学び

  • ElevenLabs v3のAudio Tagsは文中挿入で感情の切り替えが効く。GCP TTSのSSMLより表現力が高い
  • wrangler r2 object put はデフォルトでローカルエミュレータに書き込む。本番R2には --remote フラグが必須(2回ハマった)
  • TTS生成スクリプトのSource of Truthは1箇所に。ts→JSON変換パイプラインで二重管理を排除
  • WAVヘッダーを直接パースすればffprobe不要で音声長が取れる
  • ロジックを純粋関数に抽出するとVue依存なしでテストが書ける

明日やること

  • 命名規則移行計画(Section > Chapter > Topic)の実装に着手
  • ElevenLabsの残クレジットでChapter 01の音声も差し替え検討
  • 動画レンダリングスクリプトの改善(既存音声ファイルを使う方式に統一)
  • ナレーションレビューで指摘した残りの用語解説追加

関連記事