【Googleドキュメント】Apps Scriptで参照URL一覧を自動抽出!リンク監査

【Googleドキュメント】Apps Scriptで参照URL一覧を自動抽出!リンク監査
🛡️ 超解決

Googleドキュメントにたくさんのリンクを貼ったものの、どのURLが有効か確認するのに手間取っていませんか。一個ずつクリックしてチェックするのは非効率で、リンク切れを見逃すリスクもあります。Google Apps Scriptを使えば、文中の全リンクを自動で一覧化し、各URLのステータスまでチェックできます。この記事では、スクリプトの作成から実行、結果の活用法までを詳しく解説します。

リンク監査を自動化すれば、手作業の時間を大幅に削減できるだけでなく、リンク切れを確実に発見できます。初心者の方でもステップに沿って進められるよう、コードのコピペも用意しました。ぜひ実際のドキュメントで試してみてください。

【要点】Google Apps ScriptでURL一覧を自動抽出する方法

  • スクリプトエディタでコードを貼り付けて実行: 数行のコードでドキュメント内の全リンクを取得できます。実行ボタンを押すだけで結果が新しいシートに出力されます。
  • カスタム関数でリンク切れを検出: URLのHTTPステータスを自動でチェックし、有効・無効を判定します。リンク監査の精度が格段に向上します。
  • トリガー設定で定期実行: 毎日や毎週の自動実行を仕込めば、常に最新のリンク状態を把握できます。手間いらずで運用できます。

ADVERTISEMENT

Apps Scriptでリンク抽出ができる仕組み

Google Apps Scriptは、Googleドキュメントを含むWorkspaceアプリを操作するJavaScriptベースの開発環境です。ドキュメント内のテキストや要素をプログラムで取得・変更できます。リンク(URL)はドキュメント内でハイパーリンクとして埋め込まれており、Apps ScriptのgetUrl()メソッドを使うことで、各段落やインラインテキストからURLを抽出できます。

抽出したURLは、Googleスプレッドシートに一覧として出力するのが一般的です。さらに、UrlFetchAppを使って各URLにリクエストを送信し、HTTPレスポンスコードを確認することでリンク切れを自動判定できます。この仕組みを使えば、数百ものリンクも数秒でチェックできるようになります。

なお、スクリプトの実行には適切な権限が必要です。最初の実行時に「承認」ダイアログが表示されますので、指示に従って許可してください。

リンク一覧を自動抽出する操作手順

手順1: スクリプトエディタを開く

  1. 対象のGoogleドキュメントを開く
    リンクを抽出したいドキュメントをブラウザで開きます。複数のドキュメントがある場合は、まず1つのドキュメントで試すことをおすすめします。
  2. 「拡張機能」メニューからスクリプトエディタを起動する
    メニューバーで「拡張機能」→「Apps Script」をクリックします。新しいタブでスクリプトエディタが開きます。
  3. スクリプトファイルの名前を確認する
    左側のファイルリストに「コード.gs」が表示されます。そのまま使用するか、わかりやすい名前に変更します。

手順2: リンク抽出用のコードを記述する

  1. デフォルトのコードをすべて削除する
    エディタに最初から書かれているサンプルコードをすべて選択して削除します。
  2. 以下のコードをコピーして貼り付ける
    function extractUrls() {
      var doc = DocumentApp.getActiveDocument();
      var body = doc.getBody();
      var paragraphs = body.getParagraphs();
      var urls = [];
      var seen = {};
      for (var i = 0; i < paragraphs.length; i++) {
        var children = paragraphs[i].getChildren();
        for (var j = 0; j < children.length; j++) {
          if (children[j].getType() === DocumentApp.ElementType.TEXT) {
            var text = children[j].asText();
            var url = text.getLinkUrl();
            if (url && !seen[url]) {
              seen[url] = true;
              urls.push(url);
            }
          }
        }
      }
      var sheet = SpreadsheetApp.create("抽出URL一覧_" + new Date().toISOString().slice(0,10));
      var sheetActive = sheet.getActiveSheet();
      sheetActive.getRange(1,1).setValue("抽出日時");
      sheetActive.getRange(1,2).setValue(new Date().toLocaleString());
      sheetActive.getRange(2,1).setValue("URL");
      for (var k = 0; k < urls.length; k++) {
        sheetActive.getRange(k+3,1).setValue(urls[k]);
      }
      Logger.log("抽出完了: " + urls.length + " 件のURL");
    }

    このコードは、ドキュメント内のすべてのハイパーリンクを重複なく抽出し、新しいスプレッドシートに出力します。

  3. コードを保存する
    ツールバーの保存アイコンをクリックするか、Ctrl+Sで保存します。プロジェクト名は任意で設定できます。

