🦁

最近話題のResendってどうなの?SendGrid・Mailgun・SES等とGo/TypeScriptで実測比較してみた

に公開

「メール送信サービス、とりあえずSendGridかSESでいいか」と思っていませんか?

最近、開発者界隈で「Resend」というモダンなメール送信APIが話題になっています。私自身も最近使ってみて「これは開発体験(DX)が段違いに良いぞ…!」と感動したのですが、いかんせん日本語の詳しい説明資料や、他サービスとの具体的な比較記事が少ないのが現状です。

そこで今回は、Resendの公式サイトからの引用を交えつつ、SendGrid・Mailgun・AWS SES・Postmarkといった主要な競合サービスとの比較をまとめました。さらに、実際のUbuntu 22.04環境でGoとTypeScript(Node.js)の各SDKをセットアップし、パッケージサイズ・インポート速度・コード量のベンチマークも計測しています。

もちろん、良いところばかりではなく、Resendのデメリットや弱点についても正直に書いています。


1. Resendとは?何がそんなに良いのか

Resend は、「開発者のためのメールAPI(Email for developers)」を掲げるモダンなメール送信サービスです。2022年に登場した比較的新しいサービスですが、その洗練された開発者体験から急速に普及しています。

公式サイトのトップページには、以下のように書かれています。

The best way to reach humans instead of spam folders. Deliver transactional and marketing emails at scale.

最大の特徴は、圧倒的な開発者体験(DX)の良さです。React Email(Reactでメールテンプレートを構築できるフレームワーク)の開発チームが作っていることもあり、モダンなフロントエンド・バックエンド開発との親和性が非常に高くなっています。

主な特徴

  • API設計がシンプルで美しい — 後述のコード比較でも分かりますが、SDKの使い方が非常に直感的です。
  • React Emailとのネイティブ統合 — ReactコンポーネントをそのままメールのHTMLとして送信できます。
  • Webhookやログの可視性が高い — ダッシュボードが洗練されており、メールが届かなかった理由(バウンス理由など)が一目で分かります。
  • マルチリージョン対応 — 北米・南米・ヨーロッパ・アジアなど、ユーザーに最も近いリージョンから送信でき、遅延を減らせます。
  • Broadcasts(一斉送信)機能 — トランザクションメールだけでなく、マーケティングメールの一斉配信にも対応しています(最近追加された機能)。

2. 主要サービスとの料金・機能比較

まずは、各サービスの料金プランと無料枠を比較してみましょう。

サービス 無料枠 有料プラン開始額 10万通/月の目安料金 特徴・強み
Resend 3,000通/月(1日100通まで) $20(5万通) $90(Scaleプラン) 開発者体験が最高、React Email統合
SendGrid 60日間無料トライアル(100通/日) $19.95(5万通) $89.95(Proプラン) 業界標準、実績と信頼性、マーケティング機能
Mailgun 無料トライアルのみ $15(1万通) $90前後 強力なルーティング機能、受信処理に強い
AWS SES EC2からなら月6.2万通無料 従量課金のみ 約$10 圧倒的な低価格、AWSエコシステムとの統合
Postmark 100通/月(永久無料) $15(1万通) $125前後 トランザクションメール特化、到達速度が最速

※料金は2026年4月時点の各公式サイトの情報に基づきます。

各サービスのポジショニング

用途に合わせて選ぶなら、以下のような基準が参考になります。

  • とにかく安く済ませたい、AWSを使っているAWS SES
  • マーケティング担当者も使い、実績を重視するSendGrid
  • 複雑な受信ルーティングが必要Mailgun
  • トランザクションメールの到達速度を最優先するPostmark
  • モダンな開発体験とReact連携を重視するResend

3. Ubuntu上での実測ベンチマーク(Go / TypeScript)

「APIの使いやすさ」は主観になりがちなので、実際のUbuntu 22.04環境でGo(1.22.3)とTypeScript(Node.js 22.13.0)の各SDKをインストールし、客観的な数値を計測してみました。

3.1 TypeScript (Node.js) SDKの比較

サーバーレス環境(AWS LambdaやVercel Edge Functionsなど)では、node_modules のサイズや初回ロード時間がコールドスタートに直結します。

実測結果(Ubuntu 22.04 / Node.js 22.13.0)

