ADVERTISEMENT

【Googleドキュメント】Apps Scriptで本文中のリンクを一括チェック!リンク切れ検出

【Googleドキュメント】Apps Scriptで本文中のリンクを一括チェック!リンク切れ検出
🛡️ 超解決

Googleドキュメントで作成した文書にたくさんのリンクを貼ったものの、そのリンクがまだ有効かどうか確認するのは大変です。特に、外部サイトへの参照が多い資料や報告書では、リンク切れが放置されると読者の信頼を損なう可能性があります。この記事では、Apps Scriptを使ってGoogleドキュメント内のすべてのリンクを自動でチェックし、リンク切れを検出する方法を詳しく解説します。スクリプトの書き方から実行手順、注意点までを一通り学べますので、ぜひご活用ください。

【要点】GoogleドキュメントのリンクをApps Scriptで一括チェックする方法

  • getBody().getLinks() で全リンクを取得: ドキュメント本文からすべてのリンクオブジェクトを取得し、URLを抽出します。
  • UrlFetchApp.fetch() でHTTPステータスコードを確認: 各URLにHEADリクエストを送り、200番台なら有効、それ以外ならリンク切れと判定します。
  • Logger.log() で結果を表示: チェック結果をApps Scriptのログに出力し、リンク切れのURLとテキストを確認します。

ADVERTISEMENT

リンクチェックスクリプトの概要と動作の仕組み

Apps Scriptを使ってGoogleドキュメント内のリンクを一括チェックするには、ドキュメントの本文からリンク要素を取得し、そのURLに対してHTTPリクエストを送信して応答を確認します。スクリプトはGoogleドキュメントに紐付いたコンテナバインドスクリプトとして作成します。実行すると、すべてのリンクを順にテストし、有効なリンクと無効なリンク(リンク切れ)をログに記録します。この方法を使えば、数百ものリンクも数分でチェックできます。

Apps Scriptでリンク切れを検出する具体的な手順

以下では、スクリプトの作成から実行、結果の確認までの手順を説明します。サンプルコードも掲載しますので、コピー&ペーストですぐに使えます。

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

  1. Googleドキュメントを開く
    リンク切れをチェックしたいドキュメントをGoogleドキュメントで開きます。
  2. 拡張機能メニューからApps Scriptを起動
    メニューバーの「拡張機能」をクリックし、「Apps Script」を選択します。新しいタブでスクリプトエディタが開きます。
  3. プロジェクトに名前を付ける
    左上の「無題のプロジェクト」をクリックして、わかりやすい名前(例:リンクチェック)を入力します。

スクリプトコードを記述する

  1. エディタにコードを貼り付ける
    デフォルトで表示されているコードをすべて削除し、以下のスクリプトを貼り付けます。
function checkLinks() {
  var doc = DocumentApp.getActiveDocument();
  var body = doc.getBody();
  var links = body.getLinks();
  var total = links.length;
  var valid = 0;
  var broken = 0;
  
  Logger.log('リンクチェック開始:' + total + '件のリンクを確認します。');
  
  for (var i = 0; i < total; i++) {
    var link = links[i];
    var url = link.getUrl();
    var text = link.getText();
    
    try {
      var response = UrlFetchApp.fetch(url, {muteHttpExceptions: true, method: 'get'});
      var status = response.getResponseCode();
      if (status >= 200 && status < 300) {
        valid++;
        Logger.log('OK: ' + text + ' (' + url + ') ステータス: ' + status);
      } else {
        broken++;
        Logger.log('リンク切れ: ' + text + ' (' + url + ') ステータス: ' + status);
      }
    } catch (e) {
      broken++;
      Logger.log('エラー: ' + text + ' (' + url + ') エラー: ' + e.toString());
    }
  }
  
  Logger.log('チェック完了。有効: ' + valid + ', リンク切れ: ' + broken);
}

このコードはドキュメント本文内のすべてのリンクを取得し、各URLにGETリクエストを送信します。ステータスコードが200〜299なら有効、それ以外やエラー発生時はリンク切れと判断します。結果はログに記録されます。

