2022/06/14に更新

【GASで監視】WEBサイトの応答速度をチェックする

スプレッドシート業務改善

指定したWEBサイトの応答速度(レイテンシー)を測定するGoogle Apps Scriptです。利用者から遅いという申告があったときの調査、反論の材料がほしい時などに。

こんな悩みを解決します


  • 自分のWEBサイトの応答速度を継続的にチェックしたい。

用意するもの


特にありません。GoogleスプレッドシートとGASで実現できます。

このスクリプトで出来ること


  • シートに入力されたURLにアクセスし、ページを取得するのにかかった時間を計測、記録できます。
  • エラーが発生した場合はそのエラー内容も記録します。

使い方


1.準備

スクリプトの事前準備エリアを書き換えます。
このスクリプトを登録したスプレッドシートのURLを入れてください。

次に、シートのA1セルにチェックしたいURLを入力します。
入力できるのは1つのURLだけです。複数のURLをチェックしたい場合は、シートを増やしてそれぞれのA1セルに入力してください。
このサンプルでは2列目に「確認日時」「応答時間」「ステータスコード」も入力していますが、無くても問題ありません。

2.テスト実行

URLの入力が終わったら一度テスト実行してみましょう。
上部のメニューから「WEBサイトの応答速度をチェックする」を実行します。
もしボタンがない場合は、スクリプトエディタに戻って関数「onOpen」を一度実行してください。

このように結果が書き込まれれば成功です。

3.トリガーの設定

テスト実行で問題なければトリガーをセットして自動的にチェックしましょう。
間隔はお好みですが、レイテンシーが気になるということであれば最短の1分間隔が無難ですね。

  • 実行する関数: check_response_time
  • 実行するデプロイ: HEAD
  • イベントのソース: 時間主導型
  • 時間ベースのトリガーのタイプ: 分ベースのタイマー
  • 時間の間隔を選択: 1分

4.結果の確認

しばらく放置するとレコードがどんどん増えていきます。
かなりバラつきがある印象ですね。GASのご機嫌もあると思うので、あくまでも参考までに・・・といった感じですね。
丸1日稼働させた結果、平均は198msで、最大は1918msでした。
FQDNではなくIPアドレスを指定したほうが誤差は少なくなると思いますが、CDNを使っている場合はそれも難しいですね。

5.注意点
  • チェック対象のURLは、ご自身が管理しているサイトにしてください。他人のサイトを指定した場合、迷惑をかけてしまうかもしれません。

スクリプト


/**
 * このスクリプトの説明、使い方はこちら。
 * https://myfunc.jp/items/00104/index.html
 */

function onOpen() {
  // スプレッドシートを開いたときに実行される関数

  // UIの取得
  const ui = SpreadsheetApp.getUi()

  // メニューの表示名
  const menu = ui.createMenu('スクリプト実行');

  // メニューに追加するボタン
  menu.addItem('WEBサイトの応答速度をチェックする', 'check_response_time');

  // メニューを画面に追加する
  menu.addToUi();
}

function check_response_time() {

  // ########## 事前準備 ココから ##########

  // このスクリプトが紐付いているスプレッドシートのURLを入力してください
  const ss = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/*******************');

  // ########## 事前準備 ココまで ##########

  // すべてのシートオブジェクトを取得
  const sheets = ss.getSheets();

  // 1シートずつループで処理していく
  for (let i = 0; i < sheets.length; i++) {

    // 監視対象のURL(A1に入っている)を取得する
    let target_url = sheets[i].getRange(1, 1).getValue();

    // サイトにアクセスしたときの返答を格納するための変数を宣言
    let response = '';

    // アクセス実行前の時間をミリ秒で取得する
    let time_before = new Date().getTime();
    Logger.log(time_before);

    // URLフェッチでサイトにアクセスする。エラーが出がちなのでtry catchする
    try {
      response = UrlFetchApp.fetch(target_url).getResponseCode();
    } catch (e) {
      response = e.message; // URLフェッチでエラーが発生した場合はエラーメッセージをresponseに入れる
    }

    // アクセス後の時間をミリ秒で取得する
    let time_after = new Date().getTime();

    // beforeとafterの時間から、レイテンシーを計算する
    let time_diff = time_after - time_before;

    // シートに記録するための値をまとめる
    let result = [new Date(), time_diff, response];

    // シートに追記する
    sheets[i].appendRow(result);

  }
}

関連するアプリ


タグ一覧

最新のアプリ

人気のアプリ

ページトップに戻る
myfunc.jp