出来事
ある日久々にphp artisan serve
をしてみたら以下のエラーが出て実行できなかった。
Log.php line 24
Required parameter $message follows optional parameter $level
遠因
PHP8になって、メソッドにおいて必須でないパラメータが必須のパラメータより前に定義されているとエラーを吐くようになったらしい。
そういえばLaravelはVersion7系にはあげたけれど、途中だったかもしれないと思って調査を開始。
原因
- Composerで入れたパッケージのアップグレードを途中で放り出していた。
- 何らかのミスでPHP8が入ってしまった。
どちらかだと思う。お粗末な話なので対処を開始。
解決手順
アップグレードガイドに従ってComposerパッケージをアップグレード
https://readouble.com/laravel/8.x/ja/upgrade.html
上記だけでは解決しなかった。
Log.phpという名前のファイルを検索
vendor/laravel/framework/src/Illuminate/Support/Facades/Log.php
が真っ先に見つかるがL24にはコメントしかない。
さらに探すと、vendor/itsgoingd/clockwork/Clockwork/Request/Log.php
において、怒られている記述を発見できた。(v4.1.8)
itsgoingd/clockwork
をアップグレード
2021/1時点での最新版は5.0.6らしいので、composer.json
を以下のように修正。
composer.json
"itsgoingd/clockwork":"^5.0"
アップデートを実行。
$ composer update
解決した。
% php artisan serve
Starting Laravel development server: http://127.0.0.1:8000
[Sun Jan 10 11:46:10 2021] PHP 8.0.1 Development Server (http://127.0.0.1:8000) started
反省
PHP・Laravelのメジャーバージョンアップがどれほど面倒か身にしみてわかったので、今後の業務に活かしたい。