📨
Railsのメールプレビュー画面をカスタマイズする方法
はじめに
アプリケーションから送信されるメールの内容をエンジニア以外でも簡単に確認できるようにして欲しいという要望に対して、Action Mailerのプレビュー機能を使うことは多いかと思います。
ただし一覧画面に表示されるのはクラス名とメソッド名のみというシンプルな仕様なので、メールの種類が増えてくると内容を把握しにくくなることが難点です。
メソッド名を日本語にすることである程度はカバー出来るのですが、例えば実際に送信されたメールと照合しやすくするために件名も併記してほしい等の要望が出てくると、メソッド名だけでカバーするのはなかなか辛くなってくると思います。
そこでデフォルトで用意されているメールプレビュー用のテンプレートを上書きするための方法を紹介します。
設定方法
config/initializers/mailer_previews.rb
if Rails.env.development?
Rails.configuration.to_prepare do
module CustomPreviewMailerController
def self.prepended(base)
# 環境に応じてパスは書き換えてください
base.prepend_view_path Rails.root.join('spec/mailers/previews')
end
end
::Rails::MailersController.prepend CustomPreviewMailerController
end
end
上記設定の場合、spec/mailers/previews/rails/mailers
にテンプレートを設置することで上書き可能となります。
デフォルトで用意されているテンプレートはhttps://github.com/rails/rails/tree/main/railties/lib/rails/templates/rails/mailersから確認できます。
I18nで設定された件名を併記するように書き換えた例
index.html.erb
<% @previews.each do |preview| %>
<h3><%= link_to preview.preview_name.titleize, url_for(controller: "rails/mailers", action: "preview", path: preview.preview_name) %></h3>
<ul>
<% preview.emails.each do |email| %>
<li>
<%= link_to email, url_for(controller: "rails/mailers", action: "preview", path: "#{preview.preview_name}/#{email}") %>
<i style="color:#6c757d"><%= t(:subject, scope: [preview.preview_name, email], default: email) %></i>
</li>
<% end %>
</ul>
<% end %>
おわりに
テンプレートやコントローラーの処理をカスタマイズすることで、要件に応じてメールプレビュー画面の使い勝手を上げられるのではないかと思います。
Discussion