GAS実行における日次割当と制限について

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

みなさん、あけましておめでとうございます。

2021年初の記事はGoogle Apps Script(以下、GAS)に関連する日次割当や制限について説明しようと思います。

GASは開発環境の構築などが必要なく、Googleアカウントさえあれば誰でもすぐに開発が行えるため、非常に便利で有用な言語です。しかしながら、手軽に使える反面、いろいろな制限があることをご存知でしょうか?

今回は、こちらの公式ページの翻訳をベースにGASの制限や1日の割当について説明をしようと思います。

さて、一日の割当や制限といってもその制限を超えてしまうとどうなってしまうのかということも含めて話をしようと思います。

Google Apps Scriptの一日の割当や制限とは

GASでは様々なことが自動化できるのですが、何でもかんでも処理を自動化し放題かと言われるとその答えはNoとなります。

例えば、GASでEメールを送信することができますが、システムで送信をする場合、大量のメールを短時間で送ることができます。ただし、そのようなメールの大量送信などができてしまうとスパムメールの送信などに悪用しようとする人が出てきたりする可能性が会ったりしますので、送信回数に制限が設けられています。

ちなみに、GASの制限だけでなく、他のGoogle製品や接続する外部APIの中にはGASとは別に利用回数などの制限が設定されているものも存在します。他のシステムとの連携システムの開発を進める際にはそのような制限についても確認するようにしましょう。

一日の割当や制限を超えてしまうとどうなるのか

一日の割当や制限を超えてしまうと、その時点でプログラムは自動的にエラーを吐き出すようになります。使っているシステムが制限を超えてしまうとその後動かなくなってしまいますので、GAS開発者としては制限を超えないシステム設計が必要になります。

一日の割当や制限超えを解消するためには

割当や制限を超えてしまった場合、解消するための方法は1つしかありません。その方法はズバリ時間が解決してくれます。失恋から立ち直る方法みたいな方法ですが、日次の割当や制限ですので、次の日になれば自然と解決します。

ただし、Googleは海外企業ですので、いつから新しい1日が始まるのかということは長年GASを使った開発を行っている私でさえ未だにわかっていません。

今までの経験上日本時間の午前0時が1日の始まりではないとは思っていますが、詳しい検証など行っていませんので、何時が起点なのかはわかっていません。わかる方いれば教えて下さい!

アカウントの種類によって割当や制限が異なる

GASの制限は、Googleアカウントの種類によって上限数が異なります。以前までは、アカウントは3種類とEarly Accessというアカウント種別とは関係のない上限数が設定されるアカウントが1種類の合計4種類の制限が設定されていましたが、本記事執筆時点(2021年1月)ではGoogleの有料アカウント(Google Workspaceユーザー)と無料アカウント2種類の制限があることが公式ページで確認ができます。

Google公式ページ:Quotas for Google Services(英語ページ)

割当や制限についての注意点

他のGoogleサービスと同じく、制限についてはGoogleの気分次第で通知なく変更されることがあります。

大体の場合、制限が緩和される方向の改定が今までは多い印象ですが、場合によっては利用者に不利な方向に制限がかかる場合があります。私の知る限りではメールの送信回数の制限とスクリプトの1回の処理時間については以前よりも制限が厳しくなりました。(すべての制限の変更を把握していませんので、他にも厳しく変更されたものはあるかもしれません)

中でもスクリプトの処理時間の上限変更については、少なくとも私には相当のインパクトがありました。このような変更が適用されると、今まで正常に動いていたシステムがある日突然エラーが出るようになるといった支障が出る場合がありますので、日次割当や制限の内容についてはいつでも最新の内容を確認できる状態にすることが開発者としては不可欠であると思います。

アカウント別の日次割当一覧表

執筆時点(2021年1月)の日次割当

対象オペレーション 無料アカウント(gmail.com)向け上限数 Google Workspaceアカウント向け上限数
Googleカレンダー予定の作成 5,000個 10,000個
連絡先のコンタクト作成 1,000件 2,000件
Googleドキュメントファイルの作成 250ファイル 1,500ファイル
ファイルの変換 2,000ファイル 4,000ファイル
外部ドメインユーザーへのメール送信 100アドレス 1,500アドレス
同一ドメインユーザーへのメール送信 100アドレス 2,000アドレス
受信メールの読取り及び送信メールの下書きの作成 20,000メール 50,000メール
グループの読取り 2,000回 10,000回
JDBCへの接続 10,000回 50,000回
JDBCへの接続失敗 100回 500回
Googleスライドファイルの作成 250ファイル 500ファイル
スクリプトプロパティの読取りと書き込み 50,000回 500,000回
スプレッドシートファイルの作成 250ファイル 1,500ファイル
トリガー起動による起動合計時間 90分 6時間
URL Fetchコール回数 20,000回 100,000回
Googleマップの静的マップ生成 1,000回 10,000回
Googleマップのルート案内検索 1,000回 10,000回
Googleマップの座標情報によるコール 1,000回 10,000回
Google翻訳コール 5,000回 20,000回
Googleマップの高度検索 1,000回 10,000回

