指定したWEBサイトの応答速度(レイテンシー)を測定するGoogle Apps Scriptです。利用者から遅いという申告があったときの調査、反論の材料がほしい時などに。
特にありません。GoogleスプレッドシートとGASで実現できます。
スクリプトの事前準備エリアを書き換えます。
このスクリプトを登録したスプレッドシートのURLを入れてください。
次に、シートのA1セルにチェックしたいURLを入力します。
入力できるのは1つのURLだけです。複数のURLをチェックしたい場合は、シートを増やしてそれぞれのA1セルに入力してください。
このサンプルでは2列目に「確認日時」「応答時間」「ステータスコード」も入力していますが、無くても問題ありません。
URLの入力が終わったら一度テスト実行してみましょう。
上部のメニューから「WEBサイトの応答速度をチェックする」を実行します。
もしボタンがない場合は、スクリプトエディタに戻って関数「onOpen」を一度実行してください。
このように結果が書き込まれれば成功です。
テスト実行で問題なければトリガーをセットして自動的にチェックしましょう。
間隔はお好みですが、レイテンシーが気になるということであれば最短の1分間隔が無難ですね。
しばらく放置するとレコードがどんどん増えていきます。
かなりバラつきがある印象ですね。GASのご機嫌もあると思うので、あくまでも参考までに・・・といった感じですね。
丸1日稼働させた結果、平均は198msで、最大は1918msでした。
FQDNではなくIPアドレスを指定したほうが誤差は少なくなると思いますが、CDNを使っている場合はそれも難しいですね。
/**
* このスクリプトの説明、使い方はこちら。
* 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);
}
}