スクリプトを保存して実行する

  1. スクリプトを保存する
    フロッピーディスクアイコンをクリックするか、Ctrl+S(MacならCmd+S)で保存します。
  2. 関数を選択して実行
    エディタ上部の関数ドロップダウンから「checkLinks」を選択し、再生ボタン(▶)をクリックします。
  3. 承認を行う
    初回実行時には権限の承認が求められます。「権限を確認」→「許可」をクリックして、スクリプトがドキュメントの読み取りと外部URLへのアクセスを許可します。
  4. ログを確認する
    実行が完了したら、エディタの「実行」メニューから「ログを表示」をクリックするか、キーボードショートカット Ctrl+Enter(MacならCmd+Enter)でログを開きます。ここにチェック結果が一覧表示されます。

スクリプト使用時の注意点とよくあるトラブル

大量のリンクがある場合の実行時間制限

Apps Scriptには1回の実行で6分間という時間制限があります。リンク数が多すぎるとタイムアウトする可能性があるため、100件を超えるようならスクリプトを分割するか、トリガーを使って時間をずらして実行する工夫が必要です。大量のリンクがある場合は、一度にチェックする数を制限するか、バッチ処理を検討してください。

URLが300件を超えるとエラーになる

UrlFetchApp.fetch()にも1日あたりの呼び出し回数制限(無料アカウントで20,000回/日)がありますが、1回の実行で数百件のリクエストを送っても通常は問題ありません。ただし、リクエストが集中するとGoogleのサーバーから一時的にブロックされる場合があります。その場合は、Utilities.sleep()で数秒の待機時間を入れることで回避できます。

相対リンクや特殊なURLはチェックできない

このスクリプトは、ドキュメント内のハイパーリンクとして設定された絶対URLのみを対象とします。テキストとして書かれたURLや相対リンクは取得できないため、それらをチェックするには別途テキスト解析が必要です。また、mailto:リンクなどはHTTPリクエストの対象外となるため、無視されます。

結果をシートに保存する方法

ログだけでは編集が難しい場合は、結果をGoogleスプレッドシートに出力することも可能です。以下のコードを追加して、リンク切れのリストをシートに書き出すことができます。

function checkLinksToSheet() {
  var doc = DocumentApp.getActiveDocument();
  var body = doc.getBody();
  var links = body.getLinks();
  var sheet = SpreadsheetApp.create('リンクチェック結果 ' + doc.getName());
  var sheet = SpreadsheetApp.openById(sheet.getId());
  sheet.getActiveSheet().appendRow(['リンクテキスト', 'URL', 'ステータス']);
  
  for (var i = 0; i < links.length; i++) {
    var link = links[i];
    var url = link.getUrl();
    var text = link.getText();
    try {
      var response = UrlFetchApp.fetch(url, {muteHttpExceptions: true});
      var status = response.getResponseCode();
      sheet.getActiveSheet().appendRow([text, url, status]);
    } catch (e) {
      sheet.getActiveSheet().appendRow([text, url, 'エラー']);
    }
  }
}

ADVERTISEMENT

通常のリンク確認方法とApps Scriptの比較

項目 手動で1つずつ確認 Apps Scriptで一括チェック
作業時間 リンク数×10秒程度(クリックと戻る) リンク数×1秒弱(スクリプト実行)
正確性 人による見落としが発生 プログラムでHTTPステータスを判定
スキル要件 不要 Apps Scriptの基本知識
応用のしやすさ 結果の保存はメモ帳などに手動 結果をシートに書き出し、メール送信も可能

まとめ

今回はGoogleドキュメントのすべてのリンクをApps Scriptで一括チェックする方法を解説しました。スクリプトを実行すれば、数百件のリンク切れも数秒で検出できます。正確なHTTPステータスコードによる判定なので、手作業の見落としも防げます。ぜひご自身のドキュメントで試してみてください。応用として、結果をスプレッドシートに保存したり、リンク切れをメールで通知する機能を追加することも可能です。スクリプトのカスタマイズに挑戦してみると、さらに便利に使えます。


ADVERTISEMENT

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

超解決 第一編集部

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