【Rails】SendGridの設定方法|GemなしでSMTP連携する最もシンプルな方法
【Rails】SendGridの設定方法|メール送信をGemなしでシンプルに実装
📩 Railsでメール送信をするには?
Railsでメールを送信する方法はいくつかありますが、代表的なのは以下の2つです:
- SMTPを使って外部サービス(SendGrid、Amazon SESなど)と連携
- 外部ライブラリ(gem)を導入してAPIベースで送信
今回は Gemを使わずにSMTP設定のみでSendGridを利用する方法 を紹介します。
理由はできるだけ構成をシンプルに保ち、設定・保守の負担を減らすためです。
✅ SendGridを選んだ理由(Amazon SESとの比較)
メールサービスとしては Amazon SES や SendGrid がよく使われますが、今回は以下の理由から SendGrid を採用しました。
比較項目 | SendGrid | Amazon SES |
---|---|---|
導入のしやすさ | ◎ UIがわかりやすく設定も簡単 | △ IAMやSES専用ポリシーなどが煩雑 |
コスト | ◎ 無料枠あり、有料もわかりやすい価格 | ◎ 非常に安価 |
ドメイン設定 | ◎ CNAMEで簡単認証 | △ TXTやDKIM設定がやや複雑 |
UI | ◎ 分かりやすい管理画面 | × 簡素なコンソール画面 |
トラッキング | ◎ 標準で対応(クリック/開封) | △ CloudWatchとの連携が必要 |
→ 結論:開発者フレンドリーで扱いやすく、Railsとの相性も良い SendGrid を採用。
⚙️ Railsでの設定(Gemなし、SMTP接続)
sendgrid-ruby
などのGemを使わず、SMTPでActionMailerに設定するだけで運用可能です。
# config/environments/production.rb
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
user_name: 'apikey',
password: ENV['SENDGRID_API_KEY'], # SendGridのAPIキーを環境変数で管理
domain: 'yourdomain.com',
address: 'smtp.sendgrid.net',
port: 587,
authentication: :plain,
enable_starttls_auto: true
}
👀SendGridとAmazon Route53でDNS設定する
独自ドメインを使って送信元を設定する場合は、SendGridでドメイン認証を行います。
ここでは Amazon Route53 を使ってDNSを設定しました。
手順:
- SendGridの「Sender Authentication」→「Domain Authentication」を選択
- DNSホスティングに「Amazon Route53」を選ぶ
- 指定された CNAME レコードを Route53 に追加
- 認証完了を待つ(通常数分〜数時間)
- api_keyを発行し、Railsに設定する
これでSPF・DKIMが有効になり、迷惑メールフォルダに入りにくくなります。
✅ メール送信の動作確認
本番環境(production)では、Railsコンソールなどからテストメールを送信して確認します。
> TestMailer.sample_email("your@email.com").deliver_now
実際にメールが届けばOK。
SendGridのダッシュボードでも送信ログや開封状況、バウンスの有無などを確認できます。
- 開発環境では、実際にメールを送らずブラウザで内容を確認できる letter_opener_web の利用がおすすめです。
✅ まとめ
- Railsでのメール送信には SendGrid + SMTP を採用
- Amazon SESとの比較で、設定のしやすさとUIのわかりやすさが決め手
- Gemは使わず、RailsのSMTP設定だけで導入可能
- DNS認証はAmazon Route53で簡単に対応(CNAMEレコード追加のみ)
- 本番環境では SendGridのダッシュボードでトラッキングも確認
- 開発環境では
letter_opener_web
を使えばブラウザでメール内容を即確認できて便利
→ シンプルで管理しやすい構成を目指すなら、SendGrid + SMTP + letter_opener_web の組み合わせは非常におすすめです!
感想
https://www.mini4wg.com/ でも使っております。
rails側をなるべくシンプルにすることにより、トラブル少なく対処できます。
またBounceレート等、SendGrid側で計測可能なのでActionMailer側で何か仕込むなど意識せずに対応できるのも非常に良い点だと思います。
Discussion