mcpField
L
laravel-livewire

laravel-livewire

github.com/fusengine開発34152 回インストール2 週間前に更新
リポジトリ

laravel-livewire について

laravel-livewireは、Laravel 13とLivewire 4を扱う開発者向けのリファレンススキルで、リアクティブコンポーネント、フォーム、イベント、テストを解説します。Volt、Folio、Precognition、Reverbのパターンやバージョン固有の注意点もまとめています。

主な機能

  1. 01Bladeビューを備えたリアクティブPHPクラスコンポーネント
  2. 02wire:modelバインディング、アクション、ライフサイクルフック
  3. 03フォーム・バリデーション・イベント・Alpine.js連携
  4. 04ファイルアップロード・コンポーネントのネスト・ナビゲーション
  5. 05Volt・Folio・Precognition・Reverbのガイド
  6. 06テスト・セキュリティ指針・Livewire 3移行ノート

活用シーン

  1. 01Livewireコンポーネントとインタラクティブなフォームの構築
  2. 02検索入力のバインディングとデバウンスの設定
  3. 03コンポーネントイベントとAlpine.js連携の実装
  4. 04Livewire 3からの移行とセキュリティ実践の確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/fusengine/agents --skill laravel-livewire

インストール後、Claude Code で/laravel-livewireを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
alpine-integration.md
components.md
events.md
file-uploads.md
folio.md
forms-validation.md
lifecycle.md
loading-states.md
navigation.md
nesting.md
precognition.md
reverb.md
security.md
testing.md
volt.md
wire-directives.md
references/templates/
BasicComponent.php.md
ComponentTest.php.md
DataTableComponent.php.md
FileUploadComponent.php.md
FormComponent.php.md
NestedComponents.php.md
VoltComponent.blade.md

詳細

Laravel 13 上の Livewire 4 を扱います。Blade ビューを伴うリアクティブなクラスベースコンポーネント、wire:model による双方向バインディングとその修飾子(.blur、.live、.debounce)、アクション、コンポーネントのライフサイクルフック、フォーム/バリデーション、イベント(dispatch/listen)、Alpine.js 連携($wire、@entangle)、ファイルアップロード、コンポーネントのネスト、ローディング状態、SPA ナビゲーション、テスト、セキュリティ(認証/レート制限)、そして Volt(単一ファイルコンポーネント)と Folio(ファイルベースルーティング)のサブ機能を、Precognition によるライブバリデーションや Reverb WebSocket 連携も含めて網羅します。

Laravel Livewire

エージェントワークフロー(必須)

実装を始める前に、3 つのエージェントを並列で起動してください。それぞれ name を指定した Agent 呼び出し 1 回ずつです。

  1. fuse-ai-pilot:explore-codebase - 既存の Livewire コンポーネントを確認する
  2. fuse-ai-pilot:research-expert - Context7 経由で Livewire 4 のパターンを検証する
  3. mcp__context7__query-docs - 特定の Livewire 機能を確認する

実装後は、検証のために fuse-ai-pilot:sniper を実行してください。


概要

機能説明
コンポーネントBlade ビューを伴うリアクティブな PHP クラス
wire:model双方向データバインディング
アクションフロントエンドから PHP メソッドを呼び出す
イベントコンポーネント間の通信
Volt単一ファイルコンポーネント
Folioファイルベースルーティング

重要なルール

  1. ループ内では常に wire:key を使用する
  2. ライブバリデーションには wire:model.live.blur を使用する(Livewire 4.1 以降では、単なる .blur はクライアント状態のみを同期します)。すべての箇所で .live を使わない
  3. 検索入力は .debounce.300ms でデバウンスする
  4. 機密性の高い ID には #[Locked] を使用する
  5. 破壊的なアクションでは authorize() を使用する
  6. 内部ロジックには protected メソッドを使用する

意思決定ガイド

コンポーネントの種類
Component choice?
├── Complex logic → Class-based component
├── Simple page → Volt functional API
├── Medium complexity → Volt class-based
├── Quick embed → @volt inline
└── File-based route → Folio + Volt
データバインディング
Binding type?
├── Form fields (live validation) → wire:model.live.blur
├── Search input → wire:model.live.debounce.300ms
├── Checkbox/toggle → wire:model.live
├── Select → wire:model
└── No sync → Local Alpine x-data

リファレンスガイド

