【Googleドキュメント】Apps Scriptで読了時間を計算!記事配信の前処理

【Googleドキュメント】Apps Scriptで読了時間を計算!記事配信の前処理
🛡️ 超解決

記事配信の前処理として、読了時間を表示したいと考えたことはありませんか。読者が記事を読む前に所要時間がわかると、離脱防止につながります。しかし、毎回手動で文字数を数えて計算するのは非効率です。GoogleドキュメントのApps Scriptを使えば、この作業を自動化できます。この記事では、スクリプトの書き方からドキュメントへの埋め込みまでを解説します。

【要点】Apps Scriptで読了時間を自動計算する3つのステップ

  • getBody().getText()で本文を取得: ドキュメントの本文テキストを文字列として取得し、文字数をカウントします。
  • 読了時間の計算式: 文字数を1分間の平均読了文字数(例:300文字)で割り、分単位の読了時間を求めます。
  • トリガーと挿入処理: ドキュメント保存時に自動実行するトリガーを設定し、結果をドキュメントの先頭やフッターに書き込みます。

ADVERTISEMENT

読了時間計算の仕組みとApps Scriptの役割

読了時間は、記事の総文字数を1分間に読める平均文字数で割ることで算出します。一般的な読書速度は1分間に300~400文字であり、ビジネス文書では300文字を基準とすることが多いです。GoogleドキュメントのApps Scriptは、ドキュメントの内容をプログラムで操作できる環境です。スクリプトを使って本文の文字数を自動取得し、計算結果をドキュメント内に直接書き込むことで、手動計算の手間を省きます。

Apps Scriptで読了時間を自動計算する手順

スクリプトエディタを開く

  1. ドキュメントを開く
    対象のGoogleドキュメントを開きます。
  2. 拡張機能メニューを開く
    メニューバーの「拡張機能」をクリックし、表示されたメニューから「Apps Script」を選択します。
  3. スクリプトエディタを起動
    新しいタブでスクリプトエディタが開きます。ここにコードを記述します。

読了時間を計算する関数を作成する

  1. 関数の基本形を記述
    エディタに以下のコードを貼り付けます。
    function calculateReadTime() {
      var doc = DocumentApp.getActiveDocument();
      var body = doc.getBody();
      var text = body.getText();
      var charCount = text.length;
      var wordsPerMinute = 300; // 1分間の読了文字数
      var minutes = Math.ceil(charCount / wordsPerMinute);
      var readTime = minutes + '分';
      
      // 結果をドキュメントの先頭に挿入
      var paragraph = body.getParagraphs();
      var firstParagraph = paragraph[0];
      firstParagraph.insertText(0, '読了時間: ' + readTime + '\n');
    }
  2. スクリプトを保存
    Ctrl+S(Windows)またはCmd+S(Mac)で保存します。プロジェクト名は任意です。
  3. 関数をテスト実行
    エディタの「実行」ボタンをクリックし、関数calculateReadTimeを選択して実行します。初回は権限の承認が必要です。ポップアップに従い許可します。

トリガーを設定して自動化する

  1. トリガーページを開く
    スクリプトエディタの左側の時計アイコンをクリックします。
  2. トリガーを追加
    右下の「トリガーを追加」ボタンをクリックします。
  3. トリガー条件を設定
    「実行する関数」にcalculateReadTime、「デプロイの種類」は「Head」、「イベントのソース」は「Googleドキュメント」、「イベントの種類」は「起動時」または「変更時」を選択します。保存をクリックします。
  4. 動作を確認
    ドキュメントに戻り、内容を編集して保存すると、次回開いたときや変更時に読了時間が自動更新されます。

よくある失敗と対処法

文字数カウントが正確でない

スクリプトで取得するテキストには、ドキュメント内のヘッダーやフッター、リストの箇条書き記号なども含まれることがあります。実際の記事本文だけをカウントしたい場合は、範囲を限定する必要があります。たとえば、特定の段落スタイルを持つ部分だけを取得する方法があります。また、空白や改行も文字数に含まれるため、不要な文字を除去する処理を追加すると精度が上がります。

トリガーが動作しない

トリガーが正常に動作しない原因として、権限不足やスクリプトのエラーが考えられます。まずは手動で関数を実行してエラーがないか確認します。エラーが表示される場合は、エラーメッセージを元に修正します。また、トリガーの「イベントの種類」を「変更時」にすると、保存時に自動実行されるようになります。ただし、頻繁に実行されすぎる場合は「時間主導型」で1時間ごとなどに設定することも検討します。

読了時間がドキュメントに反映されない

スクリプトが正しく実行されても、結果が表示されない場合があります。原因として、挿入位置が適切でない可能性があります。コードでは先頭段落の先頭にテキストを挿入していますが、もし先頭段落が存在しない場合や、他の処理で上書きされる場合は、別の方法、例えばフッターに追加する方法が安定します。以下のコード例ではフッターに追加します。

function addReadTimeToFooter() {
  var doc = DocumentApp.getActiveDocument();
  var footer = doc.getFooter();
  var text = footer.getText();
  // 既存の読了時間を削除してから追加
  footer.clear();
  footer.setText('読了時間: ' + calculateReadTime());
}

ADVERTISEMENT

手動計算とApps Script自動化の比較

項目 手動計算 Apps Script自動化
作業時間 記事1本につき数分 一度設定すれば以後不要
正確性 人為的ミスの可能性 常に一定の計算ロジック
更新の手間 編集のたびに再計算が必要 トリガーで自動更新
カスタマイズ性 計算式の変更が手間 コードを修正するだけで柔軟に対応

手動計算は初期導入が不要ですが、複数の記事を扱うほどコストが増大します。一方、Apps Scriptは初期設定に少し時間がかかるものの、長期的には大きな効率化が期待できます。

まとめ

この記事では、GoogleドキュメントのApps Scriptを使って読了時間を自動計算する方法を解説しました。getBody().getText()で本文を取得し、文字数を読書速度で割ることで読了時間を算出し、ドキュメントに自動挿入できます。トリガーを設定すれば、記事を編集するたびに自動更新されるため、配信前の手間が大幅に削減されます。応用として、画像の数や見出しの数など他の指標も組み合わせて、より詳細なメタ情報を生成することも可能です。ぜひご自身のワークフローに取り入れてみてください。


ADVERTISEMENT

📄
Googleドキュメントトラブル完全解決データベースこの記事以外にも、書式・共有・Apps Script・引用など様々な困りごとへの解決策をまとめています。逆引きに活用してください。
この記事の監修者
✍️

超解決 第一編集部

疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。

SPONSORED