GAS(Google Apps Script)の無料枠で死活監視を行う
Google Apps Script(GAS)を利用する際、気になるのは無料でどこまで使えるのかという点だろう。この記事では、GASの無料枠の制限を整理し、実際にバックエンドサーバーの死活監視APIを叩いてスリープさせないようにするケースを紹介しながら解説する。
GASの主な無料枠の制限
GASの無料枠には次のような制限がある。
項目 | 上限 |
---|---|
1回あたりの最大実行時間 | 6分(360秒) |
1日あたりの合計実行時間 | 90分(5400秒) |
トリガーの数 | 1スクリプトあたり最大 20個 |
URL Fetchの呼び出し回数 | 1日あたり 20,000回 |
メールの送信可能数 | 1日あたり 100通 |
詳細は公式ドキュメントを参照:Quotas for Google Services(公式)
死活監視APIを叩いて無料枠サーバーがスリープしない仕組み
今回の例では、無料で運用しているバックエンドサーバーがスリープしないよう、5分間隔で死活監視APIを叩く仕組みをGASで実装した。
実装手順
以下の手順でGASを設定する。
- 新規にスプレッドシートを作成する。
- 「死活監視用URL一覧」という名前のシートを作成する。
- シートのA列に、死活監視したいURLを記入する。
- スプレッドシートの「拡張機能」メニューから「Apps Script」をクリックし、GASエディタを開く。
- 後述のGAS実装を貼り付けて保存する。
- 後述の手順でトリガーを設定する。
GASによる実装例
function main() {
const urls = getUrlsFromSheet('死活監視用URL一覧');
Logger.log('===== URLのHTTPステータス一覧 =====');
urls.forEach((url, index) => {
const statusCode = fetchHttpStatusCodeWithRetry(url, 3, 30000);
Logger.log(`${index + 1}. URL: ${url}\n HTTPステータス: ${statusCode}`);
});
Logger.log('================================');
}
// 指定シートのA列にあるURLを取得する
function getUrlsFromSheet(sheetName) {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
const lastRow = sheet.getLastRow();
if (lastRow < 1) return [];
const urlRange = sheet.getRange(`A1:A${lastRow}`);
const urls = urlRange.getValues()
.flat()
.filter(url => url); // 空セルを除外
return urls;
}
// URLにアクセスしHTTPステータスコードを返す(リトライ機能付き)
function fetchHttpStatusCodeWithRetry(url, retryCount, intervalMs) {
let statusCode = fetchHttpStatusCode(url);
let attempts = 1;
while (statusCode !== 200 && attempts <= retryCount) {
Logger.log(`Retrying ${url} (${attempts}/${retryCount}) in ${intervalMs / 1000}s...`);
Utilities.sleep(intervalMs);
statusCode = fetchHttpStatusCode(url);
attempts++;
}
return statusCode;
}
// URLにアクセスしHTTPステータスコードを返す
function fetchHttpStatusCode(url) {
const options = { muteHttpExceptions: true };
try {
const response = UrlFetchApp.fetch(url, options);
return response.getResponseCode();
} catch (e) {
Logger.log(`Error accessing ${url}: ${e}`);
return 'Error';
}
}
トリガーの設定方法
- GASエディタの左側メニューから「トリガー」を選択。
- 右下の「トリガーを追加」ボタンをクリック。
- 実行する関数として
main
を指定。 - 実行する頻度を「時間ベースのタイマー」に設定。
- 「分ベースのタイマー」を選択し、任意の時間間隔(例:5分)を設定して保存。
無料枠についての検証
実行時間の上限とURL Fetchの上限のどちらが先に達するかはURL数やレスポンス速度に依存するため、実際に自分の環境で確認するとよい。
実行時間
- スクリプト実行の頻度:5分間隔
- 1日に実行される回数:24時間 × (60分 ÷ 5分) = 288回/日
-
1回あたりの実行時間(最長):約6.5秒
- ※この6.5秒は確認できるログの中で最も長かった実行時間であり、平均値ではない。
1日の合計実行時間の計算は以下の通り。
- 約6.5秒 × 288回 ≈ 1883秒(約31分)
結果として、実行時間は無料枠の範囲内であることが分かる。
URL Fetchの呼び出し回数についての検証
URL数 | 1回の呼び出し数 | 1日あたりの実行回数(5分間隔) | 1日の合計呼び出し数 | 制限内か? |
---|---|---|---|---|
1 | 1 | 288 | 288 | ✅ はい |
5 | 5 | 288 | 1,440 | ✅ はい |
10 | 10 | 288 | 2,880 | ✅ はい |
50 | 50 | 288 | 14,400 | ✅ はい |
69 | 69 | 288 | 19,872 | ✅ はい |
70 | 70 | 288 | 20,160 | ❌ いいえ(上限超過) |
結論
今回のような5分ごとの死活監視は、GASの無料枠内で安心して運用可能であることが確認できた。