0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

バージョン無指定のLivewireで管理画面が死んだ話

0
Posted at

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)です。よかったら覗いてみてください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?