Skip to main content

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アプリケーションのルートディレクトリで以下のコマンドを実行します。
Laravelのパッケージ自動検出が有効なので、追加の設定は不要です。

レイアウトファイルの作成

フルページコンポーネントとして使う場合はレイアウトファイルが必要です。以下のArtisanコマンドで生成できます。
resources/views/layouts/app.blade.php が生成されます。
@livewireStyles@livewireScripts が、LiverwireとAlpine.jsのアセットを自動で読み込みます。

最初のコンポーネント

Livewireコンポーネントを生成するArtisanコマンドが用意されています。シンプルなカウンターを作ってみましょう。
このコマンドで resources/views/components/⚡counter.blade.php という単一ファイルコンポーネントが生成されます。
ファイル名の ⚡ はLivewireコンポーネントをひと目で識別するためのものです。エディタでの視認性が上がります。不要であれば設定で無効にできます。
生成されたファイルを次のように編集します。
Bladeテンプレートにこのコンポーネントを埋め込むには、通常のBladeコンポーネント構文を使います。
ボタンをクリックするたびにページリロードなしでカウントが更新されます。wire:click がJavaScriptの代わりにPHPメソッドを呼び出す仕組みです。

プロパティとアクション

プロパティ — wire:model

wire:model ディレクティブで、入力要素とコンポーネントのプロパティを双方向バインドできます。
デフォルトでは wire:model はアクション(フォーム送信など)が実行されたときにのみサーバーと同期します。入力のたびに同期させたい場合は .live 修飾子を追加します。

アクション — wire:clickwire: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の全機能(ファイルアップロード、ページネーション、テストなど)については公式ドキュメントを参照してください。
最終更新日 2026年4月25日