Back

Laravel Livewireを始める

Laravel Livewireを始める

もしあなたがLaravelアプリケーションでリアクティブで動的なインターフェースを構築したいと考えているが、Vue、React、または大量のカスタムJavaScriptに手を伸ばしたくない場合、Laravel Livewireは注目に値します。Livewireを使えば、ステートフルなUIコンポーネントを完全にPHPとBladeで記述でき、ブラウザ側の更新はLivewireが自動的に処理します。

このガイドでは、Livewireの仕組み、最初のコンポーネントの構築方法、そしてLivewire 4における最新の開発体験について説明します。

重要なポイント

  • LivewireはPHPとBladeのみを使用してLaravelでリアクティブで動的なUIを構築できます — 別途JavaScriptフレームワークは不要です。
  • 単一ファイルコンポーネントはPHPロジックとBladeテンプレートを1つのファイルにまとめ、開発を効率化します。
  • Livewireは軽量なAJAXリクエストとインテリジェントなDOMパッチングを通じて、サーバーとブラウザ間の状態同期を自動的に処理します。
  • Alpine.jsはLivewireにバンドルされており、クライアント側のインタラクションを処理します。一方、Livewireはサーバー側のロジックが必要な処理を担当します。

Laravel Livewireとは?

Livewireは、動的なUIの構築を通常のPHPを書くような感覚で行えるようにする、Laravel向けのフルスタックフレームワークです。パブリックプロパティとメソッドを持つコンポーネントクラスを定義し、それをBladeテンプレートと組み合わせると、Livewireが裏側で軽量なAJAXリクエストを使用してサーバーとブラウザ間の状態同期を処理します。

WebSocketは不要です。別途APIも不要です。設定が必要なJavaScriptフレームワークもありません。

Laravelのエコシステムに自然に溶け込み、特に以下のような用途に適しています:

  • リアルタイムバリデーション付きのフォーム処理
  • ライブデータを表示するダッシュボード
  • 検索フィルター、モーダル、マルチステップフローなどのインタラクティブなウィジェット

最新のLivewireアプリケーションは、Livewireベースのワークフローを中心に構築された最近のLaravel starter kitsとも綺麗に統合できるため、最小限のセットアップで本番環境に対応した雛形を入手できます。

Livewireリアクティブコンポーネントの仕組み

ユーザーがLivewireコンポーネントとインタラクション(ボタンのクリック、フィールドへの入力など)を行うと、Livewireは現在のコンポーネントの状態と共にサーバーへリクエストを送信します。サーバーはアクションを処理し、状態を更新して、新しいレンダリング結果を返します。その後、Livewireは変更された部分のDOMのみをインテリジェントにパッチします。

開発者の視点からは、PHPメソッドを書いてパブリックプロパティを読み取るだけです。リアクティブな動作は自動的に発生します。

最初のLivewire単一ファイルコンポーネントの構築

最新のLivewireアプリケーションでは、PHPクラスとBladeテンプレートが1つの.blade.phpファイルに共存する単一ファイルコンポーネントがよく使用されます。これにより関連するロジックがまとまり、最新のLivewireにおける一般的なパターンとなっています。

コアとなる考え方を示す簡単なカウンターの例を示します:

<?php

use Livewire\Component;

new class extends Component {
    public int $count = 0;

    public function increment(): void
    {
        $this->count++;
    }

    public function decrement(): void
    {
        $this->count--;
    }
};

?>

<div>
    <button wire:click="decrement">-</button>
    <span>{{ $count }}</span>
    <button wire:click="increment">+</button>
</div>

ここで何が起きているか:

  • public int $countはコンポーネントのリアクティブな状態です
  • increment()decrement()はブラウザからトリガーされるサーバー側のメソッドです
  • wire:clickはボタンがクリックされた時にどのメソッドを呼び出すかをLivewireに伝えます
  • {{ $count }}の表示は各インタラクション後に自動的に更新されます — ページのリロードは不要です

注意: すべてのLivewireコンポーネントは単一のルートHTML要素を持つ必要があります。複数のルート要素はエラーの原因となります。

より実用的な例として、投稿作成フォームでは双方向データバインディングにwire:modelを使用し、wire:submitで組み込みバリデーション付きのフォーム送信を処理します — JavaScriptを一行も書く必要はありません。

Alpine.jsの代わりにLivewireを使用すべき場合

Alpine.jsはLivewireと共に提供され、軽量で純粋にクライアント側のインタラクション(ドロップダウンの切り替え、ツールチップの表示など)を処理します。インタラクションがサーバー側のロジック(データベースのクエリ、バリデーションの実行、データの保存、複雑な状態管理など)を必要とする場合は、Livewireが適切な選択です。

UIの洗練にはAlpineを使用してください。Laravelバックエンドが必要なリアクティブコンポーネントにはLivewireを使用してください。

重要: プロジェクトにAlpineが既に別途インストールされている場合は、二重に読み込まれていないことを確認してください。LivewireはAlpineを内部的にバンドルしており、Alpineインスタンスの重複は競合を引き起こす可能性があります。

次に探求すべきこと

基本に慣れたら、最も価値のある次の領域は以下の通りです:

  • wire:model修飾子 — リアルタイム更新用の.live、フィールドのblur時に同期する.blur
  • wire:loading — サーバーがリクエストを処理している間のローディング状態の表示
  • バリデーション — LivewireはLaravelのバリデーターと直接統合されます
  • コンポーネント間の通信dispatch()を使用してコンポーネント間でイベントを送信

まとめ

Livewireの真の強みは、複雑なJavaScriptで実装していたものを直感的なPHPに置き換え始めた時に現れます。Laravelの規約に従いながら、最新のWebアプリケーションに期待されるリアクティブな体験を提供します。既存のLaravelアプリで1つのインタラクティブフォームから始めれば、そのパターンはすぐに明確になります。

よくある質問

いいえ。LivewireはAlpineを内部的にバンドルしています。Livewireと並行してAlpineの別のコピーをインストールすると、Alpineが二重に読み込まれた場合に競合を引き起こす可能性があります。プロジェクトに既にスタンドアロンの依存関係としてAlpineが含まれている場合は、Livewireを追加する際に重複していないことを確認してください。

はい、LivewireはVueやReactと共存できます。サーバー駆動のインタラクティブコンポーネントにはLivewireを使用し、大量のクライアント側レンダリングが必要なセクションにはVueやReactを使用できます。これらは独立して動作するため、DOMの異なる部分をターゲットにする限り、本質的な競合はありません。

各Livewireインタラクションは標準的なAJAX呼び出しと同様にサーバーリクエストを送信します。ほとんどのユースケースでは、オーバーヘッドは無視できる程度です。ただし、大きなフォームでのリアルタイムタイピングなど、非常に頻繁な更新を伴うコンポーネントでは、不要な往復を減らすために.blurや.liveなどのwire:model修飾子を使用することで恩恵を受ける可能性があります。

Livewireの互換性はインストールするバージョンによって異なるため、新しいプロジェクトを始める前に必ず公式のLivewireインストールおよびアップグレードドキュメントを確認してください。新しいアプリケーションの場合は、古いv2やv3のチュートリアルに頼るのではなく、現在のLivewireドキュメントを使用してください。

Gain Debugging Superpowers

Unleash the power of session replay to reproduce bugs, track slowdowns and uncover frustrations in your app. Get complete visibility into your frontend with OpenReplay — the most advanced open-source session replay tool for developers. Check our GitHub repo and join the thousands of developers in our community.

OpenReplay