AIにLaravelのコードを書いてもらっていたときにふと気づいたのですが、メール送信が2つのパターンで実装されている。
片方はMailable、もう片方はNotification。
どちらもメールは送られているけど何が違うんだ??と思ったので調べてみました。
結論
Mailableは細かいカスタマイズと送信が簡単にできるメール特化のクラス。
Notificationは通知を抽象化したクラスで、メールはあくまで機能の一つであり、主な責務は通知。
NotificationがMailableを使わなくてもメール送信できてしまうので、それで混乱していました。
ちなみにこれらは組み合わせて使用することも可能なので、Notificationで通知を行い、Mailalbeで送信メールの内容をコントロールするということができます。
MailableとNotificationの比較
結局組み合わせて使えるのですが、NotificationとMailableで具体的な機能にどのような差分があるのかを表にまとめてみました。
機能 | Notification | Mailable | 備考 |
---|---|---|---|
メール送信 | ◯ | ◯ | どちらもメールを送信する基本機能を持つ |
メール以外の方法でのメッセージ送信 | ◯ | ✕ |
Notification はSlackやDBへの通知もできる |
CC / BCC の指定 | △ | ◯ |
Notification 単体では面倒 |
ファイル添付 | △ | ◯ |
Notification 単体では面倒 |
シンプルな定型文メール | ◎ | ◯ | Notificationの場合、メソッド呼び出しだけで作れる |
使い分けのイメージ
ユーザー登録やパスワードリセットなどのイベントに応じたメールを送る場合はNotificationを使用し、メルマガなどイベントに紐づかない単体のメール送信はMailableを使うのが良いのではないでしょうか。
理由としては、以下の通り。
- イベントに対する通知は媒体がメールではなくなる可能性が十分にあるため、Notificationで抽象化されていれば通知先が変わったときにも楽に変更ができそう
- メルマガなどのマーケティング用のメールはトランザクションメールよりもこだわった内容を送ることが多そうなので、簡単にカスタマイズできるインターフェースを持ったMailableのほうが都合良さそう
イベントに対する通知は最初からMailbleと組み合わせても良い気もするが、要件や状況によってはオーバーエンジニアリングになるからシンプルに保つためにNotificationで完結させるのはありなんじゃないだろうか。
正直メルマガ的なものはアプリからというより、別でメール配信サービスを使うことが多いイメージなので、アプリケーションの開発をするならNotificationにお世話になることが多いかもしれない。
以上、MailableとNotificationがどちらもメール送れてしまうので、どう使い分けるの?という話でした