Google カレンダー API には、すべてのユーザーが公平に利用できるようにするための割り当てがあります。カレンダー API を使用する際は、次の 3 つの重要な制限事項を考慮する必要があります。
API 使用量割り当て: プロジェクトごと、ユーザーごとに適用されます。詳細については、カレンダー API の使用割り当てタイプをご覧ください。
Google カレンダーの一般的な使用上限: Google Calendar API は、Google Workspace システムの全体的なパフォーマンスを保護するための制限がある共有サービスです。詳しくは、カレンダーの使用制限を回避するをご覧ください。
運用上の上限: これらの上限はいつでも制限される可能性があります。たとえば、1 つのカレンダーに連続して書き込もうとした場合などです。
Calendar API の割り当て
次の 2 種類の割り当てが適用されます。
プロジェクトあたりの 1 分あたりのリクエスト数: これは、Google Cloud プロジェクトが 1 分間に送信できるリクエストの数です。
1 プロジェクト、1 ユーザー、1 分あたり: これは、特定のユーザーがクラウド プロジェクトで実行できるリクエストの数です。この上限は、ユーザー間で公平に利用状況を分配できるようにすることを目的としています。
割り当ては、スライディング ウィンドウを使用して 1 分ごとに計算されます。1 分間に 1 分あたりの割り当てを超えるトラフィックが急増すると、次のウィンドウでレート制限が行われ、平均使用量が割り当て内に収まるようになります。
次の表に、これらの上限の詳細を示します。
| 使用量上限のタイプ | 上限 |
|---|---|
| プロジェクトあたり毎分 | 10,000 件のリクエスト |
| 1 分、1 ユーザー、1 プロジェクトあたり | 600 リクエスト |
1 日の最低配信数
このプロジェクトごとの 1 日あたりの上限は、料金が発生する前に Google Cloud プロジェクトが 24 時間以内に使用できるリクエストの最大数を定義します。
このしきい値以下の使用量については追加料金は発生せず、Google Cloud アカウントに請求されることもありません。請求に関する詳細については、2026 年後半に、変更が適用される少なくとも 90 日前までに通知いたします。
この 1 日あたりのしきい値の上限の引き上げをリクエストすることはできません。
次の表に上限の詳細を示します。
| しきい値の上限の種類 | 上限 |
|---|---|
| プロジェクトごとに 1 日あたり | 1,000,000 件のリクエスト |
詳細については、エージェント ツールと API の Google Workspace 標準化モデルをご覧ください。
時間ベースの割り当てエラーを解決する
時間ベースのエラー(X 分あたり最大 N 回のリクエスト)については、コードで例外をキャッチし、切り捨てられた指数バックオフを使用して、デバイスが過剰な負荷を生成しないようにすることをおすすめします。
指数バックオフは、ネットワーク アプリケーションの標準的なエラー処理方法です。指数バックオフのアルゴリズムは、リクエスト間の待ち時間の間隔を最大バックオフ時間まで増加させながら、指数関数的にリクエストを再試行します。リクエストがまだ成功しない場合は、リクエストが成功するまでリクエスト間の遅延が時間とともに増加することが重要です。
アルゴリズムの例
指数バックオフのアルゴリズムは、再試行の待ち時間の間隔を最大バックオフ時間まで増加させながら、指数関数的にリクエストを再試行します。次に例を示します。
- Google カレンダー API にリクエストを送信します。
- リクエストが失敗した場合、1 +
random_number_milliseconds秒待ってから、リクエストを再試行します。 - リクエストが失敗した場合、2 +
random_number_milliseconds秒待ってから、リクエストを再試行します。 - リクエストが失敗した場合、4 +
random_number_milliseconds秒待ってから、リクエストを再試行します。 - このようにして、最大
maximum_backoff時間まで繰り返します。 - 再試行の最大回数まで待機と再試行を続行しますが、再試行の間の待ち時間は増加させません。
ここで
- 待ち時間は
min(((2^n)+random_number_milliseconds), maximum_backoff)で、nは繰り返される(リクエスト)のたびに 1 増加します。 - 上記のフローで、
random_number_millisecondsは、1,000 ミリ秒以下の乱数です。これにより、ある状況で、多数のクライアントが同期して再試行を一度に実行し、リクエストが同時に次々と送信されるような状況を避けることができます。random_number_millisecondsの値は再試行リクエストの後に毎回再計算されます。 - 通常、
maximum_backoffは 32 秒または 64 秒です。適切な値はユースケースによって異なります。
クライアントは、maximum_backoff 時間が経過した後も再試行を続けることができます。この時点より後の再試行では、バックオフ時間を増加させ続ける必要はありません。たとえば、クライアントで 64 秒の maximum_backoff 時間が使用されている場合、この値に達した後は、クライアントは 64 秒ごとに再試行を繰り返します。無限に再試行することは、クライアントが、どこかの時点で止める必要があります。
適切な再試行間の待ち時間と再試行回数は、ユースケースとネットワークの状態により異なります。
料金
Google カレンダー API の標準的な使用はすべて追加料金なしでご利用いただけます。割り当てリクエストの上限を超えると、2026 年後半に Google Cloud 請求先アカウントに料金が発生する予定です。詳細については、エージェント ツールと API の Google Workspace 標準化モデルをご覧ください。
割り当ての増加をリクエストする
プロジェクトのリソース使用量に応じて、割り当ての調整をリクエストできます。サービス アカウントによる API 呼び出しは、単一のアカウントを使用していると見なされます。割り当ての調整を申請しても、必ずしも承認されるとは限りません。割り当て値を大幅に増やす割り当て調整リクエストは、承認に時間がかかることがあります。
割り当て量はすべてのプロジェクトで同じとは限りません。Google Cloud の使用量が多くなるに伴い、割り当て値を増やす必要が生じることがあります。使用量の大幅な増加が見込まれる場合は、事前に Google Cloud コンソールの [割り当てとシステム上限] ページから割り当ての調整をリクエストできます。
詳細については、次のリソースをご覧ください。
トラブルシューティング
いずれかの割り当てを超えると、レートが制限され、クエリに対するレスポンスとして 403
usageLimits ステータス コードまたは 429
usageLimits ステータス コードが返されます。
その場合は、次のことをお試しください。
指数バックオフの使用、トラフィック パターンのランダム化、プッシュ通知の使用など、すべてのベスト プラクティスに従ってください。
プロジェクトが拡大し、ユーザーが増えた場合は、割り当ての引き上げをリクエストできます。
ユーザーごとの割り当て上限に達した場合は、次の操作を行うことができます。
サービス アカウントを使用する場合は、ユーザーに負荷を割り当てるか、複数のサービス アカウント間で負荷を分割します。
ユーザーあたりの割り当ての増加をリクエストすることはできますが、一般に、アプリケーションが他の種類の上限(一般的なカレンダーの使用量上限や運用上の上限など)に達する可能性があるため、デフォルト値を超えて増加させることはおすすめしません。
本番環境プロジェクトと同様の構成を持つテスト専用のプロジェクトを登録して、割り当て上限をテストします。詳細については、テスト割り当て上限の処理をご覧ください。
トラフィック パターンをランダム化する
カレンダー クライアントは、複数のクライアントが同時にオペレーションを実行することで、トラフィック パターンが急増する傾向があります。たとえば、カレンダー クライアントの一般的な悪い習慣として、午前 0 時に完全同期を行うことがあります。これにより、1 分あたりの割り当てを超え、レート制限とバックオフが発生する可能性が非常に高くなります。
これを回避するには、可能な限りトラフィックが 1 日を通して分散されるようにします。クライアントが毎日同期する必要がある場合は、クライアントにランダムな時間(クライアントごとに異なる)を決定させます。オペレーションを定期的に実行する必要がある場合は、間隔を +/- 25% 変更します。これにより、トラフィックがより均等に分散され、ユーザー エクスペリエンスが大幅に向上します。
プッシュ通知を使用する
一般的なユースケースは、ユーザーのカレンダーで変更が発生するたびにアクションを実行することです。ここでアンチパターンとなるのは、対象となるすべてのカレンダーを繰り返しポーリングすることです。これにより、割り当てがすぐに使い果たされます。たとえば、アプリケーションに 5,000 人のユーザーがいて、各ユーザーのカレンダーを 1 分に 1 回ポーリングする場合、作業を行う前から 1 分あたり 5,000 件以上の割り当てが必要になります。
サーバーサイド アプリケーションはプッシュ通知に登録できます。これにより、関心のあるイベントが発生したときに通知を受け取ることができます。設定には手間がかかりますが、割り当てを大幅に効率的に使用でき、ユーザー エクスペリエンスも向上します。通知を受け取る eventType を指定してください。詳しくは、プッシュ通知をご覧ください。
サービス アカウントによる適切な割り当て
アプリケーションがドメイン全体の委任を使用してリクエストを実行している場合、デフォルトでは、権限を借用しているユーザーではなく、サービス アカウントに対して「プロジェクトごとのユーザーごとの 1 分あたりの」割り当てが課金されます。つまり、サービス アカウントが複数のユーザーのカレンダーで動作している場合でも、割り当てが不足してレート制限される可能性があります。
これを避けるには、quotaUser URL パラメータ(または x-goog-quota-user HTTP ヘッダー)を使用して、どのユーザーに請求するかを指定します。これは割り当ての計算にのみ使用されます。詳細については、ユーザーあたりのリクエスト数を制限するをご覧ください。
割り当て上限の処理をテストする
アプリケーションが実際に割り当て上限に達した場合に適切に対処できること(たとえば、指数バックオフによる再試行など)を確認し、ユーザーへの潜在的な影響を最小限に抑えるため、実際の環境でシナリオをテストすることを強くおすすめします。
実際のアプリケーションの使用に影響を与えずにテストするには、Google Cloud コンソールでテスト専用のプロジェクトを別途登録し、本番環境プロジェクトと同様の方法で OAuth 同意画面を構成することをおすすめします。次に、このプロジェクトに人為的に低い割り当て上限を設定し、アプリケーションの動作を観察します。