PHP8・Laravel8にバージョンアップしたらartisanが”Required parameter $message follows optional parameter $level ”で実行できなくなったので対処した


出来事

ある日久々にphp artisan serveをしてみたら以下のエラーが出て実行できなかった。

Log.php line 24
  Required parameter $message follows optional parameter $level 

遠因

PHP8になって、メソッドにおいて必須でないパラメータが必須のパラメータより前に定義されているとエラーを吐くようになったらしい。
そういえばLaravelはVersion7系にはあげたけれど、途中だったかもしれないと思って調査を開始。

原因

  • Composerで入れたパッケージのアップグレードを途中で放り出していた。
  • 何らかのミスでPHP8が入ってしまった。

どちらかだと思う。お粗末な話なので対処を開始。

解決手順

アップグレードガイドに従ってComposerパッケージをアップグレード

上記だけでは解決しなかった。

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のメジャーバージョンアップがどれほど面倒か身にしみてわかったので、今後の業務に活かしたい。