GASのスクリプトランタイム制限について
最近Google App Scriptを使用してスプレッドシートの作業自動化を行っているのですが、対象シートの行数が多く、スクリプトランタイムの実行時間制限がネックになってきています。
以前は、Google Workspaceの有料会員であれば、最大30分までと明記されていたようですが、2024年9月24日現在の公式サイトを見ると、有料無料問わず、一律6分までの記載となっています。
スクリプトランタイムが6分を超えても動いているっぽい
ただ、なぜかGoogle Workspace環境でスクリプトを回してみると、明らかに6分オーバーでも問題なく終了しています(エラーハンドリングも特にしていません)。ちなみに以下の赤枠部分は特に長時間動いているところです。
実際どうなのか調べてみた
1. フォーラムで調べてみた
この件に関して公式フォーラムを探してみると、同じ疑問を抱えている人は見つかりましたが、明確な回答は得られませんでした。
生成AIに聞いてみた
公式フォーラム以上の情報はないかな~と思いながらもPerplexityに聞いてみると、それっぽい回答を出してきたのですが、
この状況について説明いたします。
Google Apps Script(GAS)の時間主導型トリガーには、実行時間に関する特別な仕様があります。通常、GASのスクリプトは6分間の実行時間制限がありますが、時間主導型トリガーを使用した場合は例外的に扱われます。
時間主導型トリガーで実行されるスクリプトには、以下の特徴があります:
- 実行時間の延長:
通常の6分制限を超えて、最大30分まで実行を継続できます。- 自動再開機能:
6分経過時点でスクリプトが自動的に一時停止されますが、すぐに再開されます。この過程はユーザーには見えません。- 継続的な実行:
30分以内であれば、スクリプトは中断することなく処理を続行します。- ログの連続性:
再開後も同じログセッションに記録され続けるため、一連の処理として表示されます。このケースでは、スクリプトの総実行時間が約12分(17:04:36から17:16:36まで)ですが、時間主導型トリガーの特性により、6分を超えても正常に完了しています。
ただし、注意点として:
- 30分を超える処理は避けるべきです。
- 長時間の実行は、リソースの効率的な使用の観点から好ましくありません。
- 可能であれば、処理を分割するなどの最適化を検討することをおすすめします。
このような仕様により、時間主導型トリガーは長時間の定期的なタスクに適しています。ただし、過度に長い実行時間は避け、効率的なスクリプト設計を心がけることが重要です。
情報源を教えてくれと聞いたら、ないと言われました…。
Google Apps Script (GAS)の時間主導型トリガーに関する30分の実行時間制限については、公式の情報源を見つけることができませんでした。提供された検索結果にもこの具体的な情報は含まれていません。
一般的なGASの実行時間制限については、以下の情報が確認できます:
- 通常のGASスクリプトの実行時間制限は6分です[4]。
- この6分の制限を超えるための方法として、スクリプト自体が6分後に再度実行するように自身を登録する手法が提案されています[4]。
- 時間主導型トリガーを使用すると、特定の時間や間隔でスクリプトを実行することができます[1][2]。
- トリガーの合計実行時間には、一般ユーザー向けに1日あたり90分という制限があります[4]。
しかし、時間主導型トリガーを使用した場合に実行時間が30分まで延長されるという具体的な情報は、提供された検索結果には含まれていません。
この情報が正確であるかどうかを確認するためには、Google Apps Scriptの公式ドキュメントや、Googleのデベロッパーフォーラムなどで最新の情報を確認することをお勧めします。また、実際にスクリプトを実行して動作を確認することも有効な方法かもしれません。
Citations:
[1] https://auto-worker.com/blog/?p=6397
[2] https://qiita.com/STSHISHO/items/9efe8e7308ba49ca3e74
[3] https://data-x.jp/blog/gassetmintrigger/
[4] https://qiita.com/acronhub/items/bfd5b2fdd329493bc5b6
[5] https://note.com/muuunman/n/n986e5887389d
[6] https://uncle-gas.com/avoid-timeout-error/
[7] https://coporilife.com/437/
[8] https://auto-worker.com/blog/?p=4833
結論
結果として現在は6分超でも動いてはいますが、Googleの気まぐれでいつこの状況が終わってもおかしくないと思うので、大人しくスクリプトの効率化や分割化をして6分以内に収まるようにしていこうと思います…。
コメント