livewire-development
Livewire 4 のリアクティブコンポーネントを開発します。Livewireコンポーネントの作成・更新・修正時、`wire:model` / `wire:click` / `wire:loading` などの `wire:` ディレクティブの利用時、リアルタイム更新やローディング状態・リアクティブUIの実装時、コンポーネントの動作デバッグやLivewireテストの作成時に起動します。
description の原文を見る
>- Develops reactive Livewire 4 components. Activates when creating, updating, or modifying Livewire components; working with wire:model, wire:click, wire:loading, or any wire: directives; adding real-time updates, loading states, or reactivity; debugging component behavior; writing Livewire tests; or when the user mentions Livewire, component, counter, or reactive UI.
SKILL.md 本文
Livewire Development
適用タイミング
以下の場合にこのスキルを有効にします:
- Livewire コンポーネントを作成または変更する場合
- wire: ディレクティブ (model、click、loading、sort、intersect) を使用する場合
- islands または async アクションを実装する場合
- Livewire コンポーネントテストを書く場合
ドキュメント
詳細な Livewire 4 パターンとドキュメントは search-docs を使用してください。
基本的な使用方法
コンポーネントの作成
<code-snippet name="Component Creation Commands" lang="bash">Single-file component (v4 での既定値)
{{ $assist->artisanCommand('make:livewire create-post') }}
Multi-file component
{{ $assist->artisanCommand('make:livewire create-post --mfc') }}
Class-based component (v3 スタイル)
{{ $assist->artisanCommand('make:livewire create-post --class') }}
名前空間付き
{{ $assist->artisanCommand('make:livewire Posts/CreatePost') }}
</code-snippet>フォーマット間の変換
php artisan livewire:convert create-post を使用して、single-file、multi-file、class-based フォーマット間で変換します。
コンポーネントフォーマットリファレンス
| フォーマット | フラグ | 構造 |
|---|---|---|
| Single-file (SFC) | 既定値 | PHP + Blade を 1 つのファイルに |
| Multi-file (MFC) | --mfc | 分離された PHP クラス、Blade、JS、テスト |
| Class-based | --class | 従来の v3 スタイルのクラス |
| View-based | ⚡ プレフィックス | 機能的状態を持つ Blade のみ |
Single-File コンポーネント例
<code-snippet name="Single-File Component Example" lang="php"> <?php use Livewire\Component; new class extends Component { public int $count = 0; public function increment(): void { $this->count++; } } ?> <div> <button wire:click="increment">Count: @{{ $count }}</button> </div> </code-snippet>Livewire 4 の詳細
Livewire 3 からの主な変更点
これらは Livewire 4 で変更されていますが、このアプリケーションでは更新されていない場合があります。既存の規約に従うようにこのアプリケーションのセットアップを確認してください。
- フルページコンポーネントには
Route::livewire()を使用してください。設定キーの名前変更:layout→component_layout、lazy_placeholder→component_placeholder。 wire:modelは現在、デフォルトで子イベントを無視します (旧動作の場合はwire:model.deepを使用)。wire:scrollはwire:navigate:scrollに名前変更されました。- コンポーネントタグは適切に閉じる必要があります。
wire:transitionは View Transitions API を使用するようになりました (修飾子は削除)。 - JavaScript:
$wire.$js('name', fn)→$wire.$js.name = fn。commit/requestフック →interceptMessage()/interceptRequest()。
新機能
- コンポーネントフォーマット: single-file (SFC)、multi-file (MFC)、view-based コンポーネント。
- Islands (
@island) 分離された更新の場合。async アクション (wire:click.async、#[Async]) 並列実行の場合。 - 遅延/バンドル読み込み:
defer、lazy.bundle最適化されたコンポーネント読み込みの場合。
| 機能 | 使用方法 | 目的 |
|---|---|---|
| Islands | @island(name: 'stats') | 分離された更新領域 |
| Async | wire:click.async または #[Async] | ノンブロッキングアクション |
| Deferred | defer 属性 | ページレンダー後に読み込み |
| Bundled | lazy.bundle | 複数をまとめて読み込み |
新しいディレクティブ
wire:sort、wire:intersect、wire:ref、.renderless、.preserve-scrollが利用可能です。- ネットワークリクエストをトリガーする要素に
data-loading属性が自動的に追加されます。
| ディレクティブ | 目的 |
|---|---|
wire:sort | ドラッグアンドドロップソート |
wire:intersect | ビューポート交差検出 |
wire:ref | JS 用の要素参照 |
.renderless | レンダリングなしのコンポーネント |
.preserve-scroll | スクロール位置の保持 |
ベストプラクティス
- ループ内では常に
wire:keyを使用してください - ローディング状態には
wire:loadingを使用してください - インスタント更新には
wire:model.liveを使用してください (既定値はデバウンスです) - アクション内で検証と認可を行ってください (HTTP リクエストと同様に扱います)
設定
smart_wire_keysはtrueがデフォルト。新しい設定:component_locations、component_namespaces、make_command、csp_safe。
Alpine & JavaScript
wire:transitionはブラウザの View Transitions API を使用します。$errorsと$interceptマジックプロパティが利用可能です。- ノンブロッキングな
wire:pollと並列wire:model.live更新がパフォーマンスを向上させます。
インターセプターとフックについては、reference/javascript-hooks.md を参照してください。
テスト
<code-snippet name="Testing Example" lang="php">Livewire::test(Counter::class) ->assertSet('count', 0) ->call('increment') ->assertSet('count', 1);
</code-snippet>検証
- ブラウザコンソール: JS エラーをチェック
- ネットワークタブ: Livewire リクエストが 200 を返すことを確認
- すべての
@foreachループでwire:keyを確認
よくある落とし穴
- ループ内で
wire:keyがない → 予期しない再レンダリング wire:modelがリアルタイムであることを期待する →wire:model.liveを使用してください- コンポーネントタグが閉じられていない → v4 の構文エラー
- 非推奨の設定キーまたは JS フックを使用している
- Alpine.js を個別にインクルードしている (すでに Livewire 4 にバンドルされています)
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- spatie
- リポジトリ
- spatie/freek.dev
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/spatie/freek.dev / ライセンス: MIT
関連スキル
agent-browser
AI エージェント向けのブラウザ自動化 CLI です。ウェブサイトとの対話が必要な場合に使用します。ページ遷移、フォーム入力、ボタンクリック、スクリーンショット取得、データ抽出、ウェブアプリのテスト、ブラウザ操作の自動化など、あらゆるブラウザタスクに対応できます。「ウェブサイトを開く」「フォームに記入する」「ボタンをクリックする」「スクリーンショットを取得する」「ページからデータを抽出する」「このウェブアプリをテストする」「サイトにログインする」「ブラウザ操作を自動化する」といった要求や、プログラマティックなウェブ操作が必要なタスクで起動します。
anyskill
AnySkill — あなたのプライベート・スキルクラウド。GitHubを基盤としたリポジトリからエージェントスキルを管理、同期、動的にロードできます。自然言語でクラウドスキルを検索し、オンデマンドでプロンプトを自動ロード、カスタムスキルのアップロードと共有、スキルバンドルの一括インストールが可能です。OpenClaw、Antigravity、Claude Code、Cursorに対応しています。
engram
AIエージェント向けの永続的なメモリシステムです。バグ修正、意思決定、発見、設定変更の後はmem_saveを使用してください。ユーザーが「覚えている」「記憶している」と言及した場合、または以前のセッションと重複する作業を開始する際はmem_searchを使用します。セッション終了前にmem_session_summaryを使用して、コンテキストを保持してください。
skyvern
AI駆動のブラウザ自動化により、任意のウェブサイトを自動化できます。フォーム入力、データ抽出、ファイルダウンロード、ログイン、複数ステップのワークフロー実行など、ユーザーがウェブサイトと連携する必要があるときに使用します。Skyvernは、LLMとコンピュータビジョンを活用して、未知のサイトも自動操作可能です。Python SDK、TypeScript SDK、REST API、MCPサーバー、またはCLIを通じて統合できます。
pinchbench
PinchBenchベンチマークを実行して、OpenClawエージェントの実世界タスクにおけるパフォーマンスを評価できます。モデルの機能テスト、モデル間の比較、ベンチマーク結果のリーダーボード提出、またはOpenClawのセットアップがカレンダー、メール、リサーチ、コーディング、複数ステップのワークフローにどの程度対応しているかを確認する際に使用します。
openui
OpenUIとOpenUI Langを使用してジェネレーティブUIアプリを構築できます。これらはLLM生成インターフェースのためのトークン効率的なオープン標準です。OpenUI、@openuidev、ジェネレーティブUI、LLMからのストリーミングUI、AI向けコンポーネントライブラリ、またはjson-render/A2UIの置き換えについて述べる際に使用します。スキャフォルディング、defineComponent、システムプロンプト、Renderer、およびOpenUI Lang出力のデバッグに対応しています。