手順3: スクリプトを実行する

  1. 実行ボタンをクリックする
    コードエディタ上部の「▶ 実行」ボタンをクリックします。初回は権限の承認画面が表示されます。
  2. 必要な権限を承認する
    「権限の確認」ダイアログでアカウントを選び、「許可」をクリックします。スクリプトがドキュメントとスプレッドシートにアクセスできるようになります。
  3. 実行結果を確認する
    実行が完了すると、自動的に新しいスプレッドシートが作成されます。シートの1行目に抽出日時、2行目以降にURLの一覧が表示されます。

実用的なカスタマイズと注意点

リンク切れを自動判定するコードを追加する

抽出したURLが有効かどうかを確認するには、各URLにHTTPリクエストを送信してステータスコードを取得します。以下のコードを先ほどの関数の末尾に追加することで、リンク切れのチェックも自動化できます。

function checkUrls() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var lastRow = sheet.getLastRow();
  var urls = sheet.getRange(3,1,lastRow-2,1).getValues();
  sheet.getRange(2,2).setValue("ステータス");
  for (var i = 0; i < urls.length; i++) {
    var url = urls[i][0];
    try {
      var response = UrlFetchApp.fetch(url, {muteHttpExceptions: true});
      var code = response.getResponseCode();
      sheet.getRange(i+3,2).setValue(code);
    } catch(e) {
      sheet.getRange(i+3,2).setValue("エラー");
    }
  }
}

この関数を実行すると、URLの横にHTTPステータスコード(200なら正常、404ならリンク切れ)が記載されます。エラーが発生した場合は「エラー」と表示されます。なお、大量のURLをチェックする場合は、UrlFetchAppの呼び出し回数に制限がある点に注意してください。

トリガーを設定して定期実行する

リンク監査を定期的に行いたい場合は、Apps Scriptのトリガー機能を使います。スクリプトエディタのメニューから「時計アイコン」→「トリガーを追加」をクリックし、実行したい関数(例: extractUrls)と時間間隔(毎日、毎週など)を設定します。これにより、手動で実行しなくても自動的にリンク一覧が更新されます。

大量リンクを扱う場合の注意点

ドキュメントに数千件のリンクがある場合、スクリプトの実行時間が6分を超えるとタイムアウトする可能性があります。その場合は、複数のドキュメントに分割するか、スクリプトを複数回に分けて実行する方法を検討してください。また、UrlFetchAppの同時呼び出し制限(1分あたり最大100回)にも注意が必要です。リンクチェックのコードでは、スリープ時間を入れるなどして負荷を調整してください。

ADVERTISEMENT

手動抽出とスクリプト自動抽出の比較

項目 手動で一つずつ確認 Apps Scriptで自動抽出
所要時間(100リンクの場合) 約30分〜60分 数秒〜数分
リンク切れ判定 目視チェック(見落としあり) HTTPステータスコードで自動判定
重複管理 手動で確認・集計 自動的に重複排除可能
定期実行 毎回手動で作業 トリガーで自動化可能
初期設定の手間 なし コード記述と権限承認が必要

まとめ

Google Apps Scriptを使えば、Googleドキュメント内のすべてのリンクを自動で抽出し、一覧化できるようになります。手作業では数十分かかる作業が数秒で完了し、リンク切れの検出もHTTPステータスコードで正確に判定できます。初期設定には少し手間がかかりますが、一度仕組みを作れば毎回の更新で大きな時間を節約できます。

さらに、トリガーを設定すればリンク監査を完全に自動化できます。今回紹介したコードをベースに、自分の用途に合わせてカスタマイズしてみてください。例えば、抽出結果をメールで送信する関数や、特定のドメインだけを抽出する処理も追加可能です。ぜひ活用して、リンク管理の効率を向上させてください。


ADVERTISEMENT

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

超解決 第一編集部

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

SPONSORED