Artisanとは
Laravelには Artisan(アーティサン) というコマンドラインインターフェース(CLI)ツールが標準で搭載されています。開発中の面倒な作業を自動化してくれる、Laravelを使う上で欠かせない存在です。
プロジェクトのルートディレクトリで以下のコマンドを実行すると、使用可能なコマンド一覧を確認できます。
php artisan list
また、各コマンドの詳細なヘルプを見たい場合は --help オプションが使えます。
php artisan make:model --help
よく使う組み込みコマンド
ファイル生成系コマンド
開発中に最もよく使うのが make:* 系のコマンドです。ボイラープレートコードを自動生成してくれるので、手書きの手間が省けます。
# モデルの生成
php artisan make:model Post
# コントローラの生成
php artisan make:controller PostController
# マイグレーションファイルの生成
php artisan make:migration create_posts_table
# フォームリクエストの生成
php artisan make:request StorePostRequest
# モデル・マイグレーション・コントローラをまとめて生成
php artisan make:model Post -mcr
-mcr オプションを付けると、モデル(Model)・マイグレーション(migration)・リソースコントローラ(resource controller)を一度に生成できて便利です。
データベース関連コマンド
マイグレーションやシーダーを操作するコマンドも頻繁に使います。
# マイグレーションの実行
php artisan migrate
# マイグレーションのロールバック(直前の1回分を戻す)
php artisan migrate:rollback
# 全テーブルを削除して再マイグレーション
php artisan migrate:fresh
# シーダーの実行
php artisan db:seed
# マイグレーションとシーダーをまとめて実行
php artisan migrate:fresh --seed
キャッシュ・設定のクリア
設定ファイルや環境変数の変更が反映されないとき、キャッシュのクリアが助けになります。
# アプリケーションキャッシュのクリア
php artisan cache:clear
# 設定キャッシュのクリア
php artisan config:clear
# ルートキャッシュのクリア
php artisan route:clear
# ビューキャッシュのクリア
php artisan view:clear
開発用サーバの起動
php artisan serve
このコマンドを実行すると http://localhost:8000 で開発用サーバが起動します。Dockerを使わないシンプルな開発環境で重宝します。
カスタムArtisanコマンドを作る
組み込みコマンドだけでなく、自分専用のコマンドを作成することもできます。たとえば「期限切れの投稿を一括削除する」といったバッチ処理をコマンド化する場面を想定してみましょう。
コマンドの雛形を生成する
php artisan make:command DeleteExpiredPosts
app/Console/Commands/DeleteExpiredPosts.php が生成されます。
コマンドクラスを実装する
生成されたファイルを開いて編集します。
<?php
namespace App\Console\Commands;
use App\Models\Post;
use Illuminate\Console\Command;
use Illuminate\Support\Carbon;
class DeleteExpiredPosts extends Command
{
/**
* コマンド名と引数・オプションの定義
*/
protected $signature = 'posts:delete-expired {--dry-run : 実際には削除せず件数だけ表示する}';
/**
* コマンドの説明
*/
protected $description = '有効期限切れの投稿を削除します';
/**
* コマンドの処理本体
*/
public function handle(): int
{
$expiredPosts = Post::where('expires_at', '<', Carbon::now())->get();
if ($expiredPosts->isEmpty()) {
$this->info('期限切れの投稿はありません。');
return Command::SUCCESS;
}
$this->info("期限切れの投稿が {$expiredPosts->count()} 件見つかりました。");
// --dry-run オプションが指定された場合は削除しない
if ($this->option('dry-run')) {
$this->warn('ドライランモード:実際の削除はスキップされました。');
return Command::SUCCESS;
}
// 確認プロンプトを表示
if (!$this->confirm('本当に削除しますか?')) {
$this->info('キャンセルしました。');
return Command::SUCCESS;
}
Post::where('expires_at', '<', Carbon::now())->delete();
$this->info('削除が完了しました。');
return Command::SUCCESS;
}
}
コマンドを実行する
# 通常実行
php artisan posts:delete-expired
# ドライランで確認だけ
php artisan posts:delete-expired --dry-run
ポイント解説
| プロパティ / メソッド | 役割 |
|---|---|
$signature | コマンド名・引数・オプションを定義する |
$description | php artisan list に表示される説明文 |
handle() | コマンド実行時に呼ばれるメイン処理 |
$this->info() | 緑色のテキストを出力する |
$this->warn() | 黄色のテキストを出力する |
$this->confirm() | y/n の確認プロンプトを表示する |
$this->option() | オプションの値を取得する |
スケジューラと組み合わせる
作成したカスタムコマンドは、Laravelのスケジューラを使って定期実行することもできます。app/Console/Kernel.php に以下のように登録します。
protected function schedule(Schedule $schedule): void
{
// 毎日深夜0時に実行
$schedule->command('posts:delete-expired')->dailyAt('00:00');
}
サーバ側でCronを1分ごとに起動するだけで、あとはLaravelが自動的にスケジュールを管理してくれます。
* * * * * cd /path-to-project && php artisan schedule:run >> /dev/null 2>&1
まとめ
Artisanはファイル生成・DB操作・キャッシュ管理など、日々の開発を大幅に効率化するツールです。さらにカスタムコマンドを作成することで、プロジェクト固有のバッチ処理もシンプルに管理できます。まずはよく使うコマンドを手に馴染ませつつ、必要に応じてカスタムコマンドにも挑戦してみてください。