Laravelには便利なスケジューラー機能があり、設定した処理を、決まったタイミングで実行してくれます。
コマンドとスケジューラー機能を使って、新規登録ユーザーに、Laravelから定期的にメールを送信する機能を搭載してみます。
「定期的な処理を自動化したい!」という方は、参考にしてください。
前半では、まずは開発環境で搭載し、そのあとエックスサーバーにデプロイしていきます。
エックスサーバーではcron(クロン)を使って自動処理を行いますが、この部分は後半で解説していきますね。
Laravel 定期処理を自動で実行①スケジューラーの設定方法
まずはスケジュールごとに実行する内容を作っておきます。
コマンドファイルを作成し、その中に処理を入れていきましょう。
なお、メールを送信するには、予めサーバー情報の登録などが必要になります。
エックスサーバーでの設定は、こちらを参考にしてください。
①コマンドファイル作成
次のコマンドを入力し「NewUser」というコマンドファイルを作成します。
php artisan make:command NewUser
app/Console/Commands/NewUser.phpファイルを開きます。
ファイルの最初に、次の4つのuse宣言を入れておきます。
use Illuminate\Support\Facades\Mail; use App\Mail\WelcomeMail; use App\Models\User; use Carbon\Carbon;
その下の protected $signature には、ファイルを実行するときのコマンドを登録します。
今回は、email:newuser としておきます。
protected $signature = 'email:newuser';
そのあとの protected $descriptionは、コマンドの説明を大まかに入れておきます。
protected $description = 'send email to new user after the registration';

ここは、コードと関係ないので、適当に書いてもOKです。
下部のpublic function handle()には、実行される処理を入れておきます。
public function handle()
{
$today = Carbon::today();
$users=User::wheredate('created_at', $today)->get();
foreach($users as $user){
return Mail::to($user->email)->send(new WelcomeMail($user));
}
コードの意味Carbonを使って本日の日付を取得し、$todayに代入
作成日が本日のユーザーを取得し、$usersに代入
foreachで$usersを$userにし、$userごとにメールを送信する。
コマンドファイルの全体は、次のようになります。

Carbonを初めて使う場合は、インストールが必要になります。
下記コマンドを実行してください。
composer require nesbot/carbon
②Kernel.phpに登録
次にapp/Console/Kernel.phpファイルを開き、ここに作成したコマンドを登録します。
protected $commandsには、次のように入れます。
$schedule->command('email:newuser')->everyMinute();
とりあえず、毎分実行されるようにしておきます。
コマンドが実行される時間間隔は、everyMinuteの部分を変えれば、変更できます。
変更例を下記に挙げておきます。
【スケジュール実行の時間間隔】
| ->everyMinute(); | 毎分タスク実行 |
| ->everyFiveMinutes(); | 5分毎にタスク実行 |
| ->hourly(); | 毎時タスク実行 |
| ->everyThreeHours(); | 3時間毎にタスク実行 |
| ->daily(); | 毎日深夜12時に実行 |
| ->dailyAt(’13:00′); | 毎日13:00に実行 |
| ->twiceDaily(1, 13); | 毎日1:00と13:00時に実行 |
| ->weekly(); | 毎週日曜日の00:00にタスク実行 |
| ->monthly(); | 毎月1日の00:00にタスク実行 |
| ->monthlyOn(4, ’15:00′); | 毎月4日の15:00に実行 |
*参考:https://readouble.com/laravel/8.x/ja/scheduling.html
④ メールの作成
次に、ユーザーに送信されるメールの内容を作成します。
次のコマンドで、新規mailを作成します。
php artisan make:mail WelcomeMail
app/Mailの中にWelcomeMail.phpファイルができます。
19行目のconstruct~コードを追加していきます。
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
class WelcomeMail extends Mailable
{
use Queueable, SerializesModels;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct($user) {
$this->user=$user;
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->view('email.newuser')
->with(['user'=>$this->user])->subject('ご登録ありがとうございました');
}
}
送信されるメールの本文は、resources/views/emailフォルダの中のnewuser.blade.phpファイルに入れていきます。
⑤ビューファイルの作成
resources/viewsの中にemailフォルダを作り、この中にnewuser.blade.phpファイルを作ります。
とりあえず、次のような文章を入れておきます。
{{$user->name}}さん、
ようこそ♪
⑥テストする
これで準備OK。
とりあえず、新規ユーザーを登録したうえで、email:newuserコマンドを実行してみましょう。
php artisan email:newuser
無事、メールが届いていれば成功です!
なお、schedule:runとしても、コマンドが実行されます。
php artisan schedule:run
今回は定期処理をひとつしか登録しませんでしたが、定期処理は複数設定できます。
複数設定した場合、schedule:runを行えば、すべての処理を実行してくれます。
無事開発環境で動作したら、次はエックスサーバー上で動かしてみましょう。

この後の記事で解説していきます。
cronの設定がややクセがありますが、分かりやすく解説していきますね。




コメント