ADVERTISEMENT

【Googleスプレッドシート】Apps Scriptの実行制限!1日のクォータと回避策

【Googleスプレッドシート】Apps Scriptの実行制限!1日のクォータと回避策
🛡️ 超解決

Googleスプレッドシートを活用していると、Apps Scriptの実行制限に引っかかって思うように動かないことがあります。特に1日のクォータは、業務で多用する場合に大きな壁となります。この記事では、Apps Scriptのクォータの種類と具体的な制限値、そしてその制限を回避するための実践的な方法を詳しく解説します。制限に悩んでいる方は、ぜひ参考にしてください。

【要点】Apps Scriptのクォータを正しく理解し、回避策を実践する

  • メール送信制限: 無料アカウントでは1日100通まで、Workspaceアカウントでは1日1500通まで送信できます。
  • トリガー実行制限: 時間主導型トリガーは1日あたりの総実行時間に制限があり、特に無料アカウントでは合計90分です。
  • 回避策としてのCacheService: 同じ計算を繰り返さないようにCacheServiceで結果を保存し、処理回数を減らします。
  • トリガー間隔の調整: 必要最小限の頻度に設定することで、クォータ消費を抑えられます。

ADVERTISEMENT

Apps Scriptのクォータとは

Apps Scriptには、1日あたりの実行可能な回数やリソース量に上限が設定されています。これは、Googleのサーバーリソースを公平に利用するための仕組みです。無料の個人アカウントと、Google Workspaceのビジネスアカウントでは制限値が大きく異なります。たとえば、メール送信は無料アカウントで1日100通までですが、Workspaceアカウントでは1日1500通まで可能です。また、スクリプトの総実行時間にも制限があり、無料アカウントでは1日あたり合計90分、Workspaceでは360分までとなります。これらのクォータは、スクリプトが複雑になればなるほど消費しやすくなるため、事前に把握しておくことが重要です。

主なクォータの種類と制限値

以下は、主なクォータ項目とその制限値をまとめた表です。無料アカウントとWorkspaceアカウントで比較しています。

クォータ項目 無料アカウント Workspaceアカウント
メール送信数(1日) 100通 1,500通
トリガー総実行時間(1日) 90分 360分
URL取得(UrlFetchApp) 20,000回/日 100,000回/日
CacheService保存 250MB/日 1GB/日
スクリプト実行時間(1回あたり) 6分 30分
同時実行数 30 30

これらの制限を超えると、スクリプトはエラーで停止します。特に、トリガーの総実行時間やメール送信数はよく超過するため、注意が必要です。

クォータ超過を回避する方法

  1. CacheServiceを利用して処理を減らす
    CacheServiceを使うと、一度計算した結果を一時的に保存できます。同じデータを何度も取得するスクリプトでは、キャッシュに保存してから読み出すことで、URL取得やデータベースアクセスなどのクォータ消費を大幅に削減できます。使用例として、CacheService.getScriptCache().put(key, value, seconds)で保存し、get(key)で取得します。
  2. トリガーの間隔を適切に設定する
    時間主導型トリガーは、必要以上に頻繁に設定しないようにします。たとえば、毎分実行するのではなく、5分ごとや1時間ごとに変更するだけで、1日の総実行時間が大幅に減少します。また、特定の時間帯だけ実行するように条件分岐を追加することも有効です。
  3. メールの一括送信を避ける
    大量のメールを送信する場合は、一度に送るのではなく、スクリプトを複数回に分けて実行するか、MailApp.sendEmail()の代わりにGmailApp.sendEmail()を使用すると、送信制限が緩和される場合があります。ただし、GmailAppは1日100通の制限は同じです。Workspaceアカウントでは、代わりにGmailAppのクォータが異なる場合があるので確認が必要です。
  4. PropertyServiceで永続化情報を保存する
    PropertyService(Script Properties、User Properties、Document Properties)を使って、データを永続的に保存できます。一時的な計算結果をキャッシュに保存しつつ、設定値など変更頻度の低いデータはPropertyServiceに保存することで、CacheServiceの容量クォータを節約できます。
  5. 複数のアカウントで分担する
    どうしてもクォータを超える場合は、処理を複数のアカウントに分散させる方法もあります。ただし、管理が煩雑になるため、最終手段として検討しましょう。

ADVERTISEMENT

注意点と制限事項

トリガー同時実行制限に注意する

Apps Scriptには1アカウントあたりの同時実行数が30までという制限があります。トリガーが大量に同時に起動すると、30を超えた分はキューに入り、実行が遅れる可能性があります。そのため、トリガーの間隔は十分に空ける必要があります。また、実行時間が長いスクリプトを同時に動かすと、総実行時間のクォータもすぐに消費されます。

一回の実行時間制限

無料アカウントでは一回のスクリプト実行時間が最大6分、Workspaceでは30分です。この制限を超えるとスクリプトは強制終了されます。長時間かかる処理は、分割して実行する必要があります。たとえば、大量のデータを処理する場合は、トリガーを使って少しずつ処理する方法をとります。

CacheServiceの有効期限

CacheServiceに保存できるデータの有効期限は最大6時間です。それ以上保持したい場合はPropertyServiceを使用します。また、キャッシュのサイズ上限もあるため、保存するデータ量に注意してください。

Workspaceアカウントでも制限はある

Workspaceアカウントは無料アカウントより制限が緩和されていますが、それでも絶対的な上限は存在します。特にメール送信数やURL取得回数は、業務で大量に使うと制限に引っかかることがあります。必要に応じて、Google Cloud Platform(GCP)の課金アカウントと連携することで、一部のクォータを拡張できる場合もあります。

各回避策の比較

回避策 効果 注意点
CacheService URL取得や計算を減らせる 有効期限6時間、容量制限あり
トリガー間隔調整 総実行時間を削減 処理タイミングが遅れる可能性
メール送信の分散 クォータ超過を防ぐ コード修正が必要
PropertyService 永続化でき容量節約 キャッシュほど高速ではない
複数アカウント クォータを実質増加 管理が複雑、セキュリティリスク

まとめ

この記事では、Apps Scriptの1日クォータの種類と制限値、そして回避策について解説しました。CacheServiceやトリガー間隔の調整を適切に行うことで、多くの場合クォータ問題を解決できます。まずは自分のスクリプトがどのクォータを消費しているかを把握し、最も効果的な対策を選びましょう。さらに高度な対策として、Google Cloud Platformの連携も検討するとよいでしょう。


ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。