サービス パッケージ名 インストールサイズ 依存パッケージ数 初回ロード時間 (5回平均)
Resend resend 212 KB 7個 96.7 ms
SendGrid @sendgrid/mail 836 KB 42個 113.3 ms
AWS SES @aws-sdk/client-sesv2 11 MB 多数 145.1 ms

ResendのSDKは非常に軽量(わずか212KB)で、依存関係も少ないため、Edge環境やLambdaでの利用に最適です。一方、AWS SDK v3はモジュール化されているとはいえ、依然としてサイズが大きくロード時間も長めです。

3.2 Go SDKの比較

Go言語でも同様に、モジュールキャッシュのサイズと依存関係の数を計測しました。

実測結果(Ubuntu 22.04 / Go 1.22.3)

サービス パッケージ名 モジュールキャッシュサイズ go.mod 依存数
Resend github.com/resendlabs/resend-go 204 KB 1個
SendGrid github.com/sendgrid/sendgrid-go 1.6 MB 2個
AWS SES github.com/aws/aws-sdk-go-v2/service/sesv2 8.6 MB 6個

Goにおいても、ResendのSDKは非常にコンパクトです。また、1000回のクライアント生成やパラメータ構築のベンチマークを実行したところ、ResendもSendGridも1ミリ秒未満(マイクロ秒オーダー)で完了し、実行時のオーバーヘッドはどちらも無視できるレベルでした。

3.3 コードの複雑さ比較(TypeScript)

実際にメールを送信する最小限のコードを比較しました。

Resend(10行 / 250文字)

import { Resend } from 'resend';

const resend = new Resend('re_xxxxxxxxx');

await resend.emails.send({
  from: 'Acme <onboarding@resend.dev>',
  to: ['user@example.com'],
  subject: 'Hello World',
  html: '<strong>It works!</strong>',
});

シンプルなオブジェクト形式でパラメータを渡し、1行で送信できます。型定義も完璧に効きます。

SendGrid(12行 / 280文字)

import sgMail from '@sendgrid/mail';

sgMail.setApiKey('SG.xxxxxxxxx');

const msg = {
  to: 'user@example.com',
  from: 'onboarding@example.com',
  subject: 'Hello World',
  html: '<strong>It works!</strong>',
};
await sgMail.send(msg);

SendGridも比較的シンプルですが、グローバルな状態(setApiKey)を持つ設計になっています。

AWS SES v2(22行 / 580文字)

import { SESv2Client, SendEmailCommand } from "@aws-sdk/client-sesv2";

const client = new SESv2Client({ region: "us-east-1" });

const command = new SendEmailCommand({
  FromEmailAddress: "sender@example.com",
  Destination: {
    ToAddresses: ["recipient@example.com"],
  },
  Content: {
    Simple: {
      Subject: { Data: "Hello World", Charset: "UTF-8" },
      Body: {
        Html: { Data: "<strong>It works!</strong>", Charset: "UTF-8" },
      },
    },
  },
});

await client.send(command);

AWS特有の深くネストされたオブジェクト構造が必要で、コードが冗長になりがちです。

3.4 実際のAPIレスポンスタイム(Knock.appの実測データ)

自分でAPIを叩いてレスポンスタイムを計測するには実際のAPIキーが必要なため、Knock.app が公開しているリアルワールドのベンチマークデータを参照します。

このデータは、Knock.appが実際に送信した1000万〜2500万通のメッセージ(2026年1月8日〜4月8日)に基づいています。

Browse Resend's observed email API response time, error rates, and incident history over the last 90 days.

指標
中央値 (p50) 78ms
p90 125ms
p95 151ms
p99 357ms
平均エラー率 0.08%
最高エラー率(単日) 2.45%(2/15)
ゼロエラー日数 78/90日
Knock内での採用シェア 1位(10プロバイダー中)

p50が78msというのは非常に高速です。また、エラー率0.08%は「10プロバイダー中でも最も低いエラー率の一つ」と評価されています。


4. Resendのデメリット・弱点

ここまでResendを褒めてきましたが、もちろん完璧ではありません。Knock.appのレビューや実際の使用感から、以下のデメリットが挙げられます。

Cons:

  • Newer and less battle-tested compared to incumbents like Mailgun or SendGrid
  • Fewer enterprise features than established providers
  • Limited marketing email capabilities

Knock.app, "About Resend"

具体的には以下の点に注意が必要です。

1. 実績(Battle-tested)の少なさ
比較的新しいサービスであるため、「10年以上、毎月数十億通を安定して送っている」といったSendGridレベルの枯れた実績はまだありません。実際、Knock.appのデータでは90日間で33件のステータスページ更新(インシデント)が発生しており、SendGridやPostmarkと比べると若干多い傾向があります。

2. エンタープライズ機能の不足
SendGridやMailgunのような老舗サービスに比べると、高度な権限管理、複雑なマーケティングオートメーション、IPプールの詳細な制御などのエンタープライズ向け機能がまだ弱いです。

3. マーケティングメール機能が発展途上
最近「Broadcasts」機能が追加されましたが、MailchimpやActiveCampaignのような本格的なステップメールやA/Bテスト機能は備わっていません。

4. 無料枠の1日制限
月間3,000通まで無料ですが、「1日100通まで」という制限があるため、バッチ処理で一気に送るようなテストには向きません。

5. 日本語サポートの不足
現時点では公式ドキュメントが英語のみで、日本語のサポートチャンネルも存在しません。


5. Resendのコマンド・設定項目まとめ

最後に、Resendを使い始めるための具体的な設定方法をまとめます。

5.1 CLIのインストールと基本操作

Resendは優秀なCLIツール(v1.8.0)を提供しており、ターミナルから直接メール送信やドメイン管理が可能です。

# インストール(Ubuntu / macOS)
curl -fsSL https://resend.com/install.sh | bash

# または npm でインストール
npm install -g resend-cli

# または Homebrew でインストール(macOS)
brew install resend/tap/resend

認証・ログイン

# APIキーを対話形式で設定
resend login

# CI/CD環境では環境変数を使用(loginコマンド不要)
export RESEND_API_KEY=re_xxxxxxxxxxxxx

# ログアウト
resend logout

# 現在の認証状態を確認
resend whoami

# 複数プロファイルの切り替え
resend auth switch
resend domains list --profile production

メール送信

# テキストメールを送信
resend emails send \
  --from "Acme <onboarding@resend.dev>" \
  --to delivered@resend.dev \
  --subject "Hello World" \
  --text "It works!"

# HTMLファイルから送信
resend emails send \
  --from "Acme <onboarding@resend.dev>" \
  --to delivered@resend.dev \
  --subject "Hello World" \
  --html-file ./welcome.html

# CC・BCC・Reply-Toを指定して送信
resend emails send \
  --from "Acme <onboarding@resend.dev>" \
  --to delivered@resend.dev \
  --subject "Hello World" \
  --text "It works!" \
  --cc manager@example.com \
  --bcc archive@example.com \
  --reply-to noreply@example.com

# React Emailテンプレートから送信
resend emails send \
  --from "Acme <onboarding@resend.dev>" \
  --to delivered@resend.dev \
  --subject "Hello World" \
  --react-email ./emails/welcome.tsx

# バッチ送信(最大100件)
resend emails batch --file ./emails.json

# 送信済みメール一覧
resend emails list

# 特定メールの詳細取得
resend emails get <id>

# スケジュール済みメールのキャンセル
resend emails cancel <id>

ドメイン管理

# ドメインの追加(リージョン指定可能)
resend domains create --name example.com --region us-east-1

# ドメイン一覧
resend domains list

# DNS検証のトリガー
resend domains verify <id>

# ドメインの削除
resend domains delete <id>

Webhook管理

# Webhookエンドポイントの登録
resend webhooks create \
  --endpoint https://example.com/webhook \
  --events email.sent email.delivered

# ローカル開発時のWebhookリッスン
resend webhooks listen \
  --url https://hostname.tailnet-name.ts.net \
  --events email.received

# Webhook一覧
resend webhooks list

診断・その他

# 環境診断(APIキー・ドメイン状態の確認)
resend doctor
resend doctor --json  # JSON形式で出力

# CLIのアップデート確認
resend update

# ダッシュボードをブラウザで開く
resend open

# シェル補完スクリプトの生成
resend completion bash >> ~/.bashrc
resend completion zsh >> ~/.zshrc

CI/CDでの使用例(GitHub Actions)

env:
  RESEND_API_KEY: ${{ secrets.RESEND_API_KEY }}
steps:
  - run: |
      resend emails send \
        --from "Acme <onboarding@resend.dev>" \
        --to delivered@resend.dev \
        --subject "Deploy complete" \
        --text "Version ${{ github.sha }} deployed."

5.2 Go SDKの使い方

package main

import (
	"fmt"
	"github.com/resendlabs/resend-go"
)

func main() {
	client := resend.NewClient("re_xxxxxxxxx")

	// 基本的なメール送信
	params := &resend.SendEmailRequest{
		From:    "Acme <onboarding@resend.dev>",
		To:      []string{"user@example.com"},
		Subject: "Hello World",
		Html:    "<strong>It works!</strong>",
	}

	sent, err := client.Emails.Send(params)
	if err != nil {
		fmt.Println(err.Error())
		return
	}
	fmt.Println(sent.Id)

	// 添付ファイル付きメール
	paramsWithAttachment := &resend.SendEmailRequest{
		From:    "Acme <onboarding@resend.dev>",
		To:      []string{"user@example.com"},
		Subject: "Hello with attachment",
		Html:    "<p>Please see the attached file.</p>",
		Attachments: []*resend.Attachment{
			{
				Filename: "invoice.pdf",
				Path:     "/path/to/invoice.pdf",
			},
		},
	}
	_, _ = client.Emails.Send(paramsWithAttachment)

	// バッチ送信(最大100件)
	var batchParams []*resend.SendEmailRequest
	for i := 0; i < 5; i++ {
		batchParams = append(batchParams, &resend.SendEmailRequest{
			From:    "Acme <onboarding@resend.dev>",
			To:      []string{fmt.Sprintf("user%d@example.com", i)},
			Subject: fmt.Sprintf("Hello User %d", i),
			Html:    fmt.Sprintf("<p>Welcome, User %d!</p>", i),
		})
	}
	_, _ = client.Emails.SendBatch(batchParams)
}

5.3 SMTPとしての利用

既存のシステム(WordPressやレガシーシステム)から移行する場合、SMTPインターフェースも用意されています。

設定項目
Host smtp.resend.com
Port 25, 465, 587, 2465, 2587
Username resend
Password あなたのAPIキー
暗号化 TLS(推奨: 465または587)

5.4 ドメイン認証の設定項目

本番環境で利用するには、独自ドメインの認証が必須です。ダッシュボードからドメインを追加し、以下のDNSレコードを設定します。

レコード種別 目的 必須/任意
SPF (TXT) 送信元サーバーを証明 必須
DKIM (TXT) メールの改ざん防止 必須
DMARC (TXT) なりすまし防止ポリシー 推奨
BIMI (TXT) 受信トレイにブランドロゴを表示 任意
MX (MX) 受信メール処理(Inbound機能使用時) Inbound使用時のみ

5.5 Webhookイベント一覧

Resendが送信するWebhookイベントの主な種類です。

イベント 説明
email.sent メールが送信キューに追加された
email.delivered 受信サーバーに配信された
email.delivery_delayed 配信が遅延している
email.complained スパム報告された
email.bounced バウンス(配信失敗)した
email.opened メールが開封された
email.clicked リンクがクリックされた
contact.created コンタクトが作成された
contact.deleted コンタクトが削除された

まとめ

Resendは、「開発者が気持ちよく使えること」に全振りした素晴らしいサービスです。特に新規プロジェクトや、React/Next.js、Goなどを活用しているモダンなWebアプリケーションには第一の選択肢になるでしょう。

実測ベンチマークでも、TypeScript SDKのインストールサイズ(212KB)はSendGrid(836KB)やAWS SES(11MB)と比べて圧倒的に軽量で、APIのレスポンスタイム(p50: 78ms)やエラー率(0.08%)も業界トップクラスです。

一方で、月間数百万通を超えるような超大規模配信や、マーケティング部門がゴリゴリに使うような用途であれば、SendGridやAWS SES、Postmarkといった既存のサービスの方が適している場面もまだまだあります。

観点 Resend SendGrid AWS SES Mailgun Postmark
開発者体験 ⭐⭐⭐⭐⭐ ⭐⭐⭐ ⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐
料金(大量送信) ⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐ ⭐⭐
実績・安定性 ⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐
マーケティング機能 ⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐ ⭐⭐⭐ ⭐⭐
SDKの軽量さ ⭐⭐⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐
到達速度 ⭐⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐⭐

用途に合わせて、ぜひ最適なメール配信サービスを選んでみてください!


参考リンク

VeriCerts Tech Blog

Discussion