Laravel Livewire コマンドまとめ ― 実務で使えるリファレンス
以下は Livewire コンポーネントの作成・コピー・更新に関する、最短で使えるコマンドと実装サンプルです。
H2 から開始し、実務で頻繁に出てくるケースを中心に構成しています。
php artisan make:livewire
コンポーネントを作成すると、クラスと Blade ビューが同時に生成されます。
# コンポーネント名をクラス名と Blade ファイル名に変換
php artisan make:livewire ArticleForm
生成されるファイル
app/Http/Livewire/ArticleForm.phpresources/views/livewire/article-form.blade.php
使い方のポイント
- クラス名はキャメルケース、Blade ファイルは kebab-case
- クラスに
render()メソッドを実装し、view('livewire.article-form')を返す
php artisan livewire:copy
既存コンポーネントをコピーして、新しいバージョンを作る手間を省きます。
# ① コピーしたいコンポーネントを作成
php artisan make:livewire ArticleForm
# ② 同名のコピーを作成
php artisan livewire:copy ArticleForm
実行後
| コピー元 | コピー先 |
|---|---|
app/Http/Livewire/ArticleForm.php |
app/Http/Livewire/ArticleFormCopy.php |
resources/views/livewire/article-form.blade.php |
resources/views/livewire/article-form-copy.blade.php |
ポイント
名前空間・ファイルパスは自動で補正されるので、手動で修正する必要はありません。
コピー先での実装例
PHP クラス
<?php
namespace App\Http\Livewire;
use Livewire\Component;
use App\Models\Article;
class ArticleFormCopy extends Component
{
public Article $article;
public string $newTitle;
public function mount()
{
$this->article = new Article();
}
public function submit()
{
$validated = $this->validate([
'newTitle' => 'required|max:255',
]);
$this->article->title = $validated['newTitle'];
$this->article->save();
session()->flash('message', 'コピー記事が保存されました');
return redirect()->route('articles.index');
}
public function render()
{
return view('livewire.article-form-copy');
}
}
Blade ビュー
{{-- resources/views/livewire/article-form-copy.blade.php --}}
<div>
<h2>コピー記事を作成</h2>
<form wire:submit.prevent="submit">
<input type="text" wire:model="newTitle" placeholder="記事タイトル">
<button type="submit">保存</button>
</form>
@if (session('message'))
<div>{{ session('message') }}</div>
@endif
</div>
コマンド一覧(まとめ)
| コマンド | 役割 | 主なオプション |
|---|---|---|
php artisan make:livewire |
コンポーネント作成 | クラス名、Blade 自動生成 |
php artisan livewire:copy |
既存コンポーネントコピー | --force (上書き) |
php artisan livewire:refresh |
Blade ビュー更新 | — |
よくある使用ケースと実装ポイント
| 例 | 目的 | 具体的な実装ポイント |
|---|---|---|
| CRUD フォーム | データベースへのレコード作成/更新 | wire:model + wire:submit.prevent + $rules |
| モーダル | 編集・削除確認 | wire:click="openModal" + @if($showModal) |
| リストフィルタ | 大量データ絞り込み | protected $queryString = ['search']; |
| ファイルアップロード | 画像・ドキュメント添付 | public $photo; + save() |
よくある落とし穴と対策
- 名前空間の競合
- コピー後に手動でファイル名変更すると、
namespaceが古いまま残るケースがあります。 - 対策:
php artisan route:clearでキャッシュクリアし、namespaceを必ず確認。
- プロパティのリセット忘れ
wire:modelの値が次リクエストでも残るとバリデーションが失敗することがあります。- 対策:
$this->reset()をsubmit()後に呼び出す。
- バリデーションの抜け漏れ
- 直接
validate()だけで済ませるとルールが不十分。 - 対策:
$rules配列で必須項目・フォーマットを明示。
- Blade ファイルパス誤り
- コピー後に Blade を別ディレクトリに移動した場合、
render()が正しいパスを参照しない。 - 対策:
render()でview('livewire.article-form-copy')を明示的に指定。
参考リンク
- Livewire 公式ドキュメント(Artisan コマンド)
Quickstart | LaravelA full-stack framework for Laravel that takes the pain out of building dynamic UIs. - Laravel Livewire CRUD チュートリアル(Dev.to)
Laravel Livewire CRUD Tutorial: Step-by-Step Guide for BeginnersMaster Laravel Livewire CRUD operations with this comprehensive tutorial. Learn setup, real-time forms, validation, moda...
