Laravel 定期処理を自動で実行①スケジューラーとコマンド設定方法

Laravel自動処理
スポンサーリンク

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の設定がややクセがありますが、分かりやすく解説していきますね。

Laravel自動処理

【無料プレゼント】

「LaravelでWebアプリをいちから作れるようになりたい!」

そんなLaravel初心者のあなたへ【Laravelの教科書】基礎編プレゼント中!
会員制フォーラムサイトを学習しながら作れます。

詳細はこちらをクリック

【個別サポート実施中】

「本ブログに記載の方法を試してみたけれど、うまくいかない」「コードを見てほしい」という方のために、有償でメールサポートいたします。以下のボタンをクリックして相談フォームにアクセスして下さい。

詳しく見る

Twitter始めました。
スポンサーリンク
40代からプログラミング!

コメント

タイトルとURLをコピーしました