2026年7月追記。
これは、複数のWebサービスを毎朝ざっくり確認するための簡易監視メモです。
本格的な死活監視やSLA監視の代わりではありませんが、個人運用や小さなサービス群を見落とさないための入口としては使いやすい構成です。
実装時は、公式の UrlFetchApp、MailApp、インストール型トリガー を確認しておくと安心です。
Apps Scriptには実行時間やメール送信などの制限があるため、監視対象を増やしすぎないことも大事です。
日々運用している複数の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 spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
const sheet = spreadsheet.getSheetByName('URL監視');
const logSheet = spreadsheet.getSheetByName('ログ');
const urls = sheet
.getRange('A2:A' + sheet.getLastRow())
.getValues()
.flat()
.filter(url => url);
if (urls.length === 0) {
return;
}
const timestamp = new Date();
const results = [];
const errorMessages = [];
urls.forEach(url => {
try {
const response = UrlFetchApp.fetch(url, {
muteHttpExceptions: true,
followRedirects: true,
});
const code = response.getResponseCode();
const status = code === 200 ? 'OK' : 'NG';
results.push([timestamp, url, code, status]);
if (code !== 200) {
errorMessages.push(`サイト異常検知:${url} がステータス ${code} を返しました`);
}
} catch (e) {
results.push([timestamp, url, 'ERROR', 'NG']);
errorMessages.push(`サイト異常検知:${url} にアクセスできません(${e.message})`);
}
});
logSheet.getRange(logSheet.getLastRow() + 1, 1, results.length, 4).setValues(results);
const email = Session.getActiveUser().getEmail();
const subject = errorMessages.length
? '【ステータスチェック】一部サイトに異常あり'
: '【ステータスチェック】全サービス正常稼働中';
const body = errorMessages.length ? errorMessages.join('
') : '全サービス問題なく稼働中。';
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サービスが複数ある方におすすめ。