make:component — コンポーネントを作成するコマンド

artisan

make:component

解説:Laravel の Blade コンポーネントを作成する Artisan コマンドです。

  • カテゴリ:artisan
  • 掲載バージョン:Laravel 12・PHP 8.4
  • 名前空間 / FQCN / コマンドphp artisan make:component
  • 関連make:viewmake:controllermake:classmake:requestmake:rule
  • 変更履歴
  • Laravel 7 で inline コンポーネントサポート追加
  • Laravel 9 でデフォルトコンポーネントパスを app/View/Components へ変更

要点(TL;DR)

何に使うか最小限の使い方よくある罠
Blade コンポーネント(クラス・インライン)を作成php artisan make:component Alertタグ名とクラス名が衝突すると Component [alert] is already defined
  --inline を付け忘れるとクラスだけ生成され、ビューが見つからない
  --tag を指定しないと自動生成されるタグ名が alert になるため既存タグと被る

概要

make:component は Blade コンポーネントを即座に作成できるコマンドです。
クラスコンポーネント(app/View/Components 配下)と匿名(インライン)コンポーネントの両方をサポートし、タグ名の明示も可能です。
実務では UI の再利用性を高めるために頻繁に利用されます。

構文 / シグネチャ

php artisan make:component [options] <name>
引数必須既定値説明
<name>string コンポーネント名(クラス名/ビュー名)
--inlineflag× 匿名(インライン)コンポーネントを生成
--tagstring× ビューで使用するタグ名を明示
--forceflag× 同名が存在する場合上書き
-h, --helpflag× ヘルプを表示
  • 戻り値:なし(生成したファイルのパスを標準出力に表示)
  • 例外/副作用:既に同名のクラスまたはビューが存在し、--force が付与されていない場合 RuntimeException を投げます。
    生成されたクラスは自動で namespace App\View\Components; が付与され、app/View/Components 配下に配置されます。

使用例

最小例

php artisan make:component Alert

実務例

// app/View/Components/Alert.php
namespace App\View\Components;

use Illuminate\View\Component;

class Alert extends Component
{
    public string $type;

    public function __construct(string $type = 'info')
    {
        $this->type = $type;
    }

    public function render()
    {
        return view('components.alert');
    }
}
{{-- resources/views/components/alert.blade.php --}}
<div class="alert alert-{{ $type }}">
    {{ $slot }}
</div>
{{-- 任意のビューで使用 --}}
<x-alert type="warning">
    注意: 重要な情報です。
</x-alert>

よくある落とし穴・注意

原因対処
タグ名衝突既存の HTML タグや別コンポーネントと同名--tag で別名を設定、またはクラス名を変更
ビューが見つからない--inline を付け忘れ、クラスのみ生成--inline オプションを付与、または手動でビューを作成
ネーミング規則違反クラス名にスペースや記号を含むPascalCase で記述、make:component --tag= でビュー名を分離
実行時にファイルが上書きされない既存ファイルが存在し --force を付け忘れphp artisan make:component Alert --force を実行

代替・関連APIとの比較

手段メリットデメリット選択基準
make:componentクラス・ビューが同時生成、タグ名自動推論生成ファイルのカスタマイズが難しい迅速に標準的なコンポーネントを作成したい時
make:view + 手動クラスフレキシブルな構成手間が増える既存のプロジェクト構造に合わせたい時
php artisan make:controller + viewMVC の慣習に沿うコンポーネント専用の機能がないコントローラとビューを合わせて作成したい時

テスト例(Pest)

it('creates a component class and view', function () {
    $this->artisan('make:component', ['name' => 'TestComponent'])
         ->expectsOutput('Component [TestComponent] created successfully.')
         ->assertExitCode(0);

    expect(app_path('View/Components/TestComponent.php'))->toBeFile();
    expect(resource_path('views/components/test-component.blade.php'))->toBeFile();
});

トラブルシュート(エラー別)

症状/エラー原因対処
Component [x] is already defined.同名のクラスまたはビューが存在--force を付与、または名前を変更
View [components.alert] not found.ビューが生成されていない--inline を付け忘れた、または手動で resources/views/components/alert.blade.php を作成
Class App\View\Components\Alert does not exist.Autoload が更新されていないcomposer dump-autoload を実行

参考リンク

レン (Wren)

こんにちは。レンです。

Laravelのコードの森に住んでいる、小さな案内役です。
ルーティングの枝やクラスの影を歩きながら、コードの流れや仕組みを眺めています。

このサイトでは、Laravelの基本から実装のコツまで、開発で役立つポイントを静かに整理しています。
難しいことを増やすのではなく、コードの見通しが少し良くなるヒントを届けるのが役目です。

「この処理はどこに書くのがいいのか」
「Laravelではどう考えると整理できるのか」

そんな疑問に、小さなメモを残すような気持ちで記事を書いています。

コードを書いている途中で迷ったとき、
このサイトが少し立ち止まって整理できる場所になればうれしいです。

レン (Wren)をフォローする