いずみこんな悩みを解決できる記事を書きました!
僕は現役フリーランスエンジニア(歴10年)で、資格は13個保有しています。
「Laravelで定期実行処理をどう実装すればいいか分からない」とお考えではありませんか?
バッチ処理やレポート送信を毎回手動で実行するのは手間がかかります。
タスクスケジューラを使えば、Artisanコマンドやクロージャを好きな頻度で自動実行できます。



Laravel 11以降はスケジュールの書き方が変わったので、変更点も含めて解説しますね。
ということで、本記事ではLaravelでタスクスケジューラを使い定期実行処理を実装する方法を解説します。
| 【当サイト】おすすめフリーランスエージェント3選 | |||
|---|---|---|---|
| エージェント | 評価 | ポイント | 公式サイト |
レバテックフリーランス | 5.0 | 業界最大級のエージェント。 高単価案件が豊富。 | 公式 |
Midworks | 4.8 | 満足度調査で 3年連続3冠を達成。 | 公式 |
ITプロパートナーズ | 4.6 | 週2〜3向けの案件が豊富。 | 公式 |
【Laravel】タスクスケジューラで定期実行処理を実装する方法
早速ですが、Laravelでタスクスケジューラを使い定期実行処理を実装する方法を紹介します。
サーバー側でcronを準備する
Laravelのタスクスケジューラは、サーバー側のcronに1行だけ登録しておけば動作します。
個別のタスクごとにcronエントリを増やす必要はありません。
サーバーのcrontabに、毎分schedule:runを実行する設定を1行追加します。
* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1登録するタスクの実行タイミングは、Laravel側のコードで判断してくれます。
開発環境でcronを組まずに動作確認したい場合は、以下のコマンドを使います。
php artisan schedule:workフォアグラウンドで動き続け、登録したタスクを指定タイミングで実行してくれます。
Artisanコマンドを作成してスケジュールに登録する
Laravel 11以降はKernel.phpが廃止され、routes/console.phpに直接スケジュールを記述する形になっています。
実際に定期実行したい処理を、Artisanコマンドとして作成しながら登録してみます。
php artisan make:command SendDailyReport作成されたapp/Console/Commands/SendDailyReport.phpに処理を記述します。
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
class SendDailyReport extends Command
{
protected $signature = 'report:daily';
protected $description = '日次レポートを送信する';
public function handle(): void
{
$this->info('日次レポートを送信しました');
}
}コマンドクラスはapp/Console/Commands配下に置くだけで自動的に読み込まれます。



Kernel.phpに個別登録する作業が不要になったので、ファイルを1つ作るだけで済みます。
Scheduleファサードを使い、作成したコマンドの実行頻度を指定します。
use App\Console\Commands\SendDailyReport;
use Illuminate\Support\Facades\Schedule;
Schedule::command(SendDailyReport::class)->dailyAt('09:00');コマンド名の文字列を直接渡す書き方も可能です。
Schedule::command('report:daily')->dailyAt('09:00');クロージャで直接処理を記述する方法
ちょっとした処理であれば、コマンドクラスを作らずクロージャで直接登録できます。
use Illuminate\Support\Facades\Schedule;
use Illuminate\Support\Facades\Storage;
Schedule::call(function () {
Storage::disk('local')->delete('tmp/cache.json');
})->everyFiveMinutes();


キャッシュファイルの削除のような軽い処理は、クロージャで書いた方が手軽です。
実行頻度と重複実行防止のオプション
実行頻度は、メソッドチェーンで細かく指定できます。
everyMinute():毎分実行するhourly():毎時実行するdailyAt('09:00'):毎日指定時刻に実行するweeklyOn(1, '08:00'):毎週指定曜日・時刻に実行するcron('*/15 * * * *'):cron式で直接指定する
複数台のサーバーでアプリケーションを運用している場合は、重複実行への対策も必要です。
Schedule::command('report:daily')
->dailyAt('09:00')
->withoutOverlapping()
->onOneServer();withoutOverlapping()は前回の実行が終わっていない場合にスキップし、onOneServer()はキャッシュドライバを使って実行サーバーを1台に絞り込みます。



負荷が高いバッチ処理ほど、withoutOverlapping()とonOneServer()は付け忘れないよう意識しています。
失敗時の通知とログ出力
定期実行タスクは失敗に気づきにくいため、通知とログ出力を合わせて設定しておくと安心です。
Schedule::command('report:daily')
->dailyAt('09:00')
->emailOutputOnFailure('admin@example.com')
->appendOutputTo(storage_path('logs/schedule.log'));emailOutputOnFailure()はタスク失敗時に出力内容をメール送信し、appendOutputTo()は実行結果を指定したログファイルに追記します。



