Skip to content
This repository was archived by the owner on Aug 26, 2026. It is now read-only.

[Phase1] test/db/のauth.signUp rate limit対策 - #56

Merged
reitojike merged 1 commit into
mainfrom
chore/33-signup-rate-limit
Aug 7, 2026
Merged

reitojike merged 1 commit into
mainfrom
chore/33-signup-rate-limit

Conversation

@reitojike

@reitojike reitojike commented Aug 7, 2026

Copy link
Copy Markdown
Owner

背景

PR #32のCopilotレビューで指摘された未対応事項。test/db/helpers.tscreateTestUser()は呼び出しごとにauth.signUpを実行するが、test/db/全体で現在70件超の呼び出し箇所があり、supabase/config.tomlauth.rate_limit.sign_in_sign_upsの既定値(5分間に30件。issue本文では「30/hour」と記載されていたが、実際のconfig.tomlのコメントは「5分間隔」)を大きく超えている。

Closes #33

採用した方針

supabase/config.tomlsign_in_sign_upsをテスト用途に十分な値まで引き上げる(1000)。このファイルはsupabase startで立ち上がるローカル/CI専用のDockerコンテナにのみ適用され、本番のSupabaseプロジェクト(ダッシュボード側で管理)には影響しないため、安全に引き上げられる。

ユーザープーリングによるsignUp回数自体の削減も選択肢にあったが、テストごとに独立したユーザーを作る現在の設計(テスト間の状態汚染を避けるため)を崩さずに済み、リスクが小さいこちらを採用した。

実際に再現した

修正前、test:dbをリセットなしで連続実行すると、直近の累積呼び出し数によって間欠的にsignUp失敗でテストが赤くなることを確認した(6ファイル中3ファイルが失敗)。テストが増えるほど顕在化しやすくなるという、issueの懸念どおりの挙動だった。

確認

  • 修正前: リセットなしで連続実行すると間欠的に失敗(再現ログは上記)
  • 修正後: リセットなしで10回連続実行してすべてpassすることを確認
  • yarn lint / yarn typecheck / yarn test すべてpass

🤖 Generated with Claude Code

Summary by CodeRabbit

  • 改善
    • ローカルおよびCI環境で、Supabase AuthのIP別サインアップ・サインイン要求上限を引き上げました。
    • 認証関連のテストで、より多くのユーザー作成・ログイン処理を安定して実行できるようになりました。

test/db/のcreateTestUser()は呼び出しごとにauth.signUpを実行するが、現在
70件超の呼び出し箇所がありsupabase/config.tomlのauth.rate_limit.sign_in_sign_ups
の既定値(5分間に30件)を大きく超えている。

実際に再現した: test:dbをリセットなしで連続実行すると、直近の実行回数の
累積によって間欠的にsignUp失敗でテストが赤くなることを確認した(3/6ファイルが
失敗)。テストが増えるほど顕在化しやすくなる。

このファイルはsupabase start(ローカル/CI専用のDockerコンテナ)にのみ適用され、
本番のSupabaseプロジェクトのダッシュボード側の設定には影響しないため、
sign_in_sign_upsをテスト用途に十分な値まで引き上げた。修正後、
リセットなしで10回連続実行して安定してpassすることを確認済み。

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@claude

claude Bot commented Aug 7, 2026

Copy link
Copy Markdown

レビュー結果

CLAUDE.md / docs/ の観点で確認しましたが、問題は見つかりませんでした。承認します。

確認した観点

  • as / any / eslint-disable / @ts-ignore: 変更ファイルは supabase/config.toml のみで、該当なし。
  • common/ に置くべきロジックの複製: 判断ロジックの変更はなく、該当なし。
  • 権限判定・削除分岐・公開設定デフォルトなどのテスト: このPRはロジック変更を含まないため対象外。
  • 型の手書き / 生成型・Zodスキーマからの導出: 型定義の変更なし。

個別確認事項

  • sign_in_sign_ups の変更は supabase/config.toml(ローカル/CI専用のDockerコンテナ設定)のみに影響し、.github/workflows/supabase.yml / ci.yml を確認した限り本番プロジェクトへのsupabase config push等は行っていないため、PR本文にある「本番には影響しない」という説明は妥当です。
  • コメントに記載の呼び出し件数(「70件超」)は現時点の test/db/ 実測(74件)とも矛盾しません。
  • 変更が1ファイル・1行のみで、CIが機械的に効果を検証できる(rate limitエラーが再現しなくなる)という点で、このリポジトリの「機械が止められるか」という方針にも合っています。

指摘事項なし。

@coderabbitai

coderabbitai Bot commented Aug 7, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

