今回は、「ボタンをクリックするとWebページのテキストを音声で読み上げる」機能が実装されたHTMLを例に、Web Speech APIの基本的な使い方や仕組みをやさしく解説していきます!

音声読み上げの仕組みは、アクセシビリティ対応や、情報の多いページを“ながら聞き”したいときにとても役立ちます。さっそく、そのしくみを見ていきましょう!


このアプリでできること

このサンプルでは次のようなことが可能です。

機能説明
ページ内の文章を音声で再生<div>内のテキストを自動音声で読み上げ
読み上げの一時停止・再開ユーザーが一時停止と再開を自由に切り替えられる
読み上げの停止「読み上げる」ボタンをもう一度押すと停止

読み上げの仕組みをざっくり理解しよう!

読み上げには SpeechSynthesisUtterance というWeb Speech APIのオブジェクトを使います。

🗣️ SpeechSynthesisUtterance(スピーチシンセシス・アタランス)とは?
読み上げるテキストや音声の速さ、ピッチ、言語などを設定できる「読み上げの指示書」です。


HTML部分の構造

<div id="text">
  <p>吾輩は猫である。名前はまだ無い。</p>
  ...
</div>
<button id="speakToggleButton">読み上げる</button>
<button id="pauseToggleButton">読み上げ一時停止</button>
  • #text:読み上げたい内容が入っている場所
  • #speakToggleButton:読み上げ開始・停止の切り替えボタン
  • #pauseToggleButton:一時停止・再開の切り替えボタン

JavaScriptでの読み上げ制御の流れ

1. 読み上げ開始/停止

if (speakToggleButton.textContent === '読み上げる') {
  const text = textElement.textContent;
  utterance = new SpeechSynthesisUtterance(text);
  utterance.lang = 'ja-JP';
  ...
  window.speechSynthesis.speak(utterance);
  speakToggleButton.textContent = '読み上げ停止';
} else {
  window.speechSynthesis.cancel();
  speakToggleButton.textContent = '読み上げる';
}

操作解説
SpeechSynthesisUtterance(text)読み上げるテキストをオブジェクトに変換
lang = 'ja-JP'読み上げの言語(日本語)を指定
speak()読み上げスタート!
cancel()途中でも読み上げを完全に止める

2. 読み上げの一時停止・再開

if (pauseToggleButton.textContent === '読み上げ一時停止') {
  window.speechSynthesis.pause();
  pauseToggleButton.textContent = '読み上げ再開';
} else {
  window.speechSynthesis.resume();
  pauseToggleButton.textContent = '読み上げ一時停止';
}

関数名意味
pause()読み上げをその場で一時停止する
resume()一時停止していた読み上げを再開する

よくある質問と注意点

Q. 「読み上げが始まらないんだけど…?」

  • → ブラウザが Web Speech API をサポートしているか確認しましょう。
    • ChromeEdge はサポートしていますが、Safariや一部のスマホブラウザは対応が不完全な場合があります。

Q. 声が変えられますか?

  • 可能です!次のようにして利用可能な声を取得できます。
speechSynthesis.getVoices(); // すべての音声オプションを取得

このリストから好みの声を選んで utterance.voice に設定することも可能です。


今後のステップアップには?

このサンプルを基に、以下のような拡張ができます!

機能内容
選択した文だけ読み上げるwindow.getSelection().toString() を使う
読み上げ履歴を残すlocalStorage への保存機能を追加
音声設定のカスタマイズUIスライダーで ratepitch を調整
読み上げ中のハイライト表示読み上げ進行に応じて文章を強調表示

まとめ

Web Speech APIを使うと、たった数行のJavaScriptでテキストを音声に変換できてしまいます。

アクセシビリティ対応にもぴったりで、ナレーションつきの記事やWeb教材など、工夫次第でいろんな場面に応用できます!

次は「選択した部分だけを読み上げる」機能や、「複数言語に対応した読み上げ」などにも挑戦してみましょう。

何か応用してみたい機能があれば、ぜひ聞いてくださいね!

(Sample)

最後までお読みいただきありがとうございます。