『Google Workspaceアカウントにおける注意点』

新しく作られたGoogle Workspaceドメインの場合で、メールの送信先上限については、ユーザー数が5名以下の場合、最初の請求までの間は無料アカウントと同じ割当となります。6名以上のユーザーがいる場合や、初回の支払いが完了している場合はGoogle Workspaceの割当が適用されます。

アカウント別の制限一覧表

執筆時点(2021年1月)の制限

 

対象のオペレーション 無料アカウント(gmail.com) Google Workspaceアカウント
スクリプトの起動時間 6分 / 実行
スプレッドシートのカスタム関数の起動時間 30秒 / 実行
スクリプトの同時実行数 30個
メールへのファイル添付数 250個 / メール
メール本文のサイズ 200KB / メール 400KB / メール
1メールの送信宛先上限数 50人 / メール
1メールにおける合計添付ファイルサイズ 25MB / メール
1つのスクリプトプロパティデータのサイズ 9KB / 値
スクリプトプロパティの合計サイズ 500KB / プロパティ
トリガー数 20個 / ユーザー / スクリプト
URL Fetchのレスポンスサイズ 50MB / コール
URL Fetchのヘッダーサイズ 100個 / コール
URL FetchのPOSTデータサイズ 50MB / コール
URL FetchのURL文字数 2KB / コール

エラーメッセージ一覧

  • Limit exceeded: 制限を超えたオペレーション内容.

例)Limit exceeded: Email Attachments Per Message.

このメッセージは上記の制限の上限値のいずれかを超えてしまった場合に表示されます。

  • Service invoked too many times: サービス名.

例)Service invoked too many times: Calendar.

1日の割当を超えて対象のサービスを呼び出そうとした場合に表示されます。

  • Service invoked too many times in a short time: サービス名. Try Utilities.sleep(1000) between calls.

例)Service invoked too many times in a short time: Calendar. Try Utilities.sleep(1000) between calls.

短時間の間に対象のサービスを何度も呼び出そうとした場合に表示されます。間にスリープを挟むなどして意図的に呼び出し回数を減らすことでエラー回避できます。

  • Service using too much computer time for one day.

1日に処理を実行できる上限時間を超えた場合に表示されます。主にトリガーで自動起動するシステムを構築している場合、無料アカウントでは90分、有料アカウントでは6時間の上限がありますので、その時間を超えるようなオペレーションがされた場合に表示されることになります。

手動での実行時間の上限は公式には明示されていませんが、公式文書を読む限り、手動実行した場合にもこのエラーが表示される可能性がありそうです。

このエラーメッセージが表示されたら時間を置いてから実行するしか解消方法はありません。

  • Script invoked too many times per second for this Google user account.

このエラーメッセージは短時間に大量の処理が実行された場合に表示されます。特にスプレッドシートのカスタム関数をGASで開発した場合に1つのスプレッドシートから大量の処理が実行されてしまう場合に表示されることが多いようです。

このエラーを回避する方法は、コードを開発する際に対象の範囲を限定するなどして何度も呼び出しがされないように工夫することが必要です。

  • There are too many scripts running simultaneously for this Google user account.

このエラーは1つのアカウントから同時に30個を超える処理がされた場合に表示されます。これは、1つのスクリプトでの実行数の合計数ではなく、ユーザー単位で実行されるスクリプト数の合計になります。

したがって、複数のスクリプトに対してトリガーなどで同じ時間に起動するように設定を行っていたりすると上限を超えてしまう可能性が出てきます。あとは、スプレッドシートのカスタム関数やonEditなどで編集時に起動する処理が設定されている場合にこのエラーが表示される可能性があります。

まとめ

今回はGASにおける利用制限や日次の割当について内容をご紹介しました。GASで開発を行う場合は把握しておくべき内容ですので、頭の片隅に入れておきましょう。

また、Googleサービスの特性上、予告なく制限の内容が変更される可能性もありますので、上記エラーメッセージが表示された場合には公式ページにて制限内容等を確認する癖をつけておくことが必要だと思います。

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

SNSでもご購読できます。

コメントを残す

*