{} CodeLift

Laravel + Livewire Starter Kit を Docker で検証して改良した fork を公開

公式の laravel/livewire-starter-kit(Livewire v4 + Flux + Alpine)を Docker Desktop で動かし、本番運用に耐える形に書き直したフォークを公開する。テストは公式版の 33 passed をベースに 37 passed / 92 assertions まで増加、改良は 7 commits。React / Vue 版とは findings の構成が違う点が Livewire 変種の特徴で、本記事はその差分を中心…

公開 2026-04-19 検証 2026-04-19 更新 2026-04-19

検証環境

  • PHP 8.5.5
  • Laravel 13.x
  • Composer 2.9.7
  • Node 22.22.2
  • npm 10.9.7
  • Frontend Livewire v4 + Flux + Alpine
  • Database SQLite (tests)
  • OS Docker Desktop (php:8.5-cli-bookworm)

Laravel + Livewire Starter Kit を Docker で検証して改良した fork を公開

公式の laravel/livewire-starter-kit(Livewire v4 + Flux + Alpine)を Docker Desktop で動かし、本番運用に耐える形に書き直したフォークを公開する。テストは公式版の 33 passed をベースに 37 passed / 92 assertions まで増加、改良は 7 commits。React / Vue 版とは findings の構成が違う点が Livewire 変種の特徴で、本記事はその差分を中心に記録する。

姉妹記事:

対象の公式サンプル

項目
名前 Laravel + Livewire Starter Kit
公式 URL https://github.com/laravel/livewire-starter-kit
概要 Laravel 13 + Livewire v4 + Flux UI + Alpine + Fortify
元ライセンス MIT
改良版ライセンス MIT

検証日

2026-04-19

検証環境

すべて Docker Desktop 上のコンテナ内で実施(CodeLift spec §5-6)。

項目
基盤イメージ php:8.5-cli-bookworm + Node 22
PHP 8.5.5
Laravel Framework 13.x
Composer 2.9.7
Node / npm 22.22.2 / 10.9.7
フロント Livewire v4 + Flux + Alpine
テスト用 DB SQLite
上流 commit laravel/livewire-starter-kit@62c60c8

公式版の評価

docker compose run --rm app 一発で 33 passed (77 assertions)、52s。React / Vue 版の 40 passed よりテスト数が少ないが、これは Livewire 変種が Livewire component テスト経由 でフォームの挙動を検証するため、Inertia HTTP harness を使う React / Vue 側とアサーション数の分布が違うだけ(カバレッジが劣るわけではない)。

React / Vue 版との差分

Laravel backend は共通だが、Livewire 変種では次の点が違う:

項目 React / Vue Livewire
@laravel/vite-plugin-wayfinder 採用(Vite build 中に artisan を shell out) 不採用
Inertia 使用(初期 props を <script> inline で埋込) 未使用
bootstrap/app.php 既定 middleware 3 つ(Inertia 系)append 済み (withMiddleware callback の中身が // だけ)
settings ルート PATCH/DELETE の HTTP verb + Controller Route::livewire(...) + 内部 AJAX action

結果として React/Vue 版に当てはまった 8 件のうち、Livewire では 7 件が有効、1 件(J)が適用形状を変える必要 がある。

改良方針と具体的な改善点

A. README に Setup セクションを追加(弱体化版)

React/Vue との違い: React/Vue 版で指摘した「composer install 前に npm run build すると Wayfinder 経由で意味不明な autoload エラー」は Livewire 変種では起こらない。vite.config.js に wayfinder プラグインが入っていないため。

ただし Setup セクション自体は公式 README にないので contributor のために追加しておく。

B. .env.example が開発用デフォルトのみ

React/Vue と同じ。該当キーにインラインコメントで production 推奨値を併記。

C. config/app.php の timezone が文字列リテラル

React/Vue と同じ。env('APP_TIMEZONE', 'UTC') に変更。

D. セキュリティレスポンスヘッダの middleware が無い(React/Vue より初期状態が悪い)

Livewire 固有: bootstrap/app.phpwithMiddleware()callback 本体が空// コメントだけ)。React/Vue 版は 3 つの Inertia 系 middleware が append 済みだったが、Livewire は一切なし。

改良: 新規 SetSecurityHeaders middleware を $middleware->web(append: [...]) で追加(この fork では最初に append される web middleware になる)。

CSP ポリシーは React/Vue と同じ「本番時のみ 'unsafe-inline' 許可」にしている。理論上は Livewire が Inertia のような inline props 埋込をしないので 'unsafe-inline' を外せる余地があるが、Flux コンポーネント / Alpine の実装パターンによっては inline の event handler が出る可能性があり、今回は同じ policy を維持。nonce-based CSP への移行は将来の独立記事で扱う

テストは tests/Feature/SecurityHeadersTest.php を追加(2 件)。

E. HTTPS scheme 強制ヘルパーが無い

React/Vue と同じ。AppServiceProvider::configureDefaultsURL::forceScheme('https') を本番時だけ追加。

F. パスワード強度ルール → 既対応

React/Vue と同じく、AppServiceProvider に strong Password::defaults が production で入っている。変更なし。

G. ログインのレート制限が email+IP の 1 段のみ

React/Vue と同じ。2 段構え(email+IP per-minute + email 単体 per-hour)に変更。

H. 2FA は有効だがポリシー強制は無し

他変種と同じく運用設計の判断。コード変更なし。

I. ログチャンネルがサブシステム別に分かれていない

React/Vue と同じ。auth チャンネル追加 + AuthActivitySubscriber で認証イベントを構造化ログ出力。テスト 2 件追加。

J. 設定画面のレート制限が password endpoint だけLivewire では形が違うので保留

Livewire 固有: routes/settings.phpRoute::livewire('settings/profile', ...) でページコンポーネントをレンダリングする形で、プロフィール更新やパスワード変更は Livewire 内部の AJAX エンドポイント (/livewire/update) を経由する。React/Vue 版のように「PATCH settings/profile に throttle を貼る」パターンが効かない(route-level throttle は初期ページロードだけに効き、コンポーネントアクションには効かない)。

正しい対策は「コンポーネントクラス内で RateLimiter::tooManyAttempts を呼ぶ」方式だが、commit の形状が React/Vue と substantively 違う ので、この pass では保留。将来 Livewire 独自の記事で扱う。

before / after 比較

観点 公式版 改良版
php artisan test 33 passed / 77 assertions 37 passed / 92 assertions
README Setup セクション なし 追加
.env.example に production 値 なし インラインコメント
APP_TIMEZONE を env 経由 不可
基本 security headers 一切無し(空の middleware 群) 常時 4 種 + 本番のみ HSTS / CSP
HTTPS scheme 強制 なし 本番のみ forceScheme('https')
ログインのレート制限 email+IP の 1 段 email+IP + email 単体の 2 段
認証イベントのログ 他と混在 専用 auth daily channel(90 日)
settings endpoints の throttle 保留(Livewire 固有の扱い)

どのケースでこの改良版が向くか

  • laravel/livewire-starter-kit をベースに本番プロダクトを立ち上げる予定で、Livewire 特有の事情を踏まえた hardening が欲しい
  • React / Vue と何が違って、何が同じかを把握したい
  • Livewire だと CSP をどこまで絞れるのかに興味がある(→ nonce-based CSP は follow-up 記事で扱う)

3 種比較の参考

React / Vue / Livewire の starter kit を production 適性軸で比較する記事を別途準備中。Laravel backend の production 整備コストは React ≈ Vue > Livewire(middleware 初期状態の差で)だが、フロントエンド側の管理コストや Livewire 固有のコンポーネント rate limit などを総合すると単純比較はできない。

再現と取り込み

改良版: improvements ブランチ

git clone https://github.com/codelift-dev/livewire-starter-kit.git
cd livewire-starter-kit
git checkout improvements
docker compose -f codelift/docker-compose.yml build
docker compose -f codelift/docker-compose.yml run --rm app

本体差分だけ見たい場合(CodeLift 検証用ファイル除く):

git diff main improvements -- . ':!codelift'

各 commit は独立、cherry-pick 可能。

ライセンス / 法務

  • 元サンプル: MIT(Laravel LLC / 開発チーム)
  • 改良版: MIT(CodeLift / JIT 株式会社)

検証結果は検証日時点のもの。upstream 更新により状況は変わる可能性がある。

この記事を含む比較

関連記事