書籍「Laravelの教科書」Laravel13対応サポートガイド公開中 → ダウンロードはこちら

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

Laravel自動処理

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

Laravel自動処理

生成AIを「安全に」使うための研修・セミナー

お問い合わせ

生成AIの業務活用で気になるのは、効率だけでなくセキュリティです。 実践的な活用に加え、セキュリティ対策もお伝えします。

詳細を見てみる
 

生成AIを「安全に」使うための研修・セミナー

お問い合わせ

生成AIの業務活用で気になるのは、効率だけでなくセキュリティです。 実践的な活用に加え、セキュリティ対策もお伝えします。

詳細を見てみる

【Laravelの教科書・プレゼント】

Junko
Laravelの使い方を覚えたい!と思ったら、ぜひ、役立ててほしいです。 基礎編は無料でプレゼント中です♪
ひつじプログラマ
会員制サイトをいちから作っていくよ。ボタンをクリックして詳細を見てね。
Laravelの教科書の詳細を見る

最新版Laravel13への対応に対応。Laravel8からの各バージョンのテキストもご覧になれます♪

【無料プレゼント】

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

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

詳細はこちらをクリック

最新のLaravel13に対応。Laravel8からの各バージョンのテキストもご覧になれます♪

Laravelの本を書きました。


ひつじが目印♪

Laravelの使い方を分かりやすく解説した本を書きました。 書店やAmazon等のオンラインショップにて販売中
最新版Laravel13対応用サポートガイド(PDF)あり

書籍の詳細を見てみる

Laravelの本書きました。


ひつじが目印♪
クリックするとamazonページへ。
最新版Laravel13対応用
サポートガイド(PDF)あり

書籍の詳細を見てみる
シェアする
Twitter始めました。

コメント

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