本番運用するタスクには、通知先を必ずセットで登録するようにしています。
| 【当サイト】おすすめフリーランスエージェント3選 | |||
|---|---|---|---|
| エージェント | 評価 | ポイント | 公式サイト |
レバテックフリーランス | 5.0 | 業界最大級のエージェント。 高単価案件が豊富。 | 公式 |
Midworks | 4.8 | 満足度調査で 3年連続3冠を達成。 | 公式 |
ITプロパートナーズ | 4.6 | 週2〜3向けの案件が豊富。 | 公式 |
【厳選】フリーランスエンジニアにおすすめなエージェント3選


フリーランスエンジニアになるにはエージェントから案件をもらう必要があります。
僕が実際に利用しているおすすめエージェントを紹介しますね。



エージェントは必ず複数登録してください。
担当者によっては「全然案件紹介してくれない…」みたいなこともあるので…
僕は実際に5つのエージェントを使い回していますよ。
フリーランスを始めるなら「レバテックフリーランス


」
- 業界最大級の案件数。
- 業界トップクラスの高単価報酬、低マージン(平均年収862万円)。
- 案件参画中のフォローの充実。
※詳細は「【業界最大手】レバテックフリーランスとは?メリットや利用手順を解説!」を参照。
レバテックフリーランス
![]()
![]()
とにかく案件数が多いので、とりあえず登録しておけば間違いないエージェントです!



僕もはじめてフリーランスの案件を貰ったのはレバテックフリーランス
![]()
![]()
保有している案件数が多いので、業務経験がなくても何かしらの案件は紹介してもらえますよ(僕はJavaの経験3年でも案件を貰えました)。
手厚い保障を重視したいなら「Midworks


」
- 手厚い保障で正社員並みの安心感。
- 還元率60%超え&単価公開でクリアな契約。
- 給与保障制度(審査あり)。
Midworks
![]()
![]()
フリーランスを目指しているけど不安な方や保障を重視したい方におすすめです。



僕も何度か案件を紹介してもらいました。
自分のスキルに合った案件を紹介してもらえましたし、電話のやり取りも非常に丁寧でした。
週2〜3日の案件探しなら「ITプロパートナーズ


」
- IT案件に特化したフリーランスエージェント。
- 週2〜3日の案件が豊富。
- リモート案件が多く、直エンドなので単価も高い。
※詳細は「【週2・3案件】ITプロパートナーズとは?メリットや利用手順を解説!」を参照。
ITプロパートナーズ
![]()
![]()
週2〜3日から参画できる案件が豊富なので、起業したい人にもおすすめです。



週2〜3日の案件はある程度スキルがないと紹介してもらえない印象です。
とはいえ、週5の案件ももちろんありますし、僕が利用した時は迅速・丁寧に対応していただきました!
よくある質問
schedule:runはどのくらいの頻度でcronに登録すればいいですか?
毎分実行するよう1行だけ登録すれば十分です。
実際の実行タイミングはLaravel側のスケジュール定義が判断するため、cron側で細かく分ける必要はありません。
ローカル環境でcronを設定せずにスケジューラを試すことはできますか?
php artisan schedule:workコマンドを使えば、cron設定なしで動作確認できます。
フォアグラウンドで動き続けるため、開発中の動作チェックに向いています。
複数のサーバーで同じアプリケーションを動かしている場合、タスクが重複実行されませんか?
onOneServer()メソッドを付けると、キャッシュドライバを使って実行サーバーを1台に絞り込めます。
重複実行を避けたいバッチ処理には、必ず付けておくと安心です。
まとめ
今回は、Laravelでタスクスケジューラを使い定期実行処理を実装する方法について解説しました。
以下が本記事のまとめになります。
- おすすめ本
Laravelの勉強なら「PHPフレームワーク Laravel入門 第2版



最後までお読みいただき、ありがとうございました!
| 【当サイト】おすすめフリーランスエージェント3選 | |||
|---|---|---|---|
| エージェント | 評価 | ポイント | 公式サイト |
レバテックフリーランス | 5.0 | 業界最大級のエージェント。 高単価案件が豊富。 | 公式 |
Midworks | 4.8 | 満足度調査で 3年連続3冠を達成。 | 公式 |
ITプロパートナーズ | 4.6 | 週2〜3向けの案件が豊富。 | 公式 |
- クソおすすめ本



海外のエンジニアがどういった思考で働いているかが理解できます。
海外に行く気はないけど海外エンジニアの動向が気になる雑魚エンジニアにおすすめです(本当におすすめな本しか紹介しないのでご安心を)。









