本記事ではGoogle Apps Script(以下、GAS)に関連する日次割当や制限について説明しようと思います。
GASは開発環境の構築などが必要なく、Googleアカウントさえあれば誰でもすぐに開発が行えるため、非常に便利で有用な言語です。しかしながら、手軽に使える反面、いろいろな制限があることをご存知でしょうか?
今回は、下記の公式ページの翻訳をベースにGASの制限や1日の割当について説明をしようと思います。
Google Apps Scriptの一日の割当や制限とは
GASでは様々なことが自動化できるのですが、何でもかんでも処理を自動化し放題かと言われるとその答えはNoとなります。
例えば、GASではメールをプログラムによって送信することができますが、1日の送信回数に制限が設定されています。
これは、システムで送信をする場合、大量のメールを短時間で送ることができてしまうため、メールの大量送信などができてしまうとスパムメールの送信などに悪用しようとする人が出てきたりする可能性がありますので、制限が設けられているのだと思います。
ちなみに、GASの制限だけでなく、他のGoogle製品や連携するサードパーティアプリの中にはGASとは別に利用回数などの制限が設定されているものも存在します。
他のシステムとの連携システムの開発を進める際にはそのような制限についても確認するようにしましょう。
一日の割当や制限を超えてしまうとどうなるのか
一日の割当や制限を超えてしまうと、その時点でプログラムは自動的にエラーを吐き出すようになります。
使っているシステムが制限を超えてしまうとその後は期待通りに動作しなくなってしまいますので、GAS開発者としては制限を超えないシステム設計が必須になります。
一日の割当や制限超えを解消するためには
割当や制限を超えてしまった場合、解消するための方法は1つしかありません。
失恋から立ち直るみたいな方法ですが、日次の割当や制限ですので、次の日になれば自然と解決します。
ただし、Googleは海外企業ですので、何時に制限がリセットされるのかは長年GASを使った開発を行っている私でさえ未だにわかっていません。
今までの経験上、日本時間の午前0時が1日の始まりではないとは思っていますが、詳しい検証など行っていませんので、何時が起点なのかはわかっていません。
わかる方いればぜひコメントで教えて下さい。
アカウントの種類によって割当や制限が異なる
GASの制限は、Googleアカウントの種類によって上限数が異なります。
以前までは、アカウントは3種類とEarly Accessというアカウント種別とは関係のない上限数が設定されるアカウントが1種類の合計4種類の制限が設定されていましたが、本記事執筆時点(2021年1月)ではGoogleの有料アカウント(Google Workspaceユーザー)と無料アカウント2種類の制限があることが公式ページで確認ができます。
割当や制限についての注意点
他のGoogleサービスと同じく、制限についてはGoogleの気分次第で通知なく内容が変更されることがあります。
今までは、大体の場合、制限が緩和される方向の改定が今までは多い印象ですが、場合によっては利用者に不利な方向に制限がかかる場合があります。
私の知る限りではメールの送信回数の制限とスクリプトの1回の処理時間については以前よりも制限が厳しくなりました。(すべての制限の変更を把握していませんので、他にも厳しく変更されたものはあるかもしれません)
中でもスクリプトの処理時間の上限変更については、少なくとも私には相当のインパクトがありました。
このような開発者にとってマイナスの変更が適用されると、今まで正常に動いていたシステムがある日突然エラーが出てしまう可能性があるので、日次割当や制限の内容については常に最新の内容を把握することが開発者としては不可欠であると思います。
GASの日次割当や制限については、常に最新状態を把握しよう
アカウント別の日次割当一覧表
執筆時点(2022年4月)の日次割当一覧
対象オペレーション | 無料アカウント(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ファイル | 1,500ファイル |
スクリプトプロパティの読取りと書き込み | 50,000回 | 500,000回 |
スプレッドシートファイルの作成 | 250ファイル | 3,200ファイル |
トリガー起動による起動合計時間 | 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回 |
Apps Scriptプロジェクトの作成 | 50回 | 50回 |
『Google Workspaceアカウントにおける注意点』
新しく作られたGoogle Workspaceドメインの場合で、メールの送信先上限については、ユーザー数が5名以下の場合、最初の請求までの間は無料アカウントと同じ割当となります。6名以上のユーザーがいる場合や、初回の支払いが完了している場合はGoogle Workspaceの割当が適用されます。
アカウント別の制限一覧表
執筆時点(2022年4月)の制限一覧
対象のオペレーション | 無料アカウント(gmail.com) | Google Workspaceアカウント |
---|---|---|
スクリプトの起動時間 | 6分 / 実行 | 6分 / 実行 |
スプレッドシートのカスタム関数の起動時間 | 30秒 / 実行 | 30秒 / 実行 |
スクリプトの同時実行数 | 30個 | 30個 |
メールへのファイル添付数 | 250個 / メール | 250個 / メール |
メール本文のサイズ | 200KB / メール | 400KB / メール |
1メールの送信宛先上限数 | 50人 / メール | 50人 / メール |
1メールにおける合計添付ファイルサイズ | 25MB / メール | 25MB / メール |
1つのスクリプトプロパティデータのサイズ | 9KB / 値 | 9KB / 値 |
スクリプトプロパティの合計サイズ | 500KB / プロパティ | 500KB / プロパティ |
トリガー数 | 20個 / ユーザー / スクリプト | 20個 / ユーザー / スクリプト |
URL Fetchのレスポンスサイズ | 50MB / コール | 50MB / コール |
URL Fetchのヘッダー数 | 100個 / コール | 100個 / コール |
URL Fetchのヘッダーサイズ | 8KB / コール | 8KB / コール |
URL FetchのPOSTデータサイズ | 50MB / コール | 50MB / コール |
URL FetchのURL文字数 | 2KB / コール | 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サービスの特性上、予告なく制限の内容が変更される可能性もありますので、上記エラーメッセージが表示された場合には公式ページにて制限内容等を確認する癖をつけておくことが必要だと思います。