🍣
[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
ファイルを修正していなかったのが原因。)
本番環境は手動での設定が必要!
.env
ファイルを書き換える
1. vimを使用して手動で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