rate-limiting について
Symfony 向けのレート制限スキルです。アルゴリズム、呼び出し元の識別、応答処理、テストを案内し、レート制限は認可の代わりにならない点も示します。
主な機能
- 01スライディング、トークンバケット、固定ウィンドウの比較
- 02制限レートとバースト量の定義
- 03コントローラー、サービス、サブスクライバーへの適用
- 04Retry-After 付き 429 の返却
- 05通過、拒否、リセットのテスト
活用シーン
- 01ログインやパスワードリセットの試行制限
- 02公開 API や書き込みリクエストの制限
- 03トラフィックに応じたアルゴリズム選択
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ dev-toolings/ superpowers-symfony --skill rate-limitingインストール後、Claude Code で/rate-limitingを入力して読み込まれたか確認します。
同梱ファイルreference.md
詳細
レート制限(Symfony)
使用する場面
- ログイン、パスワードリセット、公開 API など、公開されている書き込みエンドポイントへの呼び出し頻度を制限するとき。
- スライディングウィンドウ、トークンバケット、固定ウィンドウのいずれかを選ぶとき。
- コントローラー属性、サービス、イベントサブスクライバーを通じたグローバル設定のいずれかでリミッターを適用するとき。
Retry-Afterを含む正しい 429 を返すとき。- 拒否するのではなく、トークンが解放されるまでブロックするとき。
デフォルトのワークフロー
- 何を制限し、何を呼び出し元の識別に使うかを明確にします。
- トラフィックの形状に合ったアルゴリズムを選び、レートとバーストを明示します。
- リミッターごとに 1 つのエントリーを
framework.rate_limiterの下に宣言します。 - リクエストを拒否する場所で適用し、
Retry-Afterを含む 429 で応答します。 - テストで制限を実証します。通過する呼び出し、拒否される呼び出し、リセットを確認します。
ガードレール
- カウント対象は呼び出し元の識別情報によって決まります。プロキシの背後では、信頼されていないクライアントアドレスを使うと、すべての利用者が 1 人としてカウントされます。
- リミッターは認可の仕組みではありません。レートを制限しますが、権限を判断することはありません。
- 必ず 429 と
Retry-Afterで拒否し、黙って破棄したり 500 を返したりしないでください。 - ストレージがプロセスごとのリミッターでは、複数のワーカー全体で制限できません。
- トークンの予約は呼び出し元のプロセスをブロックします。ウェブリクエストでは決して行わないでください。
段階的な情報開示
- 実行時の方針とリスク管理には、このファイルを使用します。
- 実装の詳細が必要な場合は、リファレンスを参照します。
出力要件
- アルゴリズム、レート、バーストを含むリミッターポリシー。
- 各リミッターを適用する場所と、呼び出し元の識別情報。
- ヘッダーを含む 429 レスポンスの形式。
- 呼び出しが受け入れられる場合、拒否される場合、リセットされる場合をカバーするテスト。
リファレンス
reference.md
コメント
Markdown 対応