中核となる概念(WHY とアーキテクチャ)
トピックリファレンス参照すべきタイミング
コンポーネントcomponents.mdコンポーネントを作成するとき
Wire ディレクティブwire-directives.mdデータバインディング、イベント
ライフサイクルlifecycle.mdフック、mount、hydrate
フォームforms-validation.mdバリデーション、フォームオブジェクト
イベントevents.mddispatch、listen
Alpinealpine-integration.md$wire、@entangle
ファイルアップロードfile-uploads.mdアップロードの処理
ネストnesting.md親子関係
ローディングloading-states.mdwire:loading、lazy
ナビゲーションnavigation.mdSPA モード
テストtesting.mdコンポーネントのテスト
セキュリティsecurity.md認証、レート制限
Voltvolt.md単一ファイルコンポーネント
高度な機能
トピックリファレンス参照すべきタイミング
Foliofolio.mdファイルベースルーティング
Precognitionprecognition.mdライブバリデーション
Reverbreverb.mdWebSocket
テンプレート (完全なコード)
テンプレート使用する場面
BasicComponent.php.md標準的なコンポーネント
FormComponent.php.mdバリデーション付きフォーム
VoltComponent.blade.mdVolt パターン
DataTableComponent.php.md検索・ソート付きテーブル
FileUploadComponent.php.mdファイルアップロード
NestedComponents.php.md親子関係
ComponentTest.php.mdテストパターン

クイックリファレンス

基本的なコンポーネント
class Counter extends Component
{
    public int $count = 0;

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

    public function render()
    {
        return view('livewire.counter');
    }
}
Volt ファンクショナル
<?php
use function Livewire\Volt\{state};

state(['count' => 0]);

$increment = fn() => $this->count++;
?>

<button wire:click="increment">{{ $count }}</button>
Wire ディレクティブ
<input wire:model.live.blur="email">
<input wire:model.live.debounce.300ms="search">
<button wire:click="save" wire:loading.attr="disabled">Save</button>

ベストプラクティス

推奨
  • @foreach ループでは wire:key を使用する
  • 検索・フィルター入力にはデバウンスを適用する
  • 再利用可能なロジックには Form Objects を使用する
  • Livewire::test() でテストする
  • ID には #[Locked]、派生データには #[Computed] を使用する
非推奨
  • すべてのフィールドに wire:model.live を付ける
  • render() メソッド内でクエリを実行する
  • アクションでの認可を忘れる
  • ループ内で wire:key を省略する
  • 機密データを public プロパティに保存する

Laravel 13 に関する注意点

Laravel 13 上の Livewire 4

Livewire 4 (現行 4.4) は現行のメジャーバージョンであり、L13 Livewire スターターキットで使用されています。主なポイント:

  • Livewire 4 の要件: PHP 8.1+ / Laravel 10+ (Laravel 13 はそもそも PHP 8.3 が必要)
  • #[Locked]、#[Computed]、#[On] は引き続きサポートされています
  • ネイティブの単一ファイル / 複数ファイルコンポーネント (make_command.type = デフォルトで sfc)。Volt は 1.x (現行 1.11)、Folio は 1.x (現行 1.2) に留まります
  • ページ: Route::livewire('/dashboard', Dashboard::class) が現在推奨される方法です (単一ファイル / 複数ファイルコンポーネントでは必須)
  • ハッシュ化されたエンドポイント: /livewire/update の代わりに /livewire-{hash}/update (APP_KEY から生成) — /livewire/ を対象とするファイアウォール / CDN / ミドルウェアのルールを更新してください
  • wire:model.live: 並列リクエスト。wire:poll はノンブロッキングです
Livewire 3 からの移行
  • composer require livewire/livewire:^4.0 を実行してから php artisan optimize:clear
  • 設定の名前変更: layout → component_layout (layouts::app)、lazy_placeholder → component_placeholder。smart_wire_keys はデフォルトで true
  • 4.1+: .blur / .change もクライアント側の同期を制御します → 以前の動作 (blur 時のネットワークリクエスト) にするには wire:model.live.blur と記述します
  • wire:model は子からのイベントを無視します (必要なら .deep を追加)。<livewire:x /> タグは閉じる必要があります
  • wire:transition は View Transitions API を使用します (修飾子は削除されました)。wire:scroll → wire:navigate:scroll
  • $this->stream(): to: は el: に名前変更。$wire.$js('name', fn) は非推奨 → $wire.$js.name = fn
  • wire:poll.5s、$this->dispatch('event')、Form Objects (#[\Livewire\Attributes\Validate]) → 変更なし

コメント