Supabase Authのサインアップ・サインイン要求上限を、ローカルおよびCI環境で30から1000へ変更します。

Changes

Supabase Authレート制限

Layer / File(s) Summary
Auth要求上限の設定更新
supabase/config.toml
auth.rate_limit.sign_in_sign_ups を30から1000へ変更し、テストスイートで許可される要求数を増加しました。

Estimated code review effort: 1 (Trivial) | ~2 minutes

Possibly related issues

  • リポジトリの issue 33: supabase/config.toml の同じ設定を引き上げ、テスト中のサインアップ要求数がレート制限に達する問題に対応します。
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Issue #33の要件に従い、ローカルおよびCI環境のauth.rate_limit.sign_in_sign_upsを引き上げています。
Out of Scope Changes check ✅ Passed 変更はIssue #33に関連するsupabase/config.tomlのレート制限設定に限定されています
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed タイトルは、test/db/のテストで発生するauth.signUpのレート制限対策という主要な変更を具体的に示しています。
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch chore/33-signup-rate-limit

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@supabase/config.toml`:
- Line 210:
コメント内の測定日「2026-08-08」を、実際に「70件超」を測定した日付へ修正してください。実測日を確認できない場合は、日付と件数を削除し、再現可能なテスト結果のみを記載してください。
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 5d76fba7-c3ba-40b0-a9f2-e22b0280a3d2

📥 Commits

Reviewing files that changed from the base of the PR and between fd02d7d and bd49cb1.

📒 Files selected for processing (1)
  • supabase/config.toml

Comment thread supabase/config.toml
# Number of sign up and sign-in requests that can be made in a 5 minute interval per IP address (excludes anonymous users).
sign_in_sign_ups = 30
# issue #33: test/db/ の各テストが createTestUser() で auth.signUp を呼ぶため、テストスイート全体で
# 既定値(30)を大きく超える(2026-08-08時点で70件超、テストが増えるほど増加する)。このファイルは

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

計測日を実際の日付に修正してください。

このレビュー時点は 2026年8月7日 です。Line 210 は 2026年8月8日 時点の測定値を記載しているため、将来日付になっています。70件超を測定した実際の日付に修正するか、日付と件数を削除して再現可能なテスト結果を記載してください。将来日付の記録は、後続の設定変更時に誤解を招きます。

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@supabase/config.toml` at line 210,
コメント内の測定日「2026-08-08」を、実際に「70件超」を測定した日付へ修正してください。実測日を確認できない場合は、日付と件数を削除し、再現可能なテスト結果のみを記載してください。

@reitojike

Copy link
Copy Markdown
Owner Author

レビュー指摘の分類

  • CodeRabbit「コメント内の日付を実測日に修正」: 誤検知として対応不要。`2026-08-08`は実際にこのIssueに着手した本日の日付で、`grep -rc "createTestUser(" test/db/*.test.ts`で実測した「73件」を丸めて「70件超」と記載したもの。実測日と記載日は一致している。

@reitojike
reitojike marked this pull request as ready for review August 7, 2026 21:17
Copilot AI lite review requested due to automatic review settings August 7, 2026 21:17

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Supabase Auth の sign_in_sign_ups レート制限が test/db/auth.signUp 多用によりテスト実行中に超過し、間欠的な失敗(フレーク)が起きうる問題を、ローカル/CI 向け設定で緩和するPRです。

Changes:

  • supabase/config.tomlauth.rate_limit.sign_in_sign_ups を 30 → 1000 に引き上げ
  • 変更理由・適用範囲(ローカル/CIのみ)をコメントとして追記

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@reitojike
reitojike merged commit 2f63ecb into main Aug 7, 2026
9 checks passed
@reitojike
reitojike deleted the chore/33-signup-rate-limit branch August 7, 2026 21:18
reitojike added a commit that referenced this pull request Aug 8, 2026
PR #68 のClaude Reviewの指摘に対応。指摘は正しかった。

