Laravelで開発を進める上で、避けて通れない最重要ツールが「php artisan(アルチザン/アーティザン)」です。
ローカル開発サーバーの起動から、コントローラーやモデルなどの雛形ファイル生成、データベースのマイグレーション、各種キャッシュのクリアまで、Laravelのあらゆる日常的な操作がArtisanコマンドを通じて行われます。
この記事では、「php artisanとは何か?」という基礎知識から、日常開発で必ず使う頻出コマンド一覧、独自コマンドの自作(作成・引数・オプション定義・Laravel 11/12対応)、初心者が直面しやすいエラーと対処法までを網羅して徹底解説します。
💡 本記事のポイント
- Artisanの基礎:Laravelの公式CLIツールの仕組みと実行方法
- 実行環境別のコマンド:ローカル環境 / Laravel Sail / Docker
- 頻出コマンド一覧:開発・生成・マイグレーション・キャッシュクリア・運用保守
- 実践チュートリアル:独自のArtisanコマンドを自作して実行する手順
- トラブルシューティング:
Could not open input file: artisanなどのエラー解決策
php artisan(Artisan)とは?なぜLaravelで重要なのか
Artisan(アルチザン)とは、Laravelに標準で同梱されている強力なコマンドラインインターフェース(CLI)です。英語の「Artisan(職人・工芸家)」に由来し、Laravel開発者が職人技を発揮できるように名付けられました。
Laravelプロジェクトを作成すると、プロジェクトのルートディレクトリに artisan というPHPスクリプトファイルが自動生成されます。これをPHPコマンドで呼び出すため、ターミナルで php artisan [コマンド名] と入力して実行します。
Artisanを使う大きな3つのメリット
- ファイルの自動生成でタイピングミスやボイラープレートを削減
コントローラー、モデル、マイグレーションファイル、ミドルウェアなどを正しい名前空間やディレクトリ構成で一瞬で生成できます。 - データベース操作を安全かつ再現性高く管理
テーブル作成やスキーマ変更(マイグレーション)、初期データ投入(シーディング)をコマンド一発で実行・ロールバックできます。 - バッチ処理や自動化タスクを簡単に実装・スケジューリング可能
定期実行したい処理や時間のかかるバックグラウンド処理を独自コマンドとして定義し、Cronやタスクスケジューラから安全に起動できます。
php artisanの基本的な使い方と実行環境
Artisanコマンドは、Laravelプロジェクトのルートディレクトリ(artisan ファイルが存在する階層)で実行するのが基本原則です。
基本の実行構文
php artisan <command-name> [arguments] [options]
command-name: 実行したいコマンド名(例:serve,migrate,make:controller)arguments(引数): コマンドに渡す必須または任意のパラメータ(例: 作成するコントローラー名)options(オプション):--から始まる追加設定フラグ(例:--force,--resource)
コマンド一覧とヘルプの確認方法
Laravelで利用できる全コマンドを確認したいときは、php artisan list を実行します。
# 利用可能な全Artisanコマンドを一覧表示
php artisan list
特定のコマンドのオプションや使い方が知りたい場合は、php artisan help <コマンド名> または --help オプションを付与します。
# migrateコマンドの詳細なヘルプとオプションを確認
php artisan help migrate
# または --help を末尾に付与
php artisan make:controller --help
また、Laravelのバージョンを確認したい場合は php artisan --version を実行します。
php artisan --version
# 出力例: Laravel Framework 11.20.0 (または 10.x / 12.x)
実行環境別のコマンドの叩き方
開発環境に応じて、Artisanの呼び出し方が少し異なります。ご自身の環境に合わせて使い分けてください。
| 開発環境 | 実行コマンドのプレフィックス | 実行例(サーバー起動) |
|---|---|---|
| ローカル(PHP直接導入) | php artisan |
php artisan serve |
| Laravel Sail | ./vendor/bin/sail artisan (または sail artisan) |
sail artisan migrate |
| Docker Compose(独自構成) | docker compose exec <サービス名> php artisan |
docker compose exec app php artisan list |
開発で必ず使う!php artisanの頻出コマンド一覧
日常の開発で頻繁に使う主要なArtisanコマンドを目的別に整理しました。
1. 開発・サーバー起動・対話シェル
| コマンド | 説明と主な用途 |
|---|---|
php artisan serve |
PHPの内蔵Webサーバーを起動(デフォルト: http://127.0.0.1:8000)。--port=8080 でポート指定可能。 |
php artisan tinker |
Laravelの対話型シェル(REPL)を起動。Eloquentモデルの検索や関数の動作テストを対話形式で即座に実行可能。 |
php artisan about |
PHPバージョン、Laravelバージョン、キャッシュドライバ、有効な設定など環境情報をサマリー表示。 |
2. ファイル・クラス生成系(makeコマンド)
Laravelでは make:xxx 系統のコマンドを使ってファイルを生成するのが標準です。手動でファイルを作成するよりも、適切な名前空間・継承・トレイトが設定されるためミスが激減します。
| コマンド | 生成されるファイル・用途 |
|---|---|
php artisan make:controller UserController |
app/Http/Controllers/UserController.php を生成。--resource を付けるとCRUDメソッド付きで生成。 |
php artisan make:model Post -mrc |
app/Models/Post.php を生成。-mrc を付けるとマイグレーション(-m)・リソースコントローラー(-r)・ファクトリ等を同時生成可能。 |
php artisan make:migration create_posts_table |
database/migrations/xxxx_create_posts_table.php を生成。 |
php artisan make:seeder UsersTableSeeder |
database/seeders/UsersTableSeeder.php を生成。 |
php artisan make:request StorePostRequest |
app/Http/Requests/StorePostRequest.php(フォームリクエスト)を生成。 |
php artisan make:command SendWeeklyMail |
app/Console/Commands/SendWeeklyMail.php(独自Artisanコマンド)を生成。 |
3. データベース・マイグレーション操作
| コマンド | 説明と注意点 |
|---|---|
php artisan migrate |
未実行のマイグレーションを一括実行してテーブルを作成・更新します。 |
php artisan migrate:status |
どのマイグレーションが適用済みか一覧ステータスを確認します。 |
php artisan migrate:rollback |
直前のマイグレーションバッチを取り消します(ロールバック)。--step=2 で取り消す数を指定可能。 |
php artisan migrate:fresh --seed |
全テーブルをドロップして最初から再マイグレーションし、初期データ(Seeder)を投入します。 ※開発環境専用。本番環境ではデータが消失するため厳禁です。 |
php artisan db:seed |
Seederを実行してデータベースにテストデータやマスタデータを投入します。 |
4. キャッシュ・設定クリア・最適化系
設定ファイル(.env や config/)を変更したのに反映されない場合や、ビューの変更が反映されない場合は、各種キャッシュクリアコマンドを実行します。
| コマンド | 説明 |
|---|---|
php artisan optimize:clear |
【最頻出】 設定・ルート・ビュー・イベント・コンパイル済みクラスなど全キャッシュを一括消去します。 |
php artisan config:clear |
設定ファイル(config)のキャッシュを消去します。 |
php artisan config:cache |
設定ファイルを1つにまとめてキャッシュ化します(本番環境の高速化用)。 |
php artisan route:clear |
ルーティングキャッシュを消去します。 |
php artisan view:clear |
コンパイル済みのBladeビュースクリプトを消去します。 |
5. ルーティング・運用保守・定期処理系
| コマンド | 説明 |
|---|---|
php artisan route:list |
登録されている全ルーティングのURL、HTTPメソッド、コントローラー、アクション、名前、ミドルウェアを一覧表示します。 |
php artisan storage:link |
public/storage から storage/app/public へのシンボリックリンクを作成し、画像等のファイルを公開アクセス可能にします。 |
php artisan schedule:run |
定義されたタスクスケジュールを評価して実行します(Cronに1分毎の実行を設定します)。 |
php artisan queue:work |
キューに入った非同期ジョブ(メール送信、画像処理など)をバックグラウンドで処理するワーカーを起動します。 |
php artisan down / php artisan up |
アプリケーションをメンテナンスモードに設定 / 解除します。 |
独自のArtisanコマンドを自作する手順(実践チュートリアル)
Laravelでは、定型的なバッチ処理や管理作業、データ集計などを実行するための独自Artisanコマンドを簡単に作成できます。
ここでは、「指定したユーザーのステータスを更新するコマンド(php artisan user:activate {id} --notify)」を作成する実践的な手順をステップバイステップで解説します。
手順1:`make:command` でコマンドクラスを生成する
まず、ターミナルで以下のコマンドを実行します。
php artisan make:command ActivateUser
実行すると、app/Console/Commands/ActivateUser.php が生成されます。(app/Console/Commands ディレクトリが存在しない場合は自動作成されます)
手順2:`$signature` と `$description` を定義する
生成されたファイルをエディタで開き、コマンドの呼び出し名(シグネチャ)と説明文を設定します。
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
class ActivateUser extends Command
{
/**
* コマンドのシグネチャ(実行時のコマンド名と引数・オプション)
*
* @var string
*/
protected $signature = 'user:activate {id : 有効化するユーザーのID} {--notify : ユーザーへメール通知を送るフラグ}';
/**
* コマンドの説明文(php artisan list で表示される)
*
* @var string
*/
protected $description = '指定したIDのユーザーを有効化ステータスに更新します';
シグネチャ($signature)の書き方パターン
user:activate {id}: 必須の引数user:activate {id?}: 末尾に?を付けると任意の引数user:activate {id=1}: デフォルト値を指定user:activate {--notify}: スイッチ型の真偽値(boolean)オプションuser:activate {--role=admin}: 値を受け取るオプション(デフォルト値付き)user:activate {id : 説明文}: 引数やオプションの後にコロンを付けて説明を記述可能
手順3:`handle()` メソッド内に処理を実装する
コマンドが実行されたときに呼び出されるのが handle() メソッドです。引数やオプションの取得、ビジネスロジックの実行、コンソールへのメッセージ出力を記述します。
/**
* コマンドの実行処理
*/
public function handle(): int
{
// 1. 引数とオプションの値を取得
$userId = $this->argument('id');
$shouldNotify = $this->option('notify');
$this->info("ユーザーID: {$userId} の有効化処理を開始します...");
// 2. 例としてユーザーを検索してステータス更新
$user = \App\Models\User::find($userId);
if (!$user) {
$this->error("エラー: ID [{$userId}] のユーザーが見つかりませんでした。");
return Command::FAILURE; // 終了コード 1
}
$user->is_active = true;
$user->save();
$this->info("✓ ユーザー [{$user->name}] を正常に有効化しました。");
// オプション指定時の追加処理
if ($shouldNotify) {
$this->comment("📧 ユーザー ({$user->email}) へ通知メールを送信しました。");
}
// テーブル形式で見やすく出力
$this->table(
['項目', '値'],
[
['ID', $user->id],
['名前', $user->name],
['ステータス', '有効 (Active)'],
['通知送信', $shouldNotify ? 'あり' : 'なし'],
]
);
return Command::SUCCESS; // 終了コード 0(正常終了)
}
}
主なコンソール出力メソッド一覧
$this->info('テキスト'): 緑色の成功メッセージを出力$this->error('テキスト'): 赤色のエラーメッセージを出力$this->warn('テキスト'): 黄色の警告メッセージを出力$this->line('テキスト'): 通常のプレーンテキストを出力$this->table($headers, $rows): テーブル(表)形式で整列して出力$this->confirm('実行しますか?'): ユーザーに対話形式でyes/noの確認を求める
手順4:コマンドを実行して動作確認する
作成したコマンドが登録されているか確認し、実際に実行してみましょう。
# 一覧で自作コマンドが表示されるか確認
php artisan list user
# ヘルプ画面を確認
php artisan user:activate --help
# コマンドを実行(ID: 1 のユーザーを有効化し、通知フラグを付与)
php artisan user:activate 1 --notify
【Laravel 11 / 12対応】クロージャベースの簡易コマンドと登録仕様
Laravel 11以降では、従来の app/Console/Kernel.php が廃止され、よりシンプルな構成になりました。
app/Console/Commands 配下に作成したクラスは自動的に検出・登録されます。また、短い処理であれば routes/console.php 内にクロージャ(無名関数)で直接コマンドを定義することも可能です。
// routes/console.php (Laravel 11 / 12)
use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\Schedule;
// 1. クロージャで簡単なコマンドをサクッと定義
Artisan::command('inspire:custom', function () {
$this->comment('今日も素晴らしいコードを書きましょう!');
})->purpose('モチベーション向上メッセージを表示');
// 2. タスクスケジュールの定義も routes/console.php に記述
Schedule::command('user:activate 1 --notify')->dailyAt('09:00');
php artisanでよくあるエラー・つまずきポイントと対処法
Artisanコマンドの実行時につまずきやすい代表的なエラーとその原因・解決策をまとめました。
1. `Could not open input file: artisan`
Could not open input file: artisan
- 原因: 現在ターミナルで開いているディレクトリがLaravelプロジェクトのルートディレクトリではありません。
- 解決策:
cdコマンドでartisanファイルが存在するプロジェクト直下に移動してから実行してください。# カレントディレクトリを確認 pwd # artisanファイルのあるLaravelルートへ移動 cd /path/to/laravel-project # 再度実行 php artisan list
2. `Command “xxx” is not defined.`
ERROR Command “make:controler” is not defined. Did you mean one of these? make:controller
- 原因: コマンド名のスペルミス、またはインストールしたパッケージのサービスプロバイダーや自作コマンドが読み込まれていません。
- 解決策: スペルを確認する(Laravelが「Did you mean…」と候補を教えてくれます)。自作コマンドの場合は
$signatureの記述や名前空間を確認し、php artisan optimize:clearを実行して再読み込みしてください。
3. 設定やコードを変更したのにコマンドの挙動が変わらない
- 原因:
config:cacheやroute:cacheなどのキャッシュが残っているため、古い設定が参照されています。 - 解決策:
php artisan optimize:clearを実行して全キャッシュを消去します。php artisan optimize:clear
4. 本番環境(Production)での実行時の注意点(–forceフラグ)
本番環境(.env の APP_ENV=production)で migrate などのデータベース変更コマンドを実行すると、誤操作防止のために以下のような確認プロンプトが表示されます。
**************************************
* Application In Production! *
**************************************
Do you really wish to run this command? (yes/no) [no]:
CI/CDパイプラインやデプロイスクリプトなど非対話形式で実行する場合は、--force オプションを付与して確認をスキップします。
# 本番環境の自動デプロイで実行する例
php artisan migrate --force
まとめ:ArtisanコマンドをマスターしてLaravel開発を加速させよう
今回は、Laravelのコマンドラインツール「php artisan」の概要、基本操作、頻出コマンド一覧、独自コマンドの自作手順、よくあるエラーの対処法までを幅広く解説しました。
📝 まとめのおさらい
- 基本操作:
php artisan listで一覧確認、help <command>で使い方を調べる - 頻出コマンド: 開発サーバー起動(
serve)、クラス生成(make:xxx)、マイグレーション(migrate)、全キャッシュ消去(optimize:clear)を押さえる - 自作コマンド:
make:commandで生成し、$signatureで引数・オプションを定義、handle()に処理を書く - エラー対策:
Could not open input fileはディレクトリ確認、設定不整合はoptimize:clearで解決
Artisanコマンドを自在に使いこなせるようになると、ファイル作成の手間が省けるだけでなく、開発スピードと品質が大幅に向上します。まずは list や make:xxx から日常の開発に取り入れてみてください。

コメント