🍣

[Rails]イベント通知機能②(SMTP設定/.env/環境変数)

に公開

昨日の記事の続き。

SMTP設定

ここまで設定してGmailでメールが届かなかった。
config/environments/development.rb にて設定が必要。

development.rb は、開発環境の設定を書く場所なので
本番環境でも使用する場合はproductionにも下記コードを入力する必要がある。
(環境ごとに設定が必要)

development・productionとは?(復習)

環境名

  • development(開発環境)
  • test(テスト環境)
  • production(本番環境)

https://zenn.dev/eliri/articles/43ecdbb7a849bb

config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
  address:              'smtp.gmail.com',
  port:                 587,
  domain:               'gmail.com',
  user_name:            ENV['MAIL_ADDRESS'],
  password:             ENV['MAIL_PASSWORD'],
  authentication:       'plain',
  enable_starttls_auto: true
}
  • config.action_mailer.delivery_method = :smtp
    • メールの配信方法として SMTP を使う
  • config.action_mailer.smtp_settings = { ... }
    • SMTPサーバーに接続するための設定
    • authentication 認証方法。
    • enable_starttls_auto 通信を暗号化するための設定。
  • 環境変数 ENV['MAIL_ADDRESS'], ENV['MAIL_PASSWORD'],
    • config/environments/環境名.rb には直接書かず、.env ファイルなどで安全に管理する

.envとは?

大事な秘密情報をまとめて隠した状態で保管するファイル。
例えば、以下の情報を.envファイルに保存する。

  • メールのログイン情報(アドレス・パスワード)
  • APIキーや秘密鍵
  • 外部サービスのIDやURL
    これらをコードに直接書かずに .env に書いて、Railsアプリの中で「環境変数」として使えるようにする。

.env を使うには?

.env を利用するには、dotenv-rails をGemfileに書き込む。
開発環境・テスト環境でしか読み込まれないようになっているので、本番環境で使いたい場合は追加設定が必要)。

gem "dotenv-rails"
MAIL_ADDRESS=youraddress@gmail.com
MAIL_PASSWORD=ここにアプリパスワードを貼る(16桁)

※アプリパスワードはスペースなしで貼り付ける。

環境変数が読み込まれているか確認する。

echo $env:MAIL_PASSWORD

環境変数とは?

.env に書いた情報は、Railsアプリ内で以下のように使える。

ENV['MAIL_ADDRESS']
ENV['MAIL_PASSWORD']

つまり、「.env に書いた値をENV[]で呼び出せるようにする」のが環境変数。


.envはGitHubにはあげてはいけない!

.envは、パスワードなど個人情報を載せているファイルなので、GitHubに上げてはいけない!
必ず .gitignore に入れておく。

.env

でも、GitHubにpushできないので、本番環境に.envファイルは引き継がれない。
⇒ 本番環境で.envファイルで設定したメーラーの内容が使用できなくなってしまう。
(管理者機能を追加した際も、管理者のID・パスワードを設定したのにうまく動作できなかったのは、本番環境の.envファイルを修正していなかったのが原因。)

本番環境は手動での設定が必要!

1. vimを使用して手動で.envファイルを書き換える

vim .env
  • キーボードで i を押すと編集モードになる。(画面左下に -- INSERT -- と表示される)
  • Esc キーを1回押すと、編集モードから抜ける。
  • :wq と打って Enter で、保存して終了

2. vimで以下を書きこむ

MAIL_ADDRESS=youraddress@gmail.com
MAIL_PASSWORD=ここにアプリパスワードを貼る(16桁)

3. 読み込まれてるか確認

  • Linux/macOS(bash/zsh)
echo $MAIL_PASSWORD
  • Windows PowerShell
echo $env:MAIL_PASSWORD

参考文献

https://railsguides.jp/action_mailer_basics.html#gmail用のaction-mailer設定
https://zenn.dev/nababa/articles/77727f9600ec13
https://qiita.com/3rarara/items/7405dc5ba43e1b6a17ad
https://zenn.dev/goldsaya/articles/0e4187f0cbf326#サーバーを設定

Discussion