GitHub APIレート制限の解説
GitHub RESTおよびGraphQL APIのレート制限の包括的ガイド。認証済みvs未認証の制限、セカンダリレート制限、最適化戦略を学びます。
API Limits
詳細な説明
GitHub APIレート制限
GitHubはREST APIとGraphQL APIの両方にレート制限を適用しています。これらの制限を理解することは、信頼性の高いインテグレーションを構築するために不可欠です。
REST APIの制限
| 認証 | 制限 | ウィンドウ | 秒あたり平均 |
|---|---|---|---|
| 未認証 | 60 | 1時間あたり | 0.017 |
| パーソナルトークン | 5,000 | 1時間あたり | 1.39 |
| GitHub App | 5,000 | 1時間あたり | 1.39 |
| GitHub App (インストール) | 5,000+ | 1時間あたり | 1.39+ |
GraphQL APIの制限
GraphQL APIは単純なリクエストカウントではなく、ポイントベースシステムを使用します:
- 認証ユーザーあたり5,000ポイント/時間
- 各クエリはリクエストされたノードに基づいて計算されたコストを持つ
- シンプルなクエリは1ポイント、100のリポジトリオブジェクトをリクエストするクエリは101ポイントのコストがかかる場合がある
セカンダリレート制限
プライマリレート制限に加え、GitHubはセカンダリ制限を適用します:
- 100以下の同時リクエスト
- REST APIコンテンツ作成(POST、PATCH、PUT、DELETE)は900ポイント/分以下
- GraphQL APIによるコンテンツ生成リクエストは80リクエスト/分以下
レート制限ステータスの確認
X-RateLimit-Limit: 5000
X-RateLimit-Remaining: 4987
X-RateLimit-Reset: 1706140800
X-RateLimit-Used: 13
X-RateLimit-Resource: core
最適化戦略
If-None-Matchを使用した条件付きリクエスト(304レスポンスは制限にカウントされない)- GraphQLを使用して必要なデータのみを1回のリクエストで取得
- ポーリングの代わりにWebhookリスナーを実装
ETagヘッダーを使用してレスポンスをキャッシュ
ユースケース
200のリポジトリで新しいプルリクエストを監視するGitHubインテグレーションを構築しています。各リポジトリチェックには2回のAPIコールが必要です。5,000リクエスト/時の制限内でレイテンシを5分以下に保つポーリング戦略を設計する必要があります。