mcpField
S
supabase-rate-limits

supabase-rate-limits

github.com/jeremylongshoreクラウド・DevOps2.9k48 回インストール2 日前に更新
リポジトリ

supabase-rate-limits について

Supabase プロジェクトを管理する開発者向けのスキルです。プラン別の API クォータに加え、接続プール、リトライ、ページネーション、一括書き込みの方法を案内します。

主な機能

  1. 01プラン別 API クォータの確認
  2. 02Supavisor による接続プール設定
  3. 03429 とプール枯渇へのバックオフ付きリトライ
  4. 04読み取りのページネーションと一括書き込み
  5. 05ダッシュボードでの API 使用量監視

活用シーン

  1. 01Supabase のプランに応じたリクエスト量の計画
  2. 02サーバーレス関数向けデータベース接続プールの設定
  3. 03レート制限やプール枯渇への対応
  4. 04大量読み取りや複数書き込みのリクエスト削減

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/jeremylongshore/tons-of-skills-marketplace --skill supabase-rate-limits

インストール後、Claude Code で/supabase-rate-limitsを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
errors.md
examples.md
implementation.md
rate-limit-tiers.md

詳細

Supabase のレート制限

概要

Supabase は、PostgREST、Auth、Storage、Realtime、Edge Functions のすべての API サーフェスでレート制限とクォータを適用しており、数値はプランの階層によって異なります。このスキルでは、階層ごとの正確な制限、Supavisor によるコネクションプーリング、リトライ/バックオフとページネーションのパターン、ダッシュボードでの監視について説明します。クォータの範囲内に収め、429 エラーを適切に処理できます。

前提条件

  • 有効な Supabase プロジェクト(いずれのプランでも可)
  • @supabase/supabase-js v2 以降がインストール済み
  • プロジェクト URL と anon/service-role キーが利用可能
  • Node.js 18 以降、または同等のランタイム

手順

ステップ 1 — プランの制限を確認する

レート制限はサーフェスやプランによって異なります。主な API 制限は次のとおりです。

指標FreeProEnterprise
1 分あたりのリクエスト数(RPM)5005,000無制限(カスタム)
1 日あたりのリクエスト数(RPD)50,0001,000,000無制限(カスタム)

Auth、Storage、Realtime、Edge Functions、Database の接続には、それぞれ独自のクォータがあります。設計を始める前に、rate-limit-tiers.md でサーフェスごとの制限の全容を確認してください。

ステップ 2 — Supavisor でコネクションをプールする

Supavisor は Supabase に組み込まれたコネクションプーラー(PgBouncer に代わるもの)です。ワークロードに応じてモードを選択してください。

用途モードポート
サーバーレス/Edge Functionsトランザクション6543
Next.js API ルートトランザクション6543
長時間実行するワーカーセッション5432
Realtime サブスクリプション直接接続(プーラーなし)5432
Prisma/Drizzle ORMトランザクション + ?pgbouncer=true6543

トランザクションモード(ポート 6543)では、各トランザクションの後にコネクションがプールへ返されるため、サーバーレスに適した標準設定です。セッションモード(ポート 5432)では、LISTEN/NOTIFY とプリペアドステートメント用に専用コネクションを保持します。クライアントの完全なセットアップと接続文字列の形式については、implementation.md を参照してください。

ステップ 3 — リトライ、ページネーション、バッチ処理を行う

429 エラーとプール枯渇を認識する指数バックオフのリトライで、クエリをラップします。

// Retryable when the error is a rate limit, "too many requests",
// code 429, or PGRST000 (connection pool exhausted). Delay doubles
// per attempt with jitter, capped at maxDelayMs, honoring Retry-After.
const users = await withRetry(() =>
  supabase.from('users').select('id, email, created_at').eq('active', true)
)

次に、リクエスト量を 2 つの方法で減らします。大きな読み取りには .range(from, to) を使ってページネーションを適用し、レスポンスを小さく保ってタイムアウトを回避します。また、N 件の書き込みを 1 回のバッチ upsert にまとめます(1 リクエストあたり最大約 1000 行。これを超えるデータは分割してください)。withRetry、fetchPaginated、バッチ/chunk ヘルパーの全容と、ダッシュボードでの監視手順については、implementation.md を参照してください。

出力

このスキルを適用すると、次の状態になります。

  • プランごとのレート制限を明確に把握できます(Free:500 RPM/50K RPD、Pro:5K RPM/1M RPD)
  • Supavisor によるコネクションプーリングが設定されます(サーバーレス向けのトランザクションモード、ポート 6543)
  • 429 エラーを処理する指数バックオフ付きのリトライラッパーが用意されます
  • .range(0, 99) を使ったページネーション付きクエリで、ペイロードサイズを削減できます
  • バッチ upsert パターンにより、N 件のリクエストを 1 件に削減できます
  • API 使用状況のアラートを監視するダッシュボードが設定されます

エラー処理

エラー原因解決策
429 Too Many RequestsRPM または RPD の上限を超過しましたwithRetry によるバックオフを適用します。同時実行数を減らすか、プランをアップグレードします
PGRST000: could not connect接続プールが枯渇していますSupavisor のトランザクションモード(ポート 6543)に切り替えます。同時クエリ数を減らします
認証の over_request_rate_limit1 つの IP からのサインアップまたはログインが多すぎますCAPTCHA を追加します。ダッシュボードでカスタム認証レート制限を設定します
Storage の 413 Payload Too Largeファイルがプランの上限を超えていますTUS の再開可能なアップロードを使用します。プランのファイルサイズ上限を確認します
Realtime の too_many_connections同時接続数の上限に達しました使用していないチャンネルの登録を解除します。500 接続が可能な Pro にアップグレードします
Edge Function の BOOT_ERRORコールドスタートのタイムアウト、またはメモリ超過ですバンドルサイズを小さくします。トップレベルで大きなインポートを避けます
Prisma での pgbouncer=true エラー接続文字列パラメーターが不足していますポート 6543 のプーラー接続文字列に ?pgbouncer=true を追加します

レート制限のレスポンスヘッダー(X-RateLimit-Limit、X-RateLimit-Remaining、X-RateLimit-Reset、Retry-After)と、それぞれへの対処方法については、errors.md を参照してください。

例

  • バッチ挿入に対応し、レート制限に安全なクライアントを備えたサーバーレス Edge Function — examples.md を参照してください
  • ランタイムごとの接続文字列の選択(サーバーレス、長時間稼働、直接接続)— examples.md を参照してください
  • キューベースのスロットリングとクライアント側でのヘッダー監視 — examples.md を参照してください

リソース

次のステップ

RLS ポリシーと API キー管理を使用した Supabase プロジェクトの保護については、supabase-security-basics を参照してください。データベースクエリとインデックスの最適化については、supabase-performance-tuning を参照してください。

コメント