今回は、特定の処理を決まった時間に定期的に実行したいと思い。
Laravelのcron機能を実装してみたので、その備忘録も兼ねて、まとめていきたいと思います。
(Laravelのscheduleクラスを利用しております。)
https://readouble.com/laravel/10.x/ja/scheduling.html
※今回のLaravel バージョンは10です。
目次
――――――――――――――――――――――――――――
① 「cron」とは
② 基礎
③ 発展
④ まとめ
――――――――――――――――――――――――――――
①『cron』とは
cronとは、「定期的にタスクを自動実行するための機能」です。
「クーロン」と読みます。cronを利用すると時間を指定して、あらかじめ決まった時間にタスクを実行してくれます。
以下、「cron」の使用例です。
例)毎分ごとに特定のディレクトリを参照し、ファイルを読み込みたい。
例)日付が変わるタイミングで特定の処理をしたい。
例)毎月初めにステータスをリセットしたい。
②基礎
[1]まずは実行するプログラムを作成します。
・Laravelのコマンドでファイルを作成します。
php artisan make:command SendEmails
上記のコマンドにより、Commandsディレクトリにファイルが作成されます。
project
├─ app
│ ├─ Console
│ │ ├─ Commands
│ │ │ └─ SeendEmails
│ │ ├─ Kernel.php
[2]つぎにファイルを追記していきます。
・「$signature」変数にコマンド名を格納します。
例)protected $signature = ‘command:sendEmails’;
・「$description」変数に処理の内容を格納します。
例)protected $description = ‘メールを配信する。’;
・「handle()」メソッド内に処理を記載します。
例)public function handle() {
{
ここにしたい事を書く。
※今回は割愛します。
}
以上の手順にて、実行するプログラム(コマンド)を作成することができます。
③発展
基礎にてコマンドを作成したので、発展では定期的に実行できるようにタスクスケジュールをしていきましょう。
[1] Kernelファイルにスケジュールを記載する。
・ConsoleフォルダにあるKernel.phpファイルに追記します。
project
├─ app
│ ├─ Console
│ ├─ Commands
│ │ └─ SeendEmails
│ ├─ Kernel.php
・Kernal.phpの$commandsに追記する。
例)protected $commands = [
\App\Console\Commands\SendEmails::class,
];
・Kernal.phpのschedule()メソッドにてスケジュールを指定できる。
例)protected function schedule(Schedule $schedule)
{
$schedule->command(‘command:sendEmails’)->everyTenMinutes();
}
以上の設定にて、10分ごとにsendEmailsコマンドを実行するように設定することができます。
[2] スケジュールの種類
メソッド | 説明 |
---|---|
cron('* * * * *'); |
カスタムcronスケジュールでタスクを実行 |
everySecond(); |
毎秒タスク実行 |
everyTwoSeconds(); |
2秒毎にタスク実行 |
everyFiveSeconds(); |
5秒毎にタスク実行 |
everyTenSeconds(); |
10秒ごとにタスク実行 |
everyFifteenSeconds(); |
15秒毎にタスク実行 |
everyTwentySeconds(); |
20秒ごとにタスク実行 |
everyThirtySeconds(); |
30秒ごとにタスク実行 |
everyMinute(); |
毎分タスク実行 |
everyTwoMinutes(); |
2分毎にタスク実行 |
everyThreeMinutes(); |
3分毎にタスク実行 |
everyFourMinutes(); |
4分毎にタスク実行 |
everyFiveMinutes(); |
5分毎にタスク実行 |
everyTenMinutes(); |
10分毎にタスク実行 |
everyFifteenMinutes(); |
15分毎にタスク実行 |
everyThirtyMinutes(); |
30分毎にタスク実行 |
hourly(); |
毎時タスク実行 |
hourlyAt(17); |
1時間ごと、毎時17分にタスク実行 |
everyOddHour($minutes = 0); |
奇数時間ごとにタスク実行 |
everyTwoHours($minutes = 0); |
2時間毎にタスク実行 |
everyThreeHours($minutes = 0); |
3時間毎にタスク実行 |
everyFourHours($minutes = 0); |
4時間毎にタスク実行 |
everySixHours($minutes = 0); |
6時間毎にタスク実行 |
daily(); |
毎日深夜12時に実行 |
dailyAt('13:00'); |
毎日13:00に実行 |
twiceDaily(1, 13); |
毎日1:00と13:00に実行 |
twiceDailyAt(1, 13, 15); |
毎日1:15と13:15に実行 |
weekly(); |
毎週日曜日の00:00にタスク実行 |
weeklyOn(1, '8:00'); |
毎週月曜日の8:00に実行 |
monthly(); |
毎月1日の00:00にタスク実行 |
monthlyOn(4, '15:00'); |
毎月4日の15:00に実行 |
twiceMonthly(1, 16, '13:00'); |
毎月1日と16日の13:00にタスク実行 |
lastDayOfMonth('15:00'); |
毎月最終日の15:00に実行 |
quarterly(); |
四半期の初日の00:00にタスク実行 |
quarterlyOn(4, '14:00'); |
四半期の4日の14:00に実行 |
yearly(); |
毎年1月1日の00:00にタスク実行 |
yearlyOn(6, 1, '17:00'); |
毎年6月1日の17:00にタスク実行 |
timezone('America/New_York'); |
タスクのタイムゾーンを設定 |
④まとめ
このようにLaravelでは、スケジュール機能にてcron機能を実装することができます。
とても便利な機能なので、ぜひ使用してみてはいかがでしょうか。