この記事について…
普段はRuby on Railsと無縁なプログラマなんですが、今更ながら面白そうという単純な理由からRuby on Rails Tutorialをやってみようと思い立ちました。今回は前回の記事の続きで第11章/第12章をやっていきます。
尚、Rails 5.1に対応した第4版を用いて、かつHyper-V上にインストールしたUbuntu 18.04の環境で進めていきます。
第11章 アカウントの有効化 / 第12章 パスワードの再設定
これらの章では指定したメールアドレス宛に認証メールを送ることでアカウントの有効化/パスワードの再設定を行う処理を作成します。RailsのAction Mailerライブラリを使用したメール送信処理の実装について、とても分かり易く説明されています。
実はRails 4.xに対応した第2版/第3版のチュートリアルではアカウントの有効化/パスワードの再設定について同一章で一度に取り扱われていました。その為、とてもボリュームの多い章となっていて学習難易度が高かったようです。
2つの章に分割され、更に「難易度が高いなぁ」と感じた場合は第11章/第12章については一旦飛ばして第13章に進んでもいいと明記されるようになったので、チュートリアル第1週目の取っ付き易さが上がったと感じます。
さて、チュートリアル内ではHerokuアドオンの「SendGrid」を使用した認証メール送信について説明されていますが、今回は「Gmail SMTP サーバー」から認証メールを送信するように少し改変してみたいと思います。Gmail SMTPサーバーを使用すると、1日2,000通を上限としてメール送信を行うことが可能です。
参考
プリンタ、スキャナ、アプリからメールを送信する
https://support.google.com/a/answer/176600?hl=ja
[Ruby/Rails]メール送信機能の実装方法(Gmail)
https://qiita.com/tanakadaichi_1989/items/82993ef2ae62a27c618d
Railsのproduction環境でGmailを使う設定
Gmail SMTP サーバーを使用する為に必要な前準備が3つあります。
それぞれGoogle アカウントヘルプに詳しく方法が書かれているので、そちらを参照してみてください。
(ほとんどの人はGoogleアカウントは既に取得済だと思うので、[2.]から準備すればいいかと思います。)
チュートリアル内ではSendGridを使用する為にproduction.rbの設定を以下のように行っています。
Rails.application.configure do
.
.
.
config.action_mailer.raise_delivery_errors = true
config.action_mailer.delivery_method = :smtp
host = '<your heroku app>.herokuapp.com'
config.action_mailer.default_url_options = { host: host }
ActionMailer::Base.smtp_settings = {
:address => 'smtp.sendgrid.net',
:port => '587',
:authentication => :plain,
:user_name => ENV['SENDGRID_USERNAME'],
:password => ENV['SENDGRID_PASSWORD'],
:domain => 'heroku.com',
:enable_starttls_auto => true
}
.
.
.
end
この箇所を、Gmailから認証メールを送信するように変更すると以下のようになります。
Rails.application.configure do
.
.
.
config.action_mailer.raise_delivery_errors = true
config.action_mailer.delivery_method = :smtp
host = "#{ENV['HEROKU_APPNAME']}.herokuapp.com"
config.action_mailer.default_url_options = { host: host, protocol: 'https' }
ActionMailer::Base.smtp_settings = {
:address => 'smtp.gmail.com',
:port => '587',
:authentication => :plain,
:user_name => ENV['GMAIL_USERNAME'],
:password => ENV['GMAIL_PASSWORD'],
:domain => 'gmail.com',
:enable_starttls_auto => true
}
.
.
.
end
ここでは環境変数ENVを使用して、重要なセキュリティ情報をソースコード内に残さないように注意しています。
heroku config:set HEROKU_APPNAME="HerokuのApp Nameを入力"
heroku config:set GMAIL_USERNAME="Gmailアカウント(xxx@gmail.com)を入力"
heroku config:set GMAIL_PASSWORD="生成したアプリパスワードを入力"
現在のチュートリアルはRails 5.1を使用していますが、Rails 5.2にアップデートされた際には環境変数ENVではなくcredential機能を使用する方がいいかなと思います。
ここまでの設定を終えてHeroku上のproduction環境でアカウント有効化/パスワード再設定処理を実行すれば、実際にGmailからメール送信されていることでしょう。
それでは、次回 第13章から再開したいと思います。