このトピックについて
月末の集計作業など、数百件のデータを扱う場面でも快適に動作する仕組みを実装しました。請求書サービスのAPI制限を意識しながら、効率的にデータを処理する設計です。
API制限との付き合い方
多くのクラウドサービスには、API呼び出しの制限があります。請求書サービスも例外ではなく、「1回の取得で100件まで」という制限があります。
自動ページング
「500件ください」とGASから指示するだけで、アプリ側で自動的に5回のやり取りを処理します。
「500件取得してください」
offset=0, limit=100 → 100件取得
レート制限対策
同様に100件ずつ取得(各間に2秒待機)
合計500件をGASに返却
なぜ2秒待機するのか
API呼び出しの間に適度な待ち時間を挟むことで、サービス側に負荷をかけすぎない設計にしています。「アクセスが多すぎます」というエラーを未然に防ぎます。
待ち時間は設定で調整可能です。サービスの負荷状況に応じて、1秒〜5秒の間で設定できます。
必要な分だけ取得(2段階取得)
大量の伝票があっても、最初は「一覧だけ」を高速に取得し、詳細が必要なものだけ追加取得する方式を採用しています。
skip_details: true で明細をスキップ。ID・番号・取引先・日付のみ取得
取引先名や日付で絞り込み。1000件→50件に削減
絞り込んだ50件のみ明細を取得
効果の比較
同時実行制御
複数のAPI呼び出しを効率的に行うため、同時実行数を制御する仕組みを導入しました。
10件の詳細取得リクエストをキューに追加
最大2件を並列で処理
1件完了するたびに次のタスクを開始
10件すべての結果をまとめて返却
なぜ2件同時なのか
並列数を増やしすぎると、サービス側のレート制限に引っかかるリスクが高まります。2件同時は、速度と安定性のバランスが取れた設定です。
最大件数の制限
ユーザーが「10000件取得」と指定しても、アプリ側で最大500件に制限しています。
極端に大きなリクエストは、タイムアウトやメモリ不足の原因になります。適切な上限を設けることで、システムの安定性を確保しています。
大量データが必要な場合
500件を超えるデータが必要な場合は、期間を分割して取得することをお勧めします。
ページング終了の判定
データ取得を繰り返すとき、「もう取得するデータがない」ことを正しく判定する必要があります。
100件リクエスト
取得件数をチェック
この設計で実現できること
運営側にとって
- 安定した大量処理: API制限を意識した設計
- 効率的なリソース利用: 必要な分だけ取得
- タイムアウトの回避: 適切な件数制限
現場担当者にとって
- ストレスのない操作: 大量データでも待ち時間が短い
- 一度の操作で完結: ページングを意識する必要なし
- 確実な結果取得: 途中で止まることがない