api-email-setup-resend について
Resend と React Email を使うメール機能の構築を支援するスキルです。送信方法、ドメイン認証、プレビュー、テンプレートの構成を扱います。
主な機能
- 01React コンポーネントでメール送信
- 02送信ドメインと DNS の設定
- 03ローカルメールプレビューサーバーの構築
- 04monorepo でのテンプレート整理
- 05Webhook 署名の検証
活用シーン
- 01アプリのトランザクションメール設定
- 02送信ドメイン用 DNS レコードの追加
- 03monorepo 間でのメールテンプレート再利用
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ agents-inc/ skills --skill api-email-setup-resendインストール後、Claude Code で/api-email-setup-resendを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
metadata.yamlreference.mdexamples/core.md詳細
Resend Email と React Email のセットアップ
クイックガイド: React Email テンプレートで Resend のメール API を使用します。
reactプロパティを使ってコンポーネントを直接resend.emails.send()に渡せば、手動でrender()を実行する必要はありません。モノレポ内で分離できるよう、メールテンプレートは専用のパッケージに配置します。本番環境で使用する前に、送信ドメインを検証してください。HTML 文字列への手動レンダリングが必要な場合は、@react-email/componentsではなく@react-email/renderを使用します。
<critical_requirements>
重要:このスキルを使用する前に
すべてのコードは、CLAUDE.md のプロジェクト規約に従う必要があります(ケバブケース、名前付きエクスポート、インポートの順序、
import type、名前付き定数)
(RESEND_API_KEY 環境変数を必ず使用してください。API キーをハードコードしてはいけません)
(本番環境で使用する前に、Resend ダッシュボードで送信ドメインを必ず検証してください。未検証のドメインでは、自分のメールアドレスにしか送信できません)
(メール UI コンポーネントには @react-email/components を、HTML レンダリングには @react-email/render を必ず使用してください。これらは別々のパッケージです)
(基本の送信方法として、必ず resend.emails.send({ react: MyTemplate(props) }) を使用してください。手動で render() を実行して HTML にするのは、Resend 以外の送信サービスを使用する場合に限ります)
</critical_requirements>
自動検出: Resend のセットアップ、Resend のインストール、React Email のセットアップ、メールテンプレートのセットアップ、RESEND_API_KEY、ドメイン検証、SPF DKIM DMARC、トランザクションメールのセットアップ、メールプレビューサーバー、@react-email/components、react-email
使用する場面:
- プロジェクトで Resend と React Email を初めてセットアップするとき
- ドメイン検証と DNS レコードを設定するとき
- メールプレビュー用の開発サーバーをセットアップするとき
- モノレポでメールテンプレートを構成するとき
使用しない場面:
- マーケティングメールキャンペーン(専用のマーケティングメールプラットフォームを使用してください)
- SMS またはプッシュ通知(別のサービスを使用してください)
- JavaScript 以外のバックエンド(このスキルで扱う React Email テンプレートには Node.js が必要です)
- SMTP リレーが必要な場合(Resend は API 専用です)
詳細なリソース:
- examples/core.md - クライアントのセットアップ、送信方法、テンプレート構成、プレビューサーバー
基本方針
Resend は、React Email の開発者によって構築された開発者を第一に考えるメール APIです。React Email は、従来のテーブルベースの HTML に代わる、モダンなコンポーネントパターンをメール開発にもたらします。
基本原則:
- メールを React コンポーネントとして作成 - JSX、Tailwind CSS、TypeScript を使ってメールを作成します
- 送信前にプレビュー - ローカルの開発サーバーで、メールの正確なレンダリング結果を確認できます
- モノレポ内で分離 - メールテンプレートはアプリケーションコードに混在させず、専用のパッケージに配置します
render()よりreactプロパティを優先 - Resend SDK は、reactプロパティ経由でコンポーネントを渡すと、内部でレンダリングします
基本パターン
パターン 1:react プロパティを使った送信(推奨)
Resend SDK では、React コンポーネントを react プロパティ経由で直接渡せます。手動で HTML にレンダリングする必要はありません。
const { data, error } = await resend.emails.send({
from: "Your App <[email protected]>",
to: ["[email protected]"],
subject: "Welcome!",
react: WelcomeEmail({ userName: "John" }),
});
推奨する理由: 手動で render() を呼び出す必要がなく、SDK が内部で変換を処理するため、コードがすっきりします。
代わりに render() を使う場合: HTML 文字列を必要とする Resend 以外のメールプロバイダーを使って送信する場合に限ります。インポート元には @react-email/components ではなく @react-email/render を指定してください。
送信とレンダリングの詳細な例については、examples/core.md を参照してください。
パターン 2:ドメイン検証
カスタムアドレスから送信するには、ドメインを検証してください。未検証のアカウントでは、自分のメールアドレスにしか送信できません。
- Resend ダッシュボードで[Domains]>[Add Domain]を開きます
- Resend が提示する DNS レコードを DNS プロバイダーに追加します:
- SPF(TXT):
v=spf1 include:amazonses.com ~all - DKIM(3 件の CNAME レコード):Resend が提示する値
- DMARC(TXT、推奨):
v=DMARC1; p=none; rua=mailto:[email protected]
- SPF(TXT):
- [Verify]をクリックします。DNS の伝播には最大 48 時間かかることがあります
重要な理由: ドメインが未検証の場合、アカウントのメールアドレス宛てにしか送信できません。本番環境で送信するには検証が必要です。適切な DNS レコードを設定すると、メールが迷惑メールに振り分けられるのを防げます。
### パターン 3:モノレポのパッケージ構成
メールテンプレートはアプリケーションコードとは分け、専用パッケージに保存してください。
packages/emails/
├── package.json
├── tsconfig.json
├── src/
│ ├── index.ts # Re-export all templates
│ ├── client.ts # Resend client singleton
│ ├── layouts/
│ │ └── base-layout.tsx # Shared layout wrapper
│ ├── components/
│ │ ├── button.tsx # Reusable email button
│ │ └── footer.tsx # Email footer
│ └── templates/
│ ├── verification-email.tsx
│ ├── password-reset.tsx
│ └── welcome-email.tsx
└── emails/ # For react-email dev server
推奨する理由: アプリ間で再利用でき、バンドルの問題を防ぎ、関心事を適切に分離できます。
クライアントのセットアップとテンプレートの例については、examples/core.md を参照してください。
パターン 4:メールのエラー処理
Resend は { data, error } を返すため、必ずエラーを確認してください。
const { data, error } = await resend.emails.send(emailOptions);
if (error) {
console.error("[Email] Send failed:", error.name, error.message);
return { success: false, error: error.message };
}
return { success: true, id: data?.id };
推奨する理由: 明示的なエラーチェック、構造化ログ、型付きの結果を返します。エラー応答を無視しないでください。SDK は送信失敗時に例外をスローしません。
パターン 5:Webhook の検証
イベントを処理する前に、必ず Webhook の署名を検証してください。verify() メソッドは署名が無効な場合に例外をスローします。
const payload = await request.text(); // Raw body, NOT parsed JSON
try {
const event = resend.webhooks.verify({
payload,
headers: {
id: request.headers.get("svix-id") ?? "",
timestamp: request.headers.get("svix-timestamp") ?? "",
signature: request.headers.get("svix-signature") ?? "",
},
webhookSecret: process.env.RESEND_WEBHOOK_SECRET!,
});
// event.type: "email.sent" | "email.delivered" | "email.bounced" | etc.
} catch {
return new Response("Invalid webhook signature", { status: 400 });
}
推奨する理由: SDK 組み込みの検証機能を使用し、パース済み JSON ではなく生の本文を使うことで署名の不整合を防ぎます。try/catch で無効な署名を処理できます。
注意点: request.json() ではなく、必ず request.text() を使用してください。検証前に JSON としてパースすると、暗号署名が破損します。verify() メソッドは失敗時に例外をスローします({ data, error } を返す emails.send() とは異なります)。
<red_flags>
要注意事項
優先度:高
- ソースコードに
RESEND_API_KEYをハードコードする(セキュリティ上の脆弱性となり、Git 上で見える状態になります) - 本番環境で未検証のドメインから送信する(メールの送信に失敗するか、迷惑メールとして扱われます)
@react-email/componentsからrenderをインポートする(パッケージが間違っています。@react-email/renderを使用してください)render()の使用時に await しない(Promise が返され、メール本文が[object Promise]になります)
優先度:中
resend.emails.send()のエラー処理がない(失敗が通知されません)- 専用パッケージではなくアプリのディレクトリ内にメールテンプレートを置く(モノレポでバンドルの問題が発生します)
- Webhook ペイロードに
request.text()ではなくrequest.json()を使用する(署名検証が機能しません)
注意点とエッジケース:
- Resend の無料プランでは、1 日あたり 100 通、1 か月あたり 3000 通まで送信できます
- 未検証のドメインからは、アカウントのメールアドレスにしか送信できません
- ドメインの検証には、DNS の反映に最大 48 時間かかります
- React Email の開発サーバーは、プロジェクト内に
.react-emailフォルダーを作成します - メールテンプレートで Grid、Flexbox、
box-shadowを使用しても、Gmail/Outlook では機能しません - メールでは
px単位を使用してください。remはメールクライアントによって表示に一貫性がありません - Resend SDK v6.1.0 以降では、一部のバンドラーで
@react-email/renderのエラーが発生する場合があります。解決エラーが表示された場合は、バンドラーの外部パッケージ設定にresendを追加してください @react-email/componentsは UI コンポーネント(Body、Button など)用、@react-email/renderはrender()ユーティリティ用です。これらは別々のパッケージです
</red_flags>
<critical_reminders>
必ず守ること
(RESEND_API_KEY 環境変数を必ず使用し、API キーをハードコードしないでください)
(本番環境で使用する前に、Resend ダッシュボードで送信ドメインを必ず検証してください。未検証のドメインからは自分のメールアドレスにしか送信できません)
(メールの UI コンポーネントには @react-email/components、HTML のレンダリングには @react-email/render を必ず使用してください。これらは別々のパッケージです)
(送信方法には resend.emails.send({ react: MyTemplate(props) }) を必ず使用してください。HTML への手動 render() は、Resend 以外の送信元を使用する場合にのみ必要です)
これらのルールに従わないと、メールの配信に失敗したり、セキュリティ上の脆弱性が生じたりする可能性があります。
</critical_reminders>