Laravel Artisan Commandの作成方法
投稿日:2026/01/18
Laravelでは、CLIから実行できる処理をArtisan Commandとして作成できます。
本記事では、Artisan Commandの作成方法を解説します。
Artisan Commandとは?
Artisan Commandとは、Laravelアプリケーション内で実行できるCLIコマンドです。
- CLI = Command Line Interface(コマンドラインインターフェース)
- ターミナル(黒い画面)からコマンドを実行して、Laravelアプリケーションの処理を直接起動できます。
- ブラウザを経由せずに、サーバー上で処理を実行できます。
主な用途は次のとおりです。
- 定期バッチ処理(cron実行)
- データの一括更新・削除
- 集計処理
- 外部API連携
- キャッシュクリア・メンテナンス
Web画面から実行する処理と分離することで、
- タイムアウト制限を受けない
- 実行ログを残しやすい
- 障害時の切り分けがしやすい
というメリットがあります。
コマンドを作成する
artisanコマンドで作成
以下のコマンドで、新しいコマンドを作成します。
php artisan make:command PublishSamplesCommand
作成されるファイルはこちらです。
app/Console/Commands/PublishSamplesCommand.php
このファイルに、コマンド名・引数定義・実行処理を実装していきます。
実際にコマンド処理のロジックを書くのは、このクラスになります。
コマンドの基本構成
class PublishSamplesCommand extends Command
{
protected $signature = 'samples:publish';
protected $description = '未公開のサンプルデータを公開状態にする';
public function handle(): int
{
// 実行される処理
return Command::SUCCESS;
}
}
コマンドのクラスには、次の要素があります。
各要素の役割
| 項目 | 役割 | 備考 |
|---|---|---|
| signature | コマンド名・引数・オプションを定義する | コマンド名だけでなく、引数やオプションの定義もまとめて記述します。 |
| description | コマンドの説明 | |
| handle() | 実際の処理 |
コマンド処理を実装する
サンプル:未公開サンプルデータを公開する
use App\Models\Sample;
public function handle(): int
{
$count = Sample::where('is_published', false)
->update([
'is_published' => true,
'published_at' => now(),
]);
$this->info("{$count} 件のサンプルデータを公開しました。");
return Command::SUCCESS;
}
補足:
- update() の戻り値には、更新されたレコード件数が返ります。
- そのため、何件のデータが更新されたかをログに表示できます。
コマンドを実行する
実行コマンド
php artisan samples:publish
正常に実行されると、ターミナルにメッセージが表示されます。
登録済みコマンド一覧を見る
php artisan list
引数・オプションを受け取る
signatureに定義する
protected $signature = 'samples:publish {limit=10} {--dry-run}';
補足:
- 引数は「必須または位置で指定する値」
- オプションは「任意で指定するフラグや設定値」
例:
- limit → 処理件数を指定する引数
- --dry-run → 実際には更新せず確認だけ行うオプション、本番環境で安全に動作確認したい場合によく使用されます。
handle()で取得する
$limit = (int) $this->argument('limit');
$dryRun = $this->option('dry-run');
使用例
php artisan samples:publish 5 --dry-run
定期実行(cron)に登録する
Laravelでは、Schedulerを使ってコマンドを定期実行できます。
// app/Console/Kernel.php
protected function schedule(Schedule $schedule)
{
$schedule->command('samples:publish')->daily();
}
サーバー側のcronには以下を登録します。
* * * * * php /path/to/artisan schedule:run
補足:
- この設定は「毎分 schedule:run を実行する」という意味です。
- LaravelのSchedulerは、内部で実行タイミングを判定するため、cron自体は1分ごとに起動しておけば問題ありません。
実運用時の注意点
- 本番環境で実行するコマンドは必ずdry-runや確認ログを用意する
- 途中失敗しても再実行できる設計にする
- 大量データ処理ではメモリ使用量・実行時間に注意する
- 処理ロジックはServiceクラスに切り出すとテストしやすい
まとめ
- Artisan Commandでバッチ処理を実装できる
- signatureで引数・オプションを定義できる
- Schedulerと組み合わせることで定期実行が可能