JavaScriptに音声読み上げを追加する方法
ブラウザの音声合成の仕組みとそのトレードオフ、そしてあらゆるJavaScriptプロジェクトにTTS2Goを組み込み、高品質なAI音声読み上げを実現する方法を解説します。

Webサイトに音声読み上げ(TTS)を追加するのに、フレームワークは必要ありません。素のHTMLとJavaScriptで作っている場合でも、静的サイトジェネレーターやサーバーレンダリングのページを使っている場合でも、コンテンツに音声を加えるのは簡単です。
このガイドでは、ブラウザの音声合成の仕組み、各アプローチのトレードオフ、そしてあらゆるJavaScriptプロジェクトにTTS2Goを組み込む方法を解説します。
ブラウザの音声合成の仕組み
最近のブラウザには、Web Speech APIが標準で組み込まれています。数行のバニラJavaScriptで、次のようなことができます。
```js
const utterance = new SpeechSynthesisUtterance("Hello world");
window.speechSynthesis.speak(utterance);
```
npmパッケージもAPIキーもサーバーも必要ありません。無料で、オフラインでも動作します。
欠点は、品質と一貫性です。
- 声がロボットのように聞こえることが多い。
- 声の品質や選択肢がプラットフォームによって異なる。
- Windows版ChromeとmacOS版Safariでは聞こえ方が違う。
- すべてのユーザーに一貫したリスニング体験を保証できない。
AI生成音声の台頭
AI音声読み上げは、Webにおける音声の可能性を大きく変えました。ニューラル音声モデルは、自然な間、抑揚、リズムを備えた、本物の人間のような音声を生成します。
音声の事前生成
選択肢のひとつは、すべてのコンテンツの音声を事前に生成し、そのファイルをCDNでホストすることです。
メリット
- ユーザーはすぐに再生できる
- どこでも同じ品質・同じ声
デメリット
- 再生されるかどうかにかかわらず、すべてのコンテンツの音声生成費用を先に支払うことになる
- コンテンツを事前に把握しておく必要がある
- 更新のたびにファイルを再生成する必要がある
- コンテンツが増えるほどストレージコストも膨らむ
事前生成は小規模で変化の少ないコンテンツには適していますが、規模が大きくなるとコストがかさみ、柔軟性にも欠けます。
オンデマンドの遅延生成
より効率的なのは、誰かが実際に再生ボタンを押したときにだけ音声を生成する方法です。
メリット
- ユーザーがリクエストした音声の分だけ支払えばよい
- 動的なコンテンツやユーザー生成コンテンツにも自然に対応できる
課題
何の制限もなければ、サイトを訪れた誰もが高額な音声生成を引き起こせてしまいます。どこでもTTSを提供しつつ予算をコントロールするには、何をいつ生成するかを判断する仕組みが必要です。
TTS2Goによる解決策
TTS2Goは、品質・コスト・シンプルさのバランスをとるハイブリッドなアプローチを採用しています。
- クライアント側に置いても安全なキー
フロントエンド用のAPIキーを使って、サイトにSDKを追加します。このキーはリクエスト元ドメインによるブロックとレート制限に対応しているため、クライアント側のコードに置いても安全です。これは識別とレート制限のための仕組みであり、秘密鍵ではありません。
- 最初の訪問者:ブラウザTTSで即再生+バックグラウンドで生成
あるコンテンツで最初の人がTTSボタンを押すと、すぐにブラウザの音声合成で読み上げが始まります。同時に、バックグラウンドでTTS2Goへ生成リクエストが送信されます。
- 承認と予算管理
TTS2Goのダッシュボードでは、次のことができます。
- 生成リクエストを手動で承認する
- 条件を満たすリクエストを自動承認するよう、AI承認システムを設定する
これにより、生成にかかる予算を完全にコントロールできます。
- 2人目以降の訪問者:CDNからプレミアムなAI音声
リクエストが承認されて音声が生成されると、以降そのコンテンツでTTSを押したすべてのユーザーは、選択したボイスによる高品質なAI音声を、TTS2GoのCDNから即座に聴けるようになります。
つまり、最初の訪問者にはブラウザTTSを提供し、コストは承認によって管理し、それ以降の全員にはプレミアムなAI音声を届けるという仕組みです。
ステップ1:SDKをインストールする
npmを使って、TTS2GoのバニラJavaScriptパッケージをインストールします。
npm install @tts2go/vanilla
バンドラーを使っていない場合は、<script>タグでCDNから読み込み、window.TTS2Goとしてアクセスできます。
ステップ2:クライアントを作成する
プロジェクトの認証情報を使って、新しいTTS2Goインスタンスを初期化します。
import { TTS2Go } from "@tts2go/vanilla";
const tts = new TTS2Go({
apiKey: "your-api-key",
projectId: "your-project-id",
});ステップ3:音声読み上げを追加する
テキストとボイスIDを指定してtts.create()を呼び出すと、再生を完全に制御できるTTSインスタンスが得られます。
const instance = tts.create(
"Hello from TTS2Go in plain JavaScript!",)ここからは、TTS2GoのJavaScript APIの全機能を試すことができます。たとえば次のようなものがあります。
tts.getVoices()– プロジェクトで利用できるボイスの一覧を取得