Google Apps Script を運用していると、ある日突然 Gmail にこんな通知が届くことがあります。
「スクリプト本番環境を正常に完了できませんでした。失敗のまとめを下記に示します。」
(送信元:noreply-apps-scripts-notifications@google.com)
私の環境でも、実際に定期実行しているスクリプトが停止し、このエラー通知が飛んできたことがありました。
とくにデプロイ後の本番環境(最新版のWebアプリやトリガー実行)で起こりやすいため、原因と対処を整理しておきます。
よくある原因パターン
1. トリガー実行がタイムアウトしている
GAS の無料枠では 6 分・有料枠でも 30 分の実行制限があります。
処理量が増えると Execution time exceeded を内部的に吐きつつ、この通知が届くことがあります。
2. 外部 API の応答遅延や通信エラー
Webhook・LINE API・外部サービスを叩いている場合に頻発します。
Google 側ではなく外部 API の一時的なレスポンス低下が原因で、本番環境の実行が失敗扱いになります。
3. 権限まわりの問題(再認証が必要)
スクリプトを編集したり、別アカウントに切り替えたあと、権限が最新状態に反映されていないと実行が失敗します。
特に Web アプリのデプロイ後に起こりやすい。
4. スプレッドシートの同時編集によるロック
GAS が書き込みしようとしているタイミングで人間が編集していたり、別のスクリプトが同時に動いていると、内部ロックによりエラーが発生します。
5. データ構造の変更にスクリプトが追いついていない
シート列を追加した、入力形式が変わった、外部サービスのレスポンス形式が変わったなどの変更で例外が起こり、失敗メールが飛びます。
対処法まとめ(これだけでOK)
● ログを必ず確認する
エラー通知メールにある「ここをクリック」リンクから Stackdriver ログ(エラーログ)が参照できます。
そこで「どの行で止まったか」「例外内容」を必ず確認する。
● タイムアウトの場合:処理を小分けにして回避
- シートの分割読み込み
- バッチ処理(100件ずつ実行)
- Utilities.sleep() の活用
- 必要に応じて trigger を複数化
これで「本番環境の完了失敗」をかなり防げます。
● 外部 API 系の失敗はリトライ処理を入れる
たとえばこんなシンプルな例:
function fetchWithRetry(url, options, retry = 3) {
for (let i = 0; i < retry; i++) {
try {
return UrlFetchApp.fetch(url, options);
} catch (e) {
Utilities.sleep(500);
}
}
throw new Error("APIが規定回数失敗しました");
}
外部依存スクリプトはこれだけで安定性が格段に上がります。
● 権限エラーの場合:再デプロイと承認のやり直し
- Webアプリの場合は「新しいバージョンを作成→再デプロイ」
- トリガーの場合は削除→再設定
- スクリプトエディタから「Run」→承認ポップアップを再チェック
権限トラブルはこの手順でほぼ解決できます。
● シート同時編集エラーは LockService を使う
function safeWrite() {
const lock = LockService.getScriptLock();
lock.tryLock(5000);
const sheet = SpreadsheetApp.getActiveSheet();
sheet.appendRow([new Date(), "OK"]);
lock.releaseLock();
}
複数ユーザー・複数スクリプトが同時に触れる環境では必須。
この記事のまとめ
この「スクリプト本番環境を正常に完了できませんでした」通知は、決してレアなものではありません。
実装ミスというより、タイムアウト・外部API・権限・シートロックといった “運用上の揺らぎ” が原因で起こります。
通知が来たらまずログを確認し、上記の原因パターンに当てはめてチェックすることで、スムーズに復旧できます。
ZIDOOKA!では、実際のエラー体験から得たノウハウを今後もまとめていく予定です。
参考URL(記事タイトル + URL)
- Google Apps Script トリガーの実行時間制限
https://developers.google.com/apps-script/guides/services/quotas - LockService 公式ドキュメント
https://developers.google.com/apps-script/reference/lock/lock-service - UrlFetchApp 公式ドキュメント
https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app