Resend CLIは、開発者向けに構築されたメールプラットフォームであるResendの公式コマンドラインツールです。npm install -g resend-cliまたはbrew install resend/cli/resendでインストールし、resend loginで認証すると、任意のターミナルまたはCI/CDパイプラインからメールの送信、ドメインの管理、メールインフラの自動化を行うことができます。
Resendとは?
Resendは開発者向けのメールAPIです。ドメインを接続し、APIキーを取得すると、パスワードのリセット、注文確認、オンボーディングシーケンスなど、プログラムでトリガーされるあらゆる種類のトランザクションメールをアプリケーションから送信できます。
2026年3月13日、Resendの創業者Zeno RochaがResend CLIを出荷し、そのインフラをターミナルにもたらしました。CLIには13のリソースにわたる53のコマンドがあります。TypeScriptで書かれ、MITライセンスの下で完全にオープンソースであり、3つの異なる利用者層に対応しています。
- 人間: 対話型プロンプト、読みやすい表形式出力、自然言語によるスケジュール設定(「明日の午前9時」など)
- AIエージェント: JSON出力モード、冪等性キー、自動エージェント検出
- CI/CDパイプライン: 環境変数認証、スクリプト可能なフラグ、一貫した終了コード
Resend CLIのインストール
CLIをインストールする方法は4つあります。ご自身の環境に合ったものを選んでください。
cURL経由(スタンドアロンバイナリ、Node.js不要)
curl -fsSL https://resend.com/install.sh | bash
これは、お使いのOS用の事前構築済みバイナリをダウンロードし、PATHに配置します。Node.jsは不要です。
npm経由
npm install -g resend-cli
Node.js 20以降が必要です。インストール後、動作を確認してください。
resend --version
Homebrew経由(macOSおよびLinux)
brew install resend/cli/resend
これはmacOSでの最もクリーンなオプションです。Homebrewが自動的にアップデートを処理します。
PowerShell経由(Windows)
irm https://resend.com/install.ps1 | iex
また、GitHubリリースページから.exeバイナリを直接ダウンロードすることもできます。
ローカル開発用
CLIに貢献したり、ソースからビルドしたりする場合は、Node.js 20+とpnpmが必要です。
git clone https://github.com/resend/resend-cli.git
cd resend-cli
pnpm install
pnpm build # outputs ./dist/cli.cjs
pnpm build:bin # native binary at ./dist/resend
アカウントの認証
resend loginを実行してCLIをResendアカウントに接続します。
resend login
これによりブラウザが開き、ResendダッシュボードでのAPIキー作成手順が案内され、認証情報が~/.config/resend/credentials.jsonに0600の制限された権限でローカルに保存されます。
非対話型環境(CI/CD、スクリプト)では、ブラウザフローをスキップして直接キーを渡します。
resend login --key re_xxxxxxxxxxxxx
一度保存されると、すべてのコマンドで再認証する必要はありません。CLIは以下の順序でAPIキーを解決します。
--api-keyフラグ(すべてを上書き)RESEND_API_KEY環境変数- 保存された認証情報ファイル
CIパイプラインでは、RESEND_API_KEYを秘密の環境変数として設定するのが標準的なアプローチです。
RESEND_API_KEY=re_xxx resend emails send --from builds@yourco.com --to dev@yourco.com --subject "Build passed" --text "All tests green."
複数アカウントのサポート
複数のResend組織やチームで作業する場合でも、CLIはそれに対応します。ログアウトせずに保存されたプロファイルを切り替えることができます。
resend auth switch
または、単一のコマンドに特定のプロファイルを渡します。
resend <command> --profile production
最初のメールの送信
送信の主要コマンドはresend emails sendです。最低限、送信元アドレス(検証済みドメインからのもの)、受信者、件名、本文が必要です。
プレーンテキストメールを送信
resend emails send \
--from "you@yourdomain.com" \
--to recipient@example.com \
--subject "Hello from the CLI" \
--text "This is a test email sent from the Resend CLI."
HTMLメールを送信
resend emails send \
--from "team@yourco.com" \
--to user@example.com \
--subject "Your order is confirmed" \
--html "<h1>注文が確定しました</h1><p>ご購入ありがとうございます。</p>"
または、ローカルのHTMLファイルを指定します。
resend emails send \
--from "team@yourco.com" \
--to user@example.com \
--subject "Welcome aboard" \
--html-file ./templates/welcome.html
配信のスケジュール設定
CLIはISO 8601タイムスタンプとともに自然言語の日付を解析します。
resend emails send \
--from "you@yourco.com" \
--to user@example.com \
--subject "Scheduled check-in" \
--text "Just checking in." \
--schedule "tomorrow at 9am"
「1時間後」、「来週月曜日の午後3時」、または完全なISOタイムスタンプのようなフレーズに対応します。
メールIDの取得
パイプされると、CLIは自動的にJSON出力に切り替わります。jqを介してパイプし、後続の操作のためにメールIDを取得します。
EMAIL_ID=$(resend emails send \
--from a@acme.com \
--to b@acme.com \
--subject "Test" \
--text "Hi" | jq -r '.data.id')
echo "Sent email: $EMAIL_ID"
スケジュールされたメールのキャンセルまたは更新
resend emails cancel $EMAIL_ID
resend emails update $EMAIL_ID --schedule "next Monday at 10am"
最近のメールを一覧表示
resend emails list
一度に最大100件のバッチ送信
メールオブジェクトの配列を含むJSONファイルを作成します。
[
{ "from": "you@yourco.com", "to": "alice@example.com", "subject": "Hi Alice", "text": "Hello!" },
{ "from": "you@yourco.com", "to": "bob@example.com", "subject": "Hi Bob", "text": "Hello!" }
]
次に、バッチを送信します。
resend emails send-batch --file emails.json
各バッチリクエストは、最大100通のメールを送信する場合でも、レート制限に対して1回のAPI呼び出しとしてカウントされます。
ドメインとAPIキーの管理
メールを送信する前に、検証済みのドメインが必要です。CLIは完全なドメインライフサイクルを案内します。
ドメインの追加
resend domains create --name yourdomain.com --region us-east-1
サポートされているリージョン:us-east-1、eu-west-1、sa-east-1、ap-northeast-1。遅延を最小限に抑えるために、ユーザーに最も近いリージョンを選択してください。
DNSレコードの検証
ドメインを作成した後、Resendは追加するDNSレコード(SPF、DKIM、DMARC)を提供します。それらをDNSプロバイダーに追加したら、以下を実行します。
resend domains verify --id <domain-id>
「verified」が返されるまでステータスをポーリングします。
resend domains get --id <domain-id>
トラッキングとTLSの設定
resend domains configure --id <domain-id> # 対話型設定
このコマンドを使用して、オープン追跡、クリック追跡、およびカスタムDKIMを有効にできます。
すべてのドメインを一覧表示
resend domains list
APIキーの管理
セキュリティのため、1つのキーをすべてで共有するのではなく、サービスまたは環境ごとにスコープ付きAPIキーを作成します。
resend api-keys create # 対話型で、ドメインごとにスコープを設定可能
resend api-keys list
resend api-keys delete --id <key-id>
スコープ付きキーは、各統合が実行できることを制限します。1つのドメインにスコープされたキーは、他のドメインやアカウント設定にアクセスできません。
高度な機能:ブロードキャスト、Webhook、テンプレート
個別のメール送信だけでなく、Resend CLIはさらに3つの主要なユースケースを処理します。大量ブロードキャスト、Webhook管理、再利用可能なテンプレートです。
ブロードキャスト
ブロードキャストを使用すると、同じメールを多数の連絡先リストに送信できます。まず下書きを作成し、その後送信またはスケジュール設定します。
resend broadcasts create # 対話型の下書き作成
resend broadcasts send --id <broadcast-id>
resend broadcasts schedule --id <broadcast-id> --date "next Monday at 10am"
Webhook
Webhookは、バウンス、オープン、クリック、スパムレポートなど、リアルタイムの配信イベントを提供します。CLIは完全なライフサイクルを処理します。
resend webhooks create # 新しいエンドポイントを登録
resend webhooks list
ローカル開発では、webhooks listenコマンドを使用してWebhookイベントをlocalhostにプロキシします。
resend webhooks listen --forward-to http://localhost:3000/webhooks/resend
これにより、ngrokなどのトンネリングツールを設定する必要がなくなります。CLIは、email.sent、email.delivered、email.bounced、email.opened、email.clickedを含む17のイベントタイプをサポートしています。
テンプレート
テンプレートを使用すると、動的変数を含む再利用可能なHTMLメールを作成できます。
resend templates create # 対話型テンプレートビルダー
変数は{{variable_name}}構文とフォールバック値を使用します。作成後、メール送信時にIDでテンプレートを参照します。
連絡先とオーディエンス
Resendには、マーケティングメール用の組み込みの連絡先管理機能があります。
resend contacts create --audience-id <id> --email user@example.com --first-name "Alice"
resend contacts list --audience-id <id>
resend contacts update --id <contact-id> --unsubscribed false
診断の実行
doctorコマンドは環境をチェックし、問題をフラグ立てします。
resend doctor
CLIのバージョン、APIキーの有効性、検証済みドメインを確認し、AIコーディングエージェント(Cursor、Claude Desktop、VS Code、OpenClaw)も検出します。
CI/CDパイプラインでのResend CLIの使用
CLIは自動化された環境でうまく動作するように構築されています。知っておくべきいくつかのパターンがあります。
機械可読な出力
出力をパイプするか--jsonを渡すと、CLIは構造化されたJSONに自動的に切り替わります。スピナーや対話型プロンプトはありません。
resend emails send --from a@co.com --to b@co.com --subject "Deploy" --text "Done" --json
--quietフラグは、JSON以外のすべての出力を抑制します。
resend emails list --quiet | jq '.[0].id'
破壊的な操作の自動確認
スクリプトで確認プロンプトをスキップするには、--yesを使用します。
resend api-keys delete --id <key-id> --yes
GitHub Actionsの例
- name: Send deployment notification
env:
RESEND_API_KEY: ${{ secrets.RESEND_API_KEY }}
run: |
resend emails send \
--from deploys@yourco.com \
--to team@yourco.com \
--subject "Deploy to production: ${{ github.sha }}" \
--text "Deployed commit ${{ github.sha }} to production."
レート制限
Resend APIのレート制限は、チームのすべてのAPIキーで共有され、1秒あたり2リクエストです。バッチ送信を行う場合、個別の送信をループする代わりにsend-batch(1回の呼び出しで最大100通のメール)を使用してください。
ApidogでメールAPIをテストする
Resend CLIは、対話的な使用や簡単なスクリプトに最適です。ただし、ResendのREST APIを直接呼び出すバックエンドを構築している場合、アプリケーションコードを書く前にこれらのエンドポイントを探索してテストする方法が必要です。
Apidogがそれに対応します。これは無料のAPIクライアントで、HTTPリクエストの送信、応答の検査、テストケースの整理、異なるAPIキーと構成の環境設定を可能にします。
Apidogが典型的なResend統合ワークフローにどのように適合するかを以下に示します。
Resend API仕様のインポート。 Resendはresend.com/docsでAPIリファレンスドキュメントを提供しています。API仕様をApidogにインポートして、リクエスト/レスポンススキーマを含むすべてのエンドポイントの整理されたビューを取得できます。
環境の設定。 Apidogで、開発用と本番用の環境を作成します。RESEND_API_KEYを環境変数として保存し、リクエストで{{RESEND_API_KEY}}として参照します。ワンクリックで環境を切り替えることができます。
送信ロジックのテスト。 アプリケーションからメールを送信するコードを書く前に、Apidogで正確なペイロードを使用してPOST /emailsエンドポイントを実行します。応答を確認し、メールIDが正しく返されることを確認し、エッジケース(フィールドの欠落、無効なアドレスなど)の動作を検証します。
テストの自動化。 Apidogのテストランナーを使用すると、API呼び出しを連結し、応答値をアサートできます。テストメールを送信し、IDで取得し、そのステータスを検証するテストを、テストコードを書かずに設定できます。
これにより、本番環境で統合バグが発生する前にキャッチできます。ローカル開発用のResend CLIと組み合わせることで、迅速なターミナルツールと徹底的なAPIテスト環境の両方を利用できます。
Resendの料金
CLI自体は無料でオープンソースです。料金はResendプラットフォームに適用されます。
| プラン | 料金 | 月間メール数 | 日次制限 | ログ保持期間 |
|---|---|---|---|---|
| 無料 | 月額$0 | 3,000 | 100/日 | 1日 |
| プロ | 月額$20 | 50,000 | 制限なし | 3日間 |
| スケール | 月額$90 | 100,000 | 制限なし | 7日間 |
| エンタープライズ | カスタム | カスタム | カスタム | カスタム |
無料プランについて知っておくべき点がいくつかあります。
- 1日100通の制限があるため、テストや小規模プロジェクトには適していますが、本番環境のトラフィックには向きません
- 分析(オープン/クリック追跡)には有料プランが必要です
- ログ保持期間は1日のみなので、24時間経過すると古いメールのステータスを取得できません
- レート制限はすべてのプランで1秒あたり2リクエストであり、チーム全体で共有されます
- 有料プランでの超過料金は、予期せぬ請求を防ぐため、月間クォータの5倍を上限とします
専用IPは、月額30ドルのScaleプランのアドオンで、1日あたり500通以上のメールを送信する場合に利用できます。
よくある質問
Resend CLIをインストールするにはNode.jsが必要ですか?
cURLまたはHomebrewでのインストール方法では必要ありません。これらは事前に構築されたスタンドアロンバイナリをダウンロードします。npmでのインストールにはNode.js 20以降が必要です。
なぜどのメールアドレスからも送信できないのですか?
Resendは検証済みのドメインを必要とします。ドメインを所有し、Resendが提供するDNSレコード(SPF、DKIM、DMARC)を追加し、検証ステップを通過する必要があります。Gmailのような無料のメールプロバイダーは送信元アドレスとしてサポートされていません。
無料プランでどのメールアドレスにも送信できますか?
はい。無料プランは受信者を制限しません。月間3,000通、1日100通の上限があります。
自然言語によるスケジュール設定はどのように機能しますか?
CLIは「明日の午前9時」、「2時間後」、「来週金曜日の午後3時」、または標準的なISO 8601タイムスタンプなどのフレーズを解析します。特に指定がない限り、時刻はシステムのローカルタイムゾーンで解釈されます。
出力がパイプされるとどうなりますか?
CLIはパイプされていることを検出し、スピナーやプロンプトなしで自動的にJSON専用出力に切り替わります。明示的に--jsonを渡す必要はありません。
複数のResendアカウントでCLIを使用できますか?
はい。resend loginを複数回実行して異なるプロファイルを保存し、resend auth switchでそれらを切り替えるか、任意のコマンドで--profile <名前>を渡して特定のプロファイルを使用できます。
Resend CLIはオープンソースですか?
はい、MITライセンスの下でgithub.com/resend/resend-cliでホストされています。
--quietと--jsonの違いは何ですか?
どちらもJSON出力を生成します。--jsonはJSON出力を強制します。--quietはスピナーや進行状況インジケーターを抑制し、これもJSONモードを意味します。実際には出力形式に関して同じように動作しますが、--quietはさらにデータ以外のすべての出力を削除します。
