日々運用している複数のWebサービス。
稼働状況をチェックしたいのだけど、手動で調べるのは手間。
サービスによってサーバが分かれていたりすると監視方法が分かれてしまったり、と。
そこで、簡易的なものではあるものの、日々自動で各サービスのステータスコードを取得して、結果をメールで通知する仕組みを構築。
Google Apps Script(GAS)とGoogleスプレッドシートだけで無料、作るのも簡単。
一度作っておけば日々の手間が減らせて快適。
Webサービスの稼働を毎日自動チェックにした背景と目的
複数のサービスを自分で運用していると、「全サービスが正常に動いているか?」をつい気にしてしまうもの。
顧客のものもあるので、出かける前にふと気になってしまったりと。
監視ツールを導入するほどでもないけれど、簡単にチェックできる仕組みが欲しかった。
条件としては、以下の通り。
• 異なるサーバにあるサービスをまとめて監視したい
• 200以外のステータスを返した場合はステータスコードを通知してほしい
• 手軽に運用したい(インフラ不要)
• ログも残しておきたい
これを、GASとスプレッドシートだけで実現することにした。
スプレッドシート構成
使うのは2シート。

• 「URL監視」シート:監視したいURLをA列にずらっと並べるだけ
• 「ログ」シート:実行ごとにログを追記(日時、URL、ステータスコード、OK/NG)

ログシートには実行時にログが書き込まれる。
Google Apps Script(GAS)コード
Apps Script で使っているコードはこちら。
「拡張機能」>「Apps Script」から貼り付けておけばOK。

function checkWebsiteStatuses() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('URL監視');
const logSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('ログ');
const urls = sheet.getRange('A2:A' + sheet.getLastRow()).getValues().flat();
const timestamp = new Date();
const results = [];
let hasError = false;
let errorMessages = [];
urls.forEach(url => {
try {
const response = UrlFetchApp.fetch(url, { muteHttpExceptions: true });
const code = response.getResponseCode();
const status = code === 200 ? '✅ OK' : '❌ 異常';
results.push([timestamp, url, code, status]);
if (code !== 200) {
hasError = true;
errorMessages.push(`サイト異常検知:${url} がステータス ${code} を返しました`);
}
} catch (e) {
hasError = true;
results.push([timestamp, url, 'ERROR', '❌ 異常']);
errorMessages.push(`サイト異常検知:${url} にアクセスできません(例外発生)`);
}
});
// ログを保存
logSheet.getRange(logSheet.getLastRow() + 1, 1, results.length, 4).setValues(results);
// メール通知
const email = Session.getActiveUser().getEmail(); // 実行者のメールアドレス
const subject = hasError ? '【ステータスチェック】一部サイトに異常あり' : '【ステータスチェック】全サービス正常稼働中';
const body = hasError ? errorMessages.join('\n') : '全サービス問題なく稼働中!';
MailApp.sendEmail({
to: email,
subject: subject,
body: body
});
}
• 各URLに対して UrlFetchApp.fetch() を実行し、ステータスコードを取得。
• ステータスが200(成功)なら「✅ OK」、それ以外なら「❌ 異常」。
• 異常があれば hasError を true にし、エラーメッセージに追記。
この状態で実行すれば動作が確認できる。
成功しても失敗してもメールが飛びます。
トリガーで毎朝自動実行
Apps Scriptの「トリガー」設定で、時間主導型トリガーを追加しておく。

・実行する関数を選択:checkWebsiteStatuses
・イベントのソースを選択:時間主導型
・時間ベースのトリガーのタイプを選択:日付ベースのタイマー
・時刻を選択:午前5時〜6時
自分の場合は、毎朝自動チェックを実行して、朝メールを見るときには結果がわかるようにしている。
トリガーは自由に設定できるので、お好みの形で。
導入してみての感想
「Webサービスの生存確認」が手間なくできるのは想像以上にラクです。
GASで完結するので、インフラコストはゼロ。
成功・エラー時どちらもメールがくるようにしているのは、成功時にメールがこないと、自動チェック自体が動いているのか不安になるから。
朝メールを見るときにはメールが届いているので、メンタルにGOOD。
通知はSlackとかでも良いのだけど、個人的にはメールのほうが見るタイミングを制御しやすいのだ。
「GAS + スプレッドシート + メール通知」で、簡易的ではあるものの、手軽だけど実用的なWebサービス監視ツールが作れたかな、と。
運用中のWebサービスが複数ある方におすすめ。