あっぽログ
← 記事一覧に戻る

Laravel Artisanコマンド入門:よく使うコマンドからカスタムコマンド作成まで

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コマンド名・引数・オプションを定義する
$descriptionphp 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操作・キャッシュ管理など、日々の開発を大幅に効率化するツールです。さらにカスタムコマンドを作成することで、プロジェクト固有のバッチ処理もシンプルに管理できます。まずはよく使うコマンドを手に馴染ませつつ、必要に応じてカスタムコマンドにも挑戦してみてください。

← 記事一覧に戻る