2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

今更ながら Ruby on Rails Tutorial をやってみた (その11/その12)

2
Posted at

この記事について…

普段は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つあります。

  1. Googleアカウントを取得する
  2. 2段階認証プロセスをオンにする
  3. アプリパスワードを生成する

それぞれGoogle アカウントヘルプに詳しく方法が書かれているので、そちらを参照してみてください。
(ほとんどの人はGoogleアカウントは既に取得済だと思うので、[2.]から準備すればいいかと思います。)

チュートリアル内ではSendGridを使用する為にproduction.rbの設定を以下のように行っています。

config/environments/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から認証メールを送信するように変更すると以下のようになります。

config/environments/production.rb
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章から再開したいと思います。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?