これは何?
Railsの課題を実施しています。メール送信機能を作るにあたってletter_opener_web
を使いましょうとの指定があったので、導入がてら色々と調べてみました。
なお、実行環境は以下の通りです。
- Rails 5.2.3
- Ruby 2.6.0
letter_opener と letter_opener_web
letter_opener
自体は職場でも使われていたので名前は聞いたことがありました。メール送信内容の確認はデフォルトだとコンソールから確認できるみたいなのですが、それだと面倒なので、実際のメールに似た読みやすい画面で表示できるように作られたgemのようですね。
ただ、すぐに letter_opener
とletter_opener_web
があることがわかりました。まずは、両者の違いの確認から入ります。
letter_opener
まず、letter_opener
は、公式サイトの説明によると
メールを送信する代わりに、デフォルトのブラウザでプレビューします。これは、開発環境で電子メール配信を設定する必要がなく、誤って他の人のアドレスにテスト電子メールを送信することを心配する必要がないことを意味します。
というGemだそうです。
一方で、letter_opener_web
は、同じく公式サイトによると
letter_openerに送信された電子メールを閲覧するためのインターフェースを提供します。
だそうです。これだけだと「???」ですよね。
ちょうど、こちらのブログ記事で両者の違いをわかりやすく説明していました。
ただし letter_opener はリモートで開発していると使えないことが。例えば Mac の iTerm から Linux サーバにリモート接続して、ブラウザが Mac にある場合。letter_opener はリモート先の Linux でメールを開いている。なので見えない。
そんな時は letter_opener_web が便利。
デフォルトでは localhost:3000/letter_opener/ にアクセスすることで(画像を表示)な感じで見ることができます。
公式が提供しているデモサイトにもアクセスすることで、挙動も確認できました。
ブラウザで送信からメールでの受信のサンプルまで、一貫して作ってくれるんですね。そして、letter_opener_web
の場合、ブラウザはデフォルトのブラウザに限らず、localhost:3000//letter_opener
が開けるところなら、どこでも上記のような画面を開いてくれる模様です。
メール送信メソッドはまた別のようでしたので、次の記事で実装になりそうです。
(実装したら追記します!)
使い方
さて、gemの導入です。まずGemfile.rb
に以下のように記入して...
group :development do
gem 'letter_opener_web', '~> 1.0'
end
bundle install
します。
次に、routes.rb
にletter_opener
用のルーティングを追加します。
Rails.application.routes.draw do
if Rails.env.development?
mount LetterOpenerWeb::Engine, at: "/letter_opener"
end
# 後略 そのほかに設定したさまざまなルーティング
end
そして、letter_opener
のdeliverly method
をconfig/environments/development.rb
にセットします。
config.action_mailer.delivery_method = :letter_opener
config.action_mailer.perform_deliveries = true
action_mailer
のさまざまな設定に関しては、Railsガイドの Rails アプリケーションを設定するのページに一気に載っています。
上記は、それぞれ
-
config.action_mailer.delivery_method
... 配信方法を指定。詳細はAction Mailerガイドも参照 -
config.action_mailer.perform_deliveries
... メールを実際に配信するかどうかを指定します。デフォルトはtrue
。
もう一つ、今回は以下のような設定も追記しました。
config.action_mailer.default_url_options = { host: 'localhost:3000' }
こちらは、Railsガイドのこちらの項目に詳しい設定が載っていたのですが、アプリケーションのホスト情報をメイラー内で使うためのオプションだそうです。
メール送信機能そのものは別途実装で、それはこちらの記事で書きました。(letter_openerとの接続は出てきませんが。。。)
Railsでメール送信機能を実装する
Railsチュートリアルでは、メール送信機能は、Railsのデフォルトの機能を利用して作っていましたね。こちらもいつかやり直してみたいです。
それでは、ここまで読んでくださり、ありがとうございました