メール経路に実際の確認が必要な理由
Cursor のエージェントは、フォーム、ルート、トークン処理、メールテンプレートなど、認証まわりのコードを得意とします。ただし、変更がすべてのテストに通っても、メールが localhost にリンクしていたり、送信者が設定されていないため届かなかったり、入力する前に期限切れになるコードが含まれていたりすることがあります。こうした問題は、実際のメールが実際の受信トレイに届いて初めてわかります。
どのログインが作られますか?
指定したもの、またはコードベースですでに使っているものです。Supabase Auth、Clerk、Firebase Authentication、Auth.js、Better Auth はそれぞれ異なるメールを送ります。Clerk はデフォルトでコードを、Firebase はリンクを送り、Auth.js はほかを自分で作らない限りマジックリンクだけを送ります。使いたい方式をプロンプトかプロジェクトルールに明記し、エージェントの変更が送る各メールをテストしてください。各ログインサービスが送るメール。
認証を変更するたびに確認する
- アプリを実行します。 ローカルで起動するか、ブランチのプレビューデプロイを開きます。
- Proxy Mail QA でアドレスを作成します。 新規ユーザー、招待ユーザー、パスワードリセットなど、シナリオごとに 1 つずつです。
- 変更に関わるフローを実行します。 アドレスの行に表示されるコードかリンクを使います。
- 受信トレイのビューでメール全体を一度読みます。 送信者、件名、文面、すべてのリンクを確認します。
- 気づいた点をアドレスにメモします。 メモはテスト用アカウントと一緒に残ります。
プレビューやステージングのデプロイで localhost へのリンクがあると、行に警告が表示されます。Supabase、Firebase、Auth.js などのスタックでの修正方法はこちら。
Cursor のエージェントにメール自体を確認させる
Cursor Directory から Proxy Mail QA を追加します。Add to Cursor で MCP server と、エージェントにサインアップテストの手順を示すスキルがインストールされます。次に Cursor の設定の MCP セクションからログインします。ブラウザで Proxy Mail QA にサインインしてプロジェクトを選びます。API キー をコピーする必要はありません。
あとは普通の言葉で頼みます。「新しい Proxy Mail QA アドレスで localhost:3000 にサインアップして、メールを確認して」。エージェントがアドレスを作成し、フォームに入力し、コードかリンクを待ってサインアップを完了します。代わりに .cursor/mcp.json で API キー を使う場合は、MCP server のセットアップを参照してください。
Cursor 用のコピー&ペースト用プロンプト
List every email this app sends: sign-up confirmation, magic link, password reset, invite and email change. For each, show where it's triggered in the code, which service sends it, how its link URL is built, and how long its code or link is valid. Flag hard-coded localhost URLs.Build every link in auth emails from an environment variable for the app's public URL, with localhost only as the development default. Add the variable to .env.example and the deployment settings.The email says the code is valid for 10 minutes. Make the server enforce the same expiry, and make requesting a new code invalidate the old one.よくあるバグを防ぐプロジェクトルール
エージェントが認証に触れるたびに従うよう、これをプロジェクトルール(例: .cursor/rules/auth-emails.mdc)として保存します。
When changing sign-up, login, password reset, invites or any email-sending code:- Build links from the app's public URL setting, never a hard-coded localhost.- Keep the expiry stated in an email equal to the one the server enforces.- Make single-use links and codes stop working once used or replaced.- Tell me which emails to test by hand after the change.