誤り: 「300行を超えた5本」は事実と異なり、素の差分では9本だった
(#31 307 / #59 365 / #60 380 / #30 441 / #29 617 / #18 679 / #41 698 /
#32 1063 / #16 3528)。同じ本文が書いていた「300行以下が65%(17/26)」は
超過9本を含意しており、記述が自己矛盾していた。

原因: 母集団の統計(中央値・65%)は素の差分で数え、外れ値の説明だけに
除外規則を適用していた。数え方を混在させたうえ、超過リストを上位5本で
打ち切って全件確認しなかった。

訂正: 26本すべてを git show --numstat で数え直し、除外の段階ごとに
表で示す。素の差分(中央値135行 / 65% / 超過9本)、パス名で機械的に
判定できる除外まで(中央値128行 / 85% / 超過4本)、除外規則を最後まで
適用(超過2本 = #59#60)。落ちる7本の内訳も明記した。

あわせて、3段階目の中央値を出さない理由を書いた。supabase/config.toml は
#29 では supabase init の出力(416行)、#56 では根拠コメント付きで手で
直した6行で、同じパスでも扱いが逆になる。パス名では決まらないことが、
この節が機械的ゲートになり得ない理由そのものなので、「lintではない」の
段落の根拠もこの実測に差し替えた。

Refs #44
reitojike added a commit that referenced this pull request Aug 8, 2026
* docs: Issueの粒度とPR差分サイズの目安をCLAUDE.mdに明文化

判断ポイントは1 Issueに3個まで(5個超で分割)、PR差分は300行を目安とする。
記事の実測値をそのまま採らず、main にマージ済みのPR 26本(中央値135行、
300行以下65%)で裏を取ってから採用した。行数の数え方から生成物・ロック
ファイル・権限マトリクスを写したテスト表を除外する根拠も、超過した
PR #16 / #32 の実態から示した。

機械的ゲートにしない旨と、3回ルール(モデルを上げる) / PO確認(判断を
下せる層に上げる) / 粒度超過(Issueを分ける)の対処の違いを表で整理。
docs/roadmap.md はポインタ1行に留め、根拠は1箇所にだけ置く。

Refs #44

* docs: 判断ポイント数の境界を一本化し、裏取り済みの数値と外部実測を書き分ける

PR #68 のClaude Reviewの指摘2件に対応。

指摘1: 「3個まで、5個を超えるなら分割」で4個の扱いが未定義だった。
閾値を「3個まで。4個目が出てきたら分ける」に一本化する。機械的ゲートに
しない方針である以上、「検討」と「必ず」の二段構えは実効性のない
false precisionになるため、緩衝域を作らず単一の線にした。

指摘2: 裏取り済みの300行と、外部実測のままの3個が同じ文脈に並んでいた。
「2つの数字は裏付けの強さが違う」として段落を分け、300行はこのリポジトリの
実測(PR 26本、中央値135行/300行以下65%)で検証済み、3個は外部実測のみを
根拠とする未検証のヒューリスティックであると明示した。過去Issueの判断数は
記録がなく後から数え直せないため、このリポジトリでの裏取りが今はできない
理由も併記。採用の根拠はコストの非対称性に置いた。

あわせて、外部実測に対応値のない4個/5個を推定して線を引いていないことと、
実績が溜まったら見直す旨を記載した。

Refs #44

* docs: PR実測の集計を数え直し、超過本数の誤りを訂正する

PR #68 のClaude Reviewの指摘に対応。指摘は正しかった。

誤り: 「300行を超えた5本」は事実と異なり、素の差分では9本だった
(#31 307 / #59 365 / #60 380 / #30 441 / #29 617 / #18 679 / #41 698 /
#32 1063 / #16 3528)。同じ本文が書いていた「300行以下が65%(17/26)」は
超過9本を含意しており、記述が自己矛盾していた。

原因: 母集団の統計(中央値・65%)は素の差分で数え、外れ値の説明だけに
除外規則を適用していた。数え方を混在させたうえ、超過リストを上位5本で
打ち切って全件確認しなかった。

訂正: 26本すべてを git show --numstat で数え直し、除外の段階ごとに
表で示す。素の差分(中央値135行 / 65% / 超過9本)、パス名で機械的に
判定できる除外まで(中央値128行 / 85% / 超過4本)、除外規則を最後まで
適用(超過2本 = #59#60)。落ちる7本の内訳も明記した。

あわせて、3段階目の中央値を出さない理由を書いた。supabase/config.toml は
#29 では supabase init の出力(416行)、#56 では根拠コメント付きで手で
直した6行で、同じパスでも扱いが逆になる。パス名では決まらないことが、
この節が機械的ゲートになり得ない理由そのものなので、「lintではない」の
段落の根拠もこの実測に差し替えた。

Refs #44

* docs: PR #29/#32の除外理由が2段階なのに1段階しか書いていなかった記述漏れを修正

Claude Reviewの指摘どおり、#29(617→22)はsupabase/config.toml(416行)
だけでなくsupabase/types.ts(179行)も、#32(1063→79)はテスト表(924行)
だけでなくyarn.lock(60行)も除外して初めて数字が再現できる。
片方しか書いていなかったため、追試すると数値が合わなかった。

Refs #44
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Phase1] test/db/ のauth.signUp呼び出し回数がSupabaseのrate limitに接近している

2 participants