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

ここは、コードと関係ないので、適当に書いてもOKです。
下部のpublic function handle()には、実行される処理を入れておきます。
コードの意味Carbonを使って本日の日付を取得し、$todayに代入
作成日が本日のユーザーを取得し、$usersに代入
foreachで$usersを$userにし、$userごとにメールを送信する。
コマンドファイルの全体は、次のようになります。
Carbonを初めて使う場合は、インストールが必要になります。
下記コマンドを実行してください。
②Kernel.phpに登録
次にapp/Console/Kernel.phpファイルを開き、ここに作成したコマンドを登録します。
protected $commandsには、次のように入れます。
とりあえず、毎分実行されるようにしておきます。
コマンドが実行される時間間隔は、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を作成します。
app/Mailの中にWelcomeMail.phpファイルができます。
19行目のconstruct~コードを追加していきます。
送信されるメールの本文は、resources/views/emailフォルダの中のnewuser.blade.phpファイルに入れていきます。
⑤ビューファイルの作成
resources/viewsの中にemailフォルダを作り、この中にnewuser.blade.phpファイルを作ります。
とりあえず、次のような文章を入れておきます。
⑥テストする
これで準備OK。
とりあえず、新規ユーザーを登録したうえで、email:newuserコマンドを実行してみましょう。
無事、メールが届いていれば成功です!
なお、schedule:runとしても、コマンドが実行されます。
今回は定期処理をひとつしか登録しませんでしたが、定期処理は複数設定できます。
複数設定した場合、schedule:runを行えば、すべての処理を実行してくれます。
無事開発環境で動作したら、次はエックスサーバー上で動かしてみましょう。

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