3
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

gem letter_opener を試してみる

これは何?

Railsの課題を実施しています。メール送信機能を作るにあたってletter_opener_webを使いましょうとの指定があったので、導入がてら色々と調べてみました。

なお、実行環境は以下の通りです。

  • Rails 5.2.3
  • Ruby 2.6.0

letter_opener と letter_opener_web

letter_opener自体は職場でも使われていたので名前は聞いたことがありました。メール送信内容の確認はデフォルトだとコンソールから確認できるみたいなのですが、それだと面倒なので、実際のメールに似た読みやすい画面で表示できるように作られたgemのようですね。
ただ、すぐに letter_openerletter_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/ にアクセスすることで(画像を表示)な感じで見ることができます。

公式が提供しているデモサイトにもアクセスすることで、挙動も確認できました。

Image from Gyazo

ブラウザで送信からメールでの受信のサンプルまで、一貫して作ってくれるんですね。そして、letter_opener_webの場合、ブラウザはデフォルトのブラウザに限らず、localhost:3000//letter_openerが開けるところなら、どこでも上記のような画面を開いてくれる模様です。

メール送信メソッドはまた別のようでしたので、次の記事で実装になりそうです。:relaxed:
(実装したら追記します!)

使い方

さて、gemの導入です。まずGemfile.rbに以下のように記入して...

Gemfile
group :development do
  gem 'letter_opener_web', '~> 1.0'
end

bundle installします。
次に、routes.rbletter_opener用のルーティングを追加します。

config/routes.rb
Rails.application.routes.draw do
  if Rails.env.development?
    mount LetterOpenerWeb::Engine, at: "/letter_opener"
  end

  # 後略 そのほかに設定したさまざまなルーティング
end

そして、letter_openerdeliverly methodconfig/environments/development.rbにセットします。

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/environments/development.rb
config.action_mailer.default_url_options = { host: 'localhost:3000' }

こちらは、Railsガイドのこちらの項目に詳しい設定が載っていたのですが、アプリケーションのホスト情報をメイラー内で使うためのオプションだそうです。

メール送信機能そのものは別途実装で、それはこちらの記事で書きました。(letter_openerとの接続は出てきませんが。。。)
Railsでメール送信機能を実装する

Railsチュートリアルでは、メール送信機能は、Railsのデフォルトの機能を利用して作っていましたね。こちらもいつかやり直してみたいです。

それでは、ここまで読んでくださり、ありがとうございました:relaxed:

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
3
Help us understand the problem. What are the problem?