Livewireとは
Laravelで動的なUIを作ろうとすると、以前はVue.jsやReactなどのJavaScriptフレームワークを組み合わせるか、自分でAJAXリクエストを書くしかありませんでした。 Livewireはその問題を解決するLaravel用パッケージです。PHPとBladeだけでリアクティブなUIを構築できます。フォームのリアルタイムバリデーション、ライブ検索、カウンターなど、従来であればJavaScriptが必要だった機能を、すべてPHPで実装できます。Livewire 4はLaravel 10以降、PHP 8.1以降で動作します。現在の最新バージョンはLivewire 4です。
仕組みの概要
Livewireコンポーネントはサーバー上のPHPクラスとBladeテンプレートの組み合わせです。ユーザーがボタンをクリックしたりフォームに入力したりすると、Livewireは裏側でAJAXリクエストを送り、PHPを実行し、変更された部分だけをページに反映します。開発者はこの仕組みを意識することなく、PHPのみで記述できます。インストール
Laravelアプリケーションのルートディレクトリで以下のコマンドを実行します。レイアウトファイルの作成
フルページコンポーネントとして使う場合はレイアウトファイルが必要です。以下のArtisanコマンドで生成できます。resources/views/layouts/app.blade.php が生成されます。
@livewireStyles と @livewireScripts が、LiverwireとAlpine.jsのアセットを自動で読み込みます。
最初のコンポーネント
Livewireコンポーネントを生成するArtisanコマンドが用意されています。シンプルなカウンターを作ってみましょう。resources/views/components/⚡counter.blade.php という単一ファイルコンポーネントが生成されます。
生成されたファイルを次のように編集します。
wire:click がJavaScriptの代わりにPHPメソッドを呼び出す仕組みです。
プロパティとアクション
プロパティ — wire:model
wire:model ディレクティブで、入力要素とコンポーネントのプロパティを双方向バインドできます。
wire:model はアクション(フォーム送信など)が実行されたときにのみサーバーと同期します。入力のたびに同期させたい場合は .live 修飾子を追加します。
アクション — wire:click、wire:submit
wire:click はクリックイベント、wire:submit はフォームの送信イベントにメソッドを紐付けます。
リアルタイムバリデーション
Livewire 4では#[Validate] アトリビュートでプロパティにバリデーションルールを直接定義できます。
#[Validate] を付けたプロパティは更新のたびに自動バリデーションが走ります。wire:model.live.blur と組み合わせることで、フォーカスを外れた瞬間にエラーメッセージが表示されるリアルタイムバリデーション体験を実現できます。
$this->validate() はフォーム送信時に全プロパティをまとめて検証します。#[Validate] による自動バリデーションと二段階で使うのが推奨パターンです。ライフサイクルフック
Livewireコンポーネントにはいくつかのライフサイクルフックがあります。mount() — 初期化
mount() はコンポーネントの初期化に使います。コンストラクタの代わりです。
updated() — プロパティ変更後の処理
プロパティが更新されたあとに処理を挟みたい場合は updated() を使います。特定のプロパティに絞る場合はメソッド名に含めます。
Laravelとの統合
Eloquentモデルの活用
Livewireはプロパティに直接Eloquentモデルを保持できます。フォームオブジェクト
複雑なフォームはフォームオブジェクトに切り出すことで、コンポーネントをシンプルに保てます。まとめ
Livewireが特に向いているユースケースをまとめます。
Livewireは「Bladeを使ったことがある」Laravelエンジニアなら今日から使い始められます。JavaScriptフレームワークの学習コストなしで、インタラクティブなUIを実現できるのが最大の強みです。
SPA並みの高度なインタラクションが必要な場面ではInertia.jsが向いていますが、フォームや管理画面、データテーブルのような用途であればLivewireの方がシンプルに実装できることが多いです。まず小さなコンポーネント一つから試してみてください。
Livewire公式ドキュメント
Livewireの全機能(ファイルアップロード、ページネーション、テストなど)については公式ドキュメントを参照してください。