【Rails】Mailerのプレビュー機能が表示される流れ(プレビュー機能が動作する経緯)

## Mailerのプレビュー機能が表示される流れ

Mailerを用いて、プレビュー機能（送信メールの確認画面を表示する機能）の処理の流れを理解に苦戦したため、自分用に備忘録として残しておきます。
※ざっくりとした流れだけですので、詳細については割愛してます。

私と同じ境遇の方の役に立てば幸いです。

## 環境
` gem 'letter_opener_web'`導入済み。

### 1.プレビュークラスの定義
今回は、下記のプレビューファイルを定義しています。
```Ruby:spec/mailers/previews/article_mailer_preview.rb
# Preview all emails at http://localhost:3000/rails/mailers/article_mailer
class ArticleMailerPreview < ActionMailer::Preview
  def report_summary
    ArticleMailer.report_summary
  end
end
```

`ArticleMailerPreview`クラスでは、`ArticleMailer`クラスの`report_summary`メソッドを呼び出します。
↓
```Ruby:app/mailers/article_mailer.rb
class ArticleMailer < ApplicationMailer
  def report_summary
    @published_article_count = Article.published.count
    @articles_on_published_yesterday = Article.published_yesterday
    mail(to: 'admin@example.com', subject: '公開済記事の集計結果')
  end
end
```
**プレビューファイルのディレクト配置について**
公式ドキュメントに記載のある通り、test配下のディレクトリに配置する。
※今回のtestは、rspec
>mailer_preview.rb ファイルは、test配下のディレクトリに配置する。

### 2.プレビューのアクセスポイント
`http://localhost:3000/rails/mailers/article_mailer`というURLは、Railsのメーラープレビュー機能によって提供され、アクセスすると、アプリケーションで定義されているすべてのメーラープレビューのリストを表示されます。

#### `http://localhost:3000/rails/mailers/article_mailer`の説明

`http://localhost:3000/rails/mailers/[メーラークラスの小文字かつアンダースコア形式]`

上記のURLにアクセスすると、下記のような画面がブラウザ上で表示される。※`gem 'letter_opener_web'`を導入しているため、web上でプレビュー画面が表示されている。
[![Image from Gyazo](https://i.gyazo.com/71b7e67d7ebb2b95741ea17ff8861462.png)](https://gyazo.com/71b7e67d7ebb2b95741ea17ff8861462)


表示されているのは、プレビュークラスで定義されているメソッド名。
→今回の例だと、`ArticleMailerPreview`

この表示されているメソッド名のリンクをクリックすると、メソッドで記載されている処理が実行され、そのメソッド名のviewファイルがレンダリングされ、表示される。

**※今回の例のメソッドの定義**
```Ruby:app/mailers/article_mailer.rb
class ArticleMailer < ApplicationMailer
  def report_summary
    @published_article_count = Article.published.count
    @articles_on_published_yesterday = Article.published_yesterday
    mail(to: 'admin@example.com', subject: '公開済記事の集計結果')
  end
end
```

**※今回の例のviewファイル**
```erb:app/views/article_mailer/report_summary.text.erb
公開済の記事数: <%= @published_article_count %>件

<% if @articles_on_published_yesterday.present? %>
    昨日公開された記事数: <%= @articles_on_published_yesterday.count %>件
    <% @articles_on_published_yesterday.each do |article| %>
    タイトル: <%= article.title %>
    <% end %>
<% else %>
    昨日公開された記事はありません
<% end %>
```

### 3.メーラープレビューの表示

プレビュークラス内で定義されたメソッド名（この場合は`report_summary`）に対応するリンクをクリックすると、そのメソッドが実行され、`ArticleMailer`クラスの`report_summary`メソッドによって生成されたメールのプレビューが表示されます。

この時、`app/views/article_mailer/report_summary.text.erb`（または`.html.erb`など）のテンプレートがレンダリングされ、その内容がブラウザ上で確認できるようになります。

`ファイルの命名は、メソッド名.text.erb`

**ブラウザ上に表示されたpreview画面**
[![Image from Gyazo](https://i.gyazo.com/b473863b70bd4da7dfb341cc0916bce3.png)](https://gyazo.com/b473863b70bd4da7dfb341cc0916bce3)


生成されるURL：

`http://localhost:3000/rails/mailers/article_mailer/report_summary`

`http://localhost:3000/rails/mailers/article_mailer/メソッド名`

厳密に記載すると、下記のようになる。
`http://localhost:3000/rails/mailers/[メーラークラスの小文字かつアンダースコア形式]/[プレビュークラス内のメソッド名]`


## 最後に
以上、ざっくりとした説明ではありますが、Mailerのプレビュー機能が表示される流れについての説明でした。

今後も初学者ながらにでは、ありますがアウトプットしていこうと思いますので、宜しくお願い致します。

※誤りがあれば、教えていただけますと幸いです。🙏


### 参考記事
https://railsguides.jp/action_mailer_basics.html#%E3%83%A1%E3%83%BC%E3%83%AB%E3%81%AE%E3%83%97%E3%83%AC%E3%83%93%E3%83%A5%E3%83%BC