Google Apps Scriptで「Exceeded maximum execution time」が出る原因と対処法|実務ログベース解説

この記事の内容について、業務や開発でお困りの場合は個別に対応できます。

Google Apps Script(GAS)を使っていると、ある日突然、トリガー実行の失敗通知とともに次のエラーに遭遇することがあります。

Exceeded maximum execution time

このエラーは一見すると「処理が重すぎる」「コードが悪い」と思われがちですが、実務で何度か踏んでみると、単純な最適化では解決しないケースが多いことに気づきます。

この記事では、抽象的な設計論に寄せすぎず、実際の業務でこのエラーに遭遇したときに何が起き、どこで判断を変え、どう収束させたかを、作業ログに近い形で整理します。

「Exceeded maximum execution time」とは何が起きている状態か

このエラーは、Google Apps Script が定めているスクリプトの最大実行時間を超過したときに発生します。

重要なのは、

  • コードが文法的に間違っているとは限らない
  • 一度は正常に動いていた処理でも、データ量や条件の変化で突然出る

という点です。

実務では「昨日までは動いていた」「行数が少ないときは問題なかった」という状況で出ることがほとんどです。

実際に起きたケース:夜間トリガーで突然失敗し始めた処理

ある案件で、次のような処理を組んでいました。

  1. 毎晩 23:00 に時間主導トリガーで実行
  2. スプレッドシートを全件走査
  3. 条件に合う行について Gmail で通知

コード自体は特別なことをしておらず、処理内容も明確でした。

ところが、ある日からトリガー実行が失敗し、管理画面には「Exceeded maximum execution time」が表示されるようになりました。

この時点で考えたのは、

  • for ループが重いのではないか
  • GmailApp の呼び出し回数が増えすぎたのではないか

といった、ごく自然な疑問でした。

最初にやりがちな対処と、その時点で感じた違和感

最初に試したのは、よくある対処です。

  • 処理対象の行数を減らす
  • Utilities.sleep() を挟んでみる
  • トリガーを手動実行して様子を見る

しかし、ログを見ると、すでに実行時間は 5 分以上かかっており、少し調整したところで根本的に解決しないことが分かりました。

ここで重要だったのは、「処理が遅い」というよりも、「一度にやろうとしている量が多すぎる」という感覚でした。

判断を変えたポイント:全部やる前提をやめる

このエラーが出た時点で、次の判断をしました。

  • 1 回の実行で全件処理するのをやめる
  • 処理途中で止まっても再開できる形にする

具体的には、スクリプトプロパティを使って処理位置を保持し、1 回の実行で処理する件数を制限しました。

結果として、1 回あたりの実行時間は 1〜2 分程度に収まり、トリガー実行でも安定して完走するようになりました。

この時点で初めて、「Exceeded maximum execution time」はコードの最適化ではなく、作業の切り方の問題だったと腹落ちしました。

このエラーが出やすい典型的な状況

実務で見てきた限り、このエラーは次のような状況で発生しやすいです。

  • スプレッドシートを行単位でループ処理している
  • GmailApp / DriveApp / CalendarApp をループ内で多用している
  • UrlFetchApp を大量に実行している
  • 夜間トリガーでデータ量が徐々に増えている

いずれも、「処理内容」そのものより、「一度に処理している量」が問題になります。

実務的に有効だった対処の考え方

このエラーに対して有効だったのは、次のような考え方です。

  • 1 回の実行で完了させようとしない
  • 途中で止まっても問題ない前提にする
  • 失敗ではなく、分割の合図として扱う

結果として、

  • 夜中にエラー通知が来なくなった
  • データ量が増えても処理が破綻しなくなった

という状態に落ち着きました。

それでも解決しない場合に考えること

分割しても解決しない場合、そもそも GAS で扱う範囲を超えているケースがあります。

  • 数万〜数十万行規模のデータ処理
  • 外部 API を大量に叩く処理
  • OCR や PDF 処理などの重い処理

この場合は、無理に GAS に寄せるよりも、別の手段を検討した方が結果的に早く安定します。

まとめ

「Exceeded maximum execution time」は、単なるエラーではなく、

  • 作業の切り方を見直すタイミング
  • 一度にやりすぎていることへの警告

として現れることが多いエラーです。

実務では、完璧に速いコードを書くよりも、止まらずに回り続ける構成を選ぶ方が重要になる場面が少なくありません。

このエラーに遭遇した場合は、「どこを速くするか」ではなく、「どこで区切るか」を一度立ち止まって考えてみると、解決への道筋が見えやすくなります。


実行時間超過の原因調査や、既存スクリプトの分割・安定化対応も行っています。 お困りの際は、お気軽にご相談ください。

ZIDOOKA!

この記事の内容について、対応できます

この記事に関連する技術トラブルや開発上の問題について個別対応を行っています。

個別対応は3,000円〜 内容・工数により事前にお見積りします
最後までお読みいただきありがとうございました

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

AI活用に関するポリシー

当サイトでは、記事の執筆補助にAIを活用する場合がありますが、全面的な委任は行いません。