最初に抑えておくべきGASの実行時間に関する制限
まず最初に知っておくべき制約は、「GASの実行時間」に関する制限値です。GASプログラムの実行にはいくつかのパターンがあり、それぞれに対して制限値が存在します。以下は実行時間に関する主な制約をまとめた表になります。
|
無料Googleアカウント |
Google Workspace アカウント |
スクリプトの実行時間 |
最大6分 |
最大6分 |
カスタム関数の実行時間 |
最大30秒 |
最大30秒 |
アドオンの実行時間 |
最大30秒 |
最大30秒 |
トリガーの実行時間 |
90分/日/ユーザー |
6時間/日/ユーザー |
この表をベースとして、それぞれの制約について、もう少し詳細を掘り下げてみます。
GASを実行する場合の標準的な制限値は6分
GASで作成された一般的なスクリプトの実行時間には制限があり、公式ドキュメントによれば、コンシューマーアカウント(gmail.comなど)とGoogle Workspaceアカウントのいずれにおいても、1回の実行につき最大6分の制限値が存在します。
この制限時間は、スクリプトが連続して動作できる最長時間を意味し、これを超過するとスクリプトは強制的に停止し、「Exceeded maximum execution time」といったエラーメッセージが表示されます。この6分という制限時間が開発における重要な課題となっており 、この制約の中でいかに効率的に処理を行うかが、開発者にとって重要な考慮事項となります。
なぜこのような制限値が存在するのかというと、プラットフォーム全体の安定性を保ち、一部のスクリプトによる過剰なリソース消費を防ぐための基本的な設計と考えられます。開発者コミュニティでこの制限に関する議論が頻繁に行われていることからも 、多くの開発者がこの制約に直面し、その解決策や回避策を模索していることが伺えます。
カスタム関数の実行時間の制限値は30秒
Googleスプレッドシート内で使用されるカスタム関数の実行時間制限は、一般的なスクリプトよりもさらに厳しく、コンシューマーアカウントとGoogle Workspaceアカウントの両方で1回の実行につき30秒となっています 。カスタム関数は、スプレッドシートの数式のように即座に結果を返すことが期待されるため、この短い制限時間は、シートの応答性を維持するための措置と考えられます。Google Workspaceアドオンにも同様な制約があり、ユーザーインターフェースに直結するような動作には共通した制限が設けられていることが考えられます。
Google Workspaceアドオンの実行時間の制限値は30秒
Googleドキュメント、スプレッドシート、スライドなどのGoogle Workspaceアプリケーション内で動作するアドオンの実行時間も、カスタム関数と同様に1回の実行につき30秒に制限されています 。アドオンは、ホストアプリケーションのユーザーインターフェースに直接統合されるため、迅速な動作が求められ、この制限時間は、アプリケーション全体のパフォーマンスを維持するために設けられています。つまり、UI上の操作でボタンを押してから数分待たされる状況は、アプリケーションのUXとして望ましくないため、開発者がそのような実装ができないようにGoogleが制限をかけているのだと思われます。
トリガーには累積実行時間に最大6時間の制限がある
時間主導型トリガーなど、特定のイベントによって自動的に実行されるスクリプトには、1日あたりの総実行時間に制限があります。公式ドキュメントによると、コンシューマーアカウントの場合、1日あたり90分、Google Workspaceアカウントの場合、1日あたり6時間となっています 。この制限を超えると、「Service using too much computer time for one day」というエラーメッセージが表示されます 。アカウントの種類によって総実行時間に差があるのは、ビジネスや教育機関などのGoogle Workspaceユーザーが、より頻繁かつ長時間にわたって自動化スクリプトを利用する可能性を考慮したリソース配分戦略によるものと考えられます。このエラーメッセージは、トリガーによって実行されるスクリプトが、割り当てられた1日の実行時間を使い果たしたことを明確に示しています。
これらの実行時間制限に関する情報は、公式ドキュメントに詳細に記載されており、技術ブログやStack Overflowなどのコミュニティサイトでも、具体的な事例や対応策が議論されています。とくに、6分の実行時間制限は多くの開発者にとって共通の課題であり 、この制限内で処理を完了させるためのさまざまな工夫が共有されています。
GASには同時実行数にも制限がある
GASには、ユーザーごとおよびスクリプトごとの同時実行数にも制限があります。公式ドキュメントによれば、1ユーザーあたり30件、1スクリプトあたり1,000件の同時実行が可能です 。これらの制限は、特定ユーザーやスクリプトによるサーバーリソースの独占を防ぎ、プラットフォーム全体の安定性を維持するために設けられています。この制限を超えると、「There are too many scripts running simultaneously for this Google user account」というエラーメッセージが表示されることがあり、とくGoogleスプレッドシートのカスタム関数が頻繁に呼び出されるような場合に発生しやすいとされています。このエラーメッセージは、ユーザーが同時に実行できるスクリプトの数を超えたことを意味として表しています。
Google Apps Scriptのサービス別制限
GASは、さまざまなGoogleサービスへのアクセスを提供していますが、それぞれのサービスには日々の利用に関する制限(クォータ)が設定されています。これらのクォータは、コンシューマーアカウントとGoogle Workspaceアカウントで異なる場合が多く、開発者は対象とするアカウントの種類に応じて制限値を把握しておく必要があります。詳しくは、Google公式ページの「Google サービスの割り当て」をご参考ください。
引用元:「Google サービスの割り当て」より
Google Apps Scriptのストレージ制限
GASは、スクリプトの実行中に一時的なデータや設定情報を保存するために、Propertiesサービスを利用することができます。しかし、このサービスにもいくつかのストレージ制限が存在します。具体的には、1つのプロパティ値のサイズは最大9 KB、1つのプロパティストアあたりの合計ストレージ容量は500 KBに制限されています 。これらの制限は、Propertiesサービスが、大規模なデータ保存ではなく、スクリプトの設定や小さな一時データの保存を目的としていることを意味しています。
GASの制限事項への対応方法
GASの制限に直面した場合や、制限を回避するためのいくつかのテクニックがあります 。
最初に前提となるアカウント種別を確認する
コンシューマーアカウントとGoogle Workspaceアカウントでクォータが異なることに注意し、対象とするアカウントの種類に合わせて開発を行う必要があります。また、実際の負荷条件下で十分にスクリプトをテストし、問題がないことを確認することが重要です。最新のクォータと制限については、公式ドキュメントを定期的に確認するように意識しましょう。特定の課題に対しては、GASのコミュニティフォーラムで情報交換や解決策のヒントを得ることも有効です。
実行時間制限に対する対策
6分の実行時間制限に対処するためには、長時間実行されるタスクをより小さな関数に分割し、時間主導型トリガーやPropertiesサービスを利用して状態を管理しながら、複数回に分けて実行する方法が一般的です。また、コードを最適化して実行時間を短縮することも重要です。
API呼び出し制限に対する対策
API呼び出しの回数を減らすためには、連携先のAPIが対応していればになりますが、複数のリクエストを一つにまとめて送信するバッチ処理を検討するのが良いと思います。また、一時的なサーバーの過負荷などによりAPI呼び出しが失敗した場合は、指数バックオフとランダムなジッターを実装して再試行する戦略も有効です(一般的なAPI連携のベストプラクティス)。さらに、スクリプトの利用状況を監視し、クォータに近づいているかどうかを把握することも効果的だと思います。
ストレージ制限に対する対策
Propertiesサービスを利用する場合は、保存するデータを最適化し、制限内に収まるように工夫する必要があります。Propertiesサービスのストレージ制限を超える可能性がある場合は、GoogleスプレッドシートやGoogle Cloud Storageなどの代替ストレージソリューションの利用を検討することをオススメします。
まとめ
GASは、適切に活用すれば業務効率を飛躍的に向上させる可能性を秘めた強力なローコード・プラットフォームです。しかし、その能力を最大限に引き出し、安定的に運用するためには、「制限値」という制約を理解し、それを前提とした設計・開発を行うことが不可欠です。制限値は、単なる障害ではなく、より洗練され、効率的で、堅牢なソリューションを構築するための指針を与えてくれるものと捉えることもできます。本記事を最後まで見てくれた皆様が、GASの制限値を意識した開発の重要性を知ることで、Google Workspace環境における自動化・効率化がさらに進んでいくことの一助になれば幸いです。