EasyBot

EASYBOT GUIDE

429 Too Many Requestsの原因とAPIレート制限の対処法

HTTP 429が返る理由、Retry-Afterの読み方、Discordや外部APIのレート制限を守る再試行方法を紹介します。

429 Too Many Requestsは、短い時間に送った要求がサービスの上限を超えた時に返るHTTPステータスです。要求を連続再送すると制限が長引くため、応答の指示に従って待つ必要があります。

まずRetry-Afterを確認

応答にRetry-Afterがあれば、その秒数または日時まで待ってから再試行します。APIごとに上限は異なり、DiscordではルートやBot単位の制限があるため、固定間隔だけの処理では不十分です。

  • レスポンスヘッダーと本文のretry_afterを確認する
  • 待機中は同じ要求を重ねて送らない
  • 429が続く場合は処理を止めてログを確認する

再試行を安全に設計する

一斉に同じ要求を再送すると、復旧直後に再び制限へ達します。指数バックオフとランダムな待ち時間を使い、再試行回数にも上限を設けます。

  1. 待ち時間を段階的に増やす
  2. 同じ処理が重複しても壊れないよう冪等性を考慮する
  3. 再試行対象を429や一時的な5xxに限定する

Botでよくある原因

イベントごとに大量のメッセージを送る、失敗したログインを高速で繰り返す、スラッシュコマンドを全件更新する処理が原因になります。バッチ化やキューを使い、不要な要求を減らします。

  • 同じ内容の連続送信をまとめる
  • 起動時に毎回グローバルコマンドを更新しない
  • イベントハンドラーの二重登録を確認する

運用時の予防

429の回数、APIルート、待機時間を記録し、急増を検知します。制限回避のためアカウントやIPを切り替える行為はサービス規約違反や停止につながるため行いません。

  • 公式SDKのレート制限対応を利用する
  • キューの並列数を適切に制限する
  • 負荷テストは許可された環境と範囲で行う