こんにちは、凛です。GASのトリガーが裏で失敗していて、気付かず数日経ってた経験ありませんか?今日はトリガー失敗時に自動でエラーメールを送る実装を解説します。
問題:GASトリガー失敗は気付きにくい
通常GASエディタの「実行」タブを見ないとエラーがわからない。トリガー実行は裏で動くので、気付くまで数日かかることも。
最短実装:try-catch + メール通知
function myTriggerFunction() {
try {
// 本来の処理
doRealWork();
} catch (e) {
notifyError(e, 'myTriggerFunction');
throw e; // 再スロー(GAS側のログにも残す)
}
}
function notifyError(error, funcName) {
const subject = `[GASエラー] ${funcName}`;
const body = `
時刻: ${new Date().toLocaleString('ja-JP')}
関数: ${funcName}
エラー: ${error.message}
スタックトレース:
${error.stack}
`;
GmailApp.sendEmail('your@email.com', subject, body);
}
これでエラー発生 → 即メール届く。
全関数に共通でラップする方法
function withErrorNotify(fn, name) {
return function() {
try {
return fn.apply(this, arguments);
} catch (e) {
notifyError(e, name);
throw e;
}
};
}
// 使い方
const safeMyTask = withErrorNotify(myTask, 'myTask');
// トリガーには safeMyTask を登録
Slack通知バージョン
function notifyErrorSlack(error, funcName) {
const SLACK_WEBHOOK = PropertiesService.getScriptProperties().getProperty('SLACK_WEBHOOK');
const payload = {
text: `🚨 *GASエラー: ${funcName}*\n${error.message}\n\`\`\`${error.stack}\`\`\``
};
UrlFetchApp.fetch(SLACK_WEBHOOK, {
method: 'post',
contentType: 'application/json',
payload: JSON.stringify(payload)
});
}
Slack Incoming Webhook URLを使うパターン。チームで運用するならSlackの方が見落としにくい。
ログをスプシに残す
function logError(error, funcName) {
const sheet = SpreadsheetApp.openById('LOG_SHEET_ID').getSheetByName('errors');
sheet.appendRow([new Date(), funcName, error.message, error.stack]);
}
メール+スプシ記録の二段構えで運用すると、長期トレンドも見えて便利。
まとめ
- try-catchでエラー捕捉→自分にメール送信
- 全関数共通ラッパーで漏れなくカバー
- Slack/スプシログと組み合わせて多層通知
- 必ず
throw e;でGAS実行ログにも残す
「いつの間にか止まってた」を防ぐ最重要パターンです。
関連記事
この記事を書いた人:凛
2児のママで現役ナース。夜勤明けの細切れ時間を副業GASに投じ、月5〜8万円の副収入を継続中。「看護師でもコードは書ける」を合言葉に、家事育児とプログラミングを両立する等身大の情報を発信しています。本記事のコードは静的検証済みです(構文・API仕様・ロジックを確認)。