かずきち。の日記

サーバサイドエンジニアのつぶやき

広告なし・0円。自力で『記事読み上げボタン』を作るのがコスパ最強すぎた


【GTM設置】JavaScriptでサイトに無料の「読み上げ機能」を実装してみた

「記事を読むのが疲れる」「家事をしながら内容を知りたい」という読者のために、ブラウザの標準機能(Web Speech API)を使った読み上げボタンを設置してみました。
外部サービスを使わず、完全無料・広告なしで実装できるのがメリットです。
今回はGoogleタグマネージャー(GTM)を使って、全記事に一括反映させる方法をまとめます。
GTMの使い方については割愛します。

1. 読み上げ用JavaScriptコード

まずは、GTMの「カスタムHTML」に貼り付けるコードを準備します。以下のコードは、記事本文(`.entry-content`)を取得して読み上げる仕組みです。

<style>
  .speech-btn-container {
    margin: 20px 0;
    display: flex;
    gap: 10px;
  }
  .gtm-speech-btn {
    padding: 10px 18px;
    background-color: #4CAF50; /* 緑色 */
    color: white;
    border: none;
    border-radius: 25px;
    cursor: pointer;
    font-weight: bold;
    box-shadow: 0 2px 5px rgba(0,0,0,0.2);
    transition: 0.3s;
  }
  .gtm-speech-btn:hover {
    background-color: #45a049;
    transform: translateY(-2px);
  }
  .gtm-stop-btn {
    background-color: #f44336; /* 赤色 */
  }
</style>

<script>
  (function() {
    // ボタンを挿入したい場所のセレクタ(例: h1タグのあと)
    var target = document.querySelector('h1'); 
    if (!target) return;

    // ボタンのHTMLを作成
    var html = '<div class="speech-btn-container">' +
               '<button id="gtm-play" class="gtm-speech-btn">🔊 記事を聴く</button>' +
               '<button id="gtm-stop" class="gtm-speech-btn gtm-stop-btn">停止</button>' +
               '</div>';

    // 指定した要素の直後に挿入
    target.insertAdjacentHTML('afterend', html);

    // 読み上げの処理
    var playBtn = document.getElementById('gtm-play');
    var stopBtn = document.getElementById('gtm-stop');

    playBtn.addEventListener('click', function() {
      window.speechSynthesis.cancel();
      // 読み上げる範囲(例: articleタグの中身)
      var content = document.querySelector('article') ? document.querySelector('article').innerText : document.body.innerText;
      var msg = new SpeechSynthesisUtterance(content);
      msg.lang = 'ja-JP';
      window.speechSynthesis.speak(msg);
    });

    stopBtn.addEventListener('click', function() {
      window.speechSynthesis.cancel();
    });
  })();
</script>
2. Googleタグマネージャーでの設定手順

設置は非常にシンプルです。

1. 新しいタグを作成:
- 名前:[JS] 記事読み上げボタン
- タグの種類:カスタムHTML
- 上記のコードを貼り付けます。

2. トリガーの設定

  • 種類:ページビュー > 一部のページビュー
  • 条件:Page URL が entry を含む(※はてなブログの記事URLに限定する場合)

3. 公開
「公開」ボタンを押して反映!

メリットと注意点

完全無料:APIの利用料金は一切かかりません。
軽量: 外部ライブラリを読み込まないのでサイトが重くなりにくいです。
アクセシビリティ向上:目が不自由な方や、移動中の方にもコンテンツを届けられます。

注意点

  • ブラウザ依存: 読み上げる声(声質)は、閲覧しているユーザーのデバイス(iPhoneならSiriっぽい声、WindowsならMicrosoftの声)に依存します。
  • 読み間違い:固有名詞や難読漢字はたまに間違えますが、大意は伝わります。
まとめ

GTMを使えば、テーマを直接いじらなくても簡単に機能を追加できるのが便利ですね。
「聴くブログ」として、ぜひ試してみてください!

注目記事