こんにちは、後藤です。
いつの間にか7月を迎え、いつの間にか今年も半分が過ぎ・・・時間の流れの早さを感じます。
今回は、Laravelでリマインドメールを送る方法について説明します。そこでは「バッチ処理」を活用していきます。
そもそも、リマインドメールとは?
そんな方は、例としてホテルの予約をした時を思い返してみてください。
宿泊日の前日に、登録しているメールアドレスに前日を知らせるメールが届くことがありますよね?それです(前までは、ホテルの方が一人一人にメール送信していると思っていました・・・)
コマンドクラスを作成
まずはじめに、Artisanコマンドを使用して新しいコマンドクラスを作成します。この例では、SendReminders
という名前のコマンドを作成します。
php artisan make:command SendReminders
このコマンドにより、app/Console/Commands
ディレクトリにSendReminders.php
という新しいクラスが作成されます。
コマンドの定義
次に、SendReminders
コマンドクラスを編集します。ここでは、コマンドのシグネチャ、説明、そしてhandle
メソッドによる主な動作を定義します。
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Batch;
use App\Jobs\SendReminderEmail;
use App\Models\User;
class SendReminders extends Command
{
// ここの'reminder:send'がコマンドで使われる
protected $signature = 'reminder:send';
protected $description = 'Send reminder emails to all users';
public function handle()
{
$users = User::all();
$jobs = $users->map(function ($user) {
return new SendReminderEmail($user);
});
$batch = Batch::dispatch(...$jobs);
$this->info('Reminder emails have been dispatched!');
}
}
ここでは、全ユーザーに対してリマインドメールを送信するジョブを作成し、それらをバッチ処理としてディスパッチしています。
メールの送信
SendReminderEmail
ジョブは、指定されたユーザーにリマインドメールを送信するためのものです。具体的なメールの送信処理は、Mailable
クラスを使用して実装します。
php artisan make:mail ReminderEmail
以上のコマンドでapp/Mail
ディレクトリにReminderEmail
という新しいメールクラスが作成されます。
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
class ReminderEmail extends Mailable
{
use Queueable, SerializesModels;
public function build()
{
// メール文章のviewファイルを用意
return $this->view('emails.reminder');
}
}
これで、Artisanコマンドを用いて以下のようにリマインドメールのバッチ処理を起動することが可能になります。
php artisan reminder:send
スケジューリング
リマインドメールのバッチ処理を自動化するためには、Laravelのタスクスケジューラを使用します。スケジューラはCronジョブのように動作し、定義した時間や間隔でコマンドを実行することができます。
以下のようにapp/Console/Kernel.php
を編集すると、reminder:send
コマンドが毎日午前8時に実行されるように設定することができます。
protected function schedule(Schedule $schedule)
{
$schedule->command('reminder:send')->dailyAt('8:00');
}
これにより、リマインドメールのバッチ処理は毎日自動的に実行されるようになります。
まとめ
以上が、Laravelでリマインドメールのバッチ処理を設定する方法です。知っておくと使う場面が多くて、とても便利です!バッチ処理を設定することにより、大量のメール送信やデータ処理を自動化し、時間を節約することができます。ぜひ、皆さんも活用してください!