🍣
[Rails]イベント通知機能②(SMTP設定/.env/環境変数)
昨日の記事の続き。
SMTP設定
ここまで設定してGmailでメールが届かなかった。
config/environments/development.rb にて設定が必要。
development.rb は、開発環境の設定を書く場所なので
本番環境でも使用する場合はproductionにも下記コードを入力する必要がある。
(環境ごとに設定が必要)
development・productionとは?(復習)
環境名
- development(開発環境)
- test(テスト環境)
- production(本番環境)
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
参考文献
Discussion