Skip to main content

Notificationとは

Laravelの通知(Notification)システムは、メール・SMS・Slack・データベースなど複数の配信チャンネルに対して、統一されたAPIで通知を送る仕組みです。 MailとNotificationの違い 請求書の支払い完了通知のように、複数のチャンネルに同じ通知を送りたい場合はNotificationが適しています。

Notificationクラスの作成

make:notification Artisanコマンドでクラスを生成します。
生成されたクラスは app/Notifications/ ディレクトリに配置されます。クラスには via() メソッドと、各チャンネル向けのメッセージ生成メソッドが含まれます。

通知の送信方法

Notifiableトレイトを使う

App\Models\User にはデフォルトで Notifiable トレイトが含まれています。notify() メソッドで通知を送ります。
Notifiable トレイトは User モデルに限らず、任意のモデルに追加できます。

Notificationファサードを使う

複数のユーザーに同時に送信するには Notification ファサードを使います。
すぐに送信する (キューをスキップする) には sendNow() を使います。

配信チャンネルの指定

via() メソッドで使用するチャンネルを配列で返します。
ユーザーの設定に応じてチャンネルを切り替えることもできます。
利用可能な主なチャンネルは次のとおりです。

メールチャンネルでの通知

toMail() メソッドで MailMessage インスタンスを返します。
MailMessage の主なメソッドは次のとおりです。 エラーを通知する場合は error() メソッドを追加すると、ボタンが赤くなります。

Markdown通知メール

Markdown形式のリッチなメールを使うこともできます。--markdown オプションでクラスを生成します。
toMail() の代わりに toMarkdownMail() を使います。

データベースチャンネルでの通知

データベースチャンネルを使うと、通知をDBに保存してアプリのUI上で表示できます。

テーブルの準備

まず notifications テーブルを作成します。

toArrayメソッドの定義

toArray() メソッドで保存するデータを配列で返します。
このデータは notifications テーブルの data カラムにJSON形式で保存されます。

通知の取得

Notifiable トレイトが提供する notifications リレーションで通知を取得できます。
未読の通知だけを取得するには unreadNotifications を使います。

既読にする

markAsRead() で通知を既読にします。

通知のキュー処理

通知の送信に時間がかかる場合は、ShouldQueue インターフェースと Queueable トレイトを追加してキュー処理にします。make:notification で生成したクラスには最初からインポートされています。
ShouldQueue を実装すると、notify() を呼び出すだけで自動的にキューに入ります。
遅延送信も可能です。

複数チャンネルへの同時送信

via() メソッドで複数のチャンネルを返し、それぞれのメソッドを定義するだけで、同じ通知を複数チャンネルに同時送信できます。

オンデマンド通知

アプリにアカウントを持たないユーザーにも通知を送りたい場合は、Notification::route() を使います。

まとめ

最終更新日 2026年4月9日