Filament v3 を使ったLaravelプロジェクトで、何の気なしに打った1行のコマンドで管理画面が丸ごと動かなくなったことがあります。原因はバージョン指定を省略したことでした。同じ構成なら誰でも踏むので共有します。
何が起きたか
とあるパッケージを追加するついでに、livewire/livewire も最新化しておこうとバージョン無指定でコマンドを打ちました。
composer require livewire/livewire
composer.json の制約次第では、これだけで Livewire 4系 が入ります。直後にFilamentの管理画面(admin.example.com)を開くと、画面が真っ白になったりコンポーネントが反応しなくなったりします。エラーメッセージは環境によってまちまちで、Class "Livewire\Component" not found のような分かりにくい形で出ることもあります。
原因
Filament v3 系は内部で Livewire v3 系のAPIに依存しています。Livewire 4 は破壊的変更を含むメジャーアップデートで、Filament v3 との互換性はありません(Filamentのバージョンとの対応関係は各パッケージのリリースノートで随時更新されるので、導入時に必ず確認してください)。
composer.json に "livewire/livewire": "^3.0" のような緩い制約しか書いていないと、composer update や関連パッケージの更新のタイミングで意図せずメジャーバージョンが上がってしまうことがあります。「Filamentだけ触っていたつもりが、裏でLivewireが上がっていた」という事故が起きやすいポイントです。
対処
^3.6 のようにマイナーバージョンまで含めて明示的にpinします。
composer require livewire/livewire:^3.6
composer.json 側でも同様に固定しておくと、他の開発者やCIが同じ事故を踏むのを防げます。
"livewire/livewire": "^3.6"
教訓
- 土台となるフレームワーク(Filament等)が依存するパッケージは、バージョン無指定でコマンドを打たない。特にメジャーバージョンをまたぐ変更が多いエコシステムでは、緩い制約が事故の温床になります。
- Composerの依存関係は「直接触っていないパッケージが、間接的に上がる」ことがある前提で運用する。
composer.lockの差分は更新前後で必ず見る。 - 管理画面が急に壊れたら、まず
composer.lockの直近の変更(特にフレームワークが依存する主要パッケージのバージョン)を疑う。
ちなみにこの構成で使っているのは、フリーランス・少人数チーム向けの案件管理ツール AYUMI(歩) の運営者向け管理画面(Filament v3)です。よかったら覗いてみてください。