どうも、シローです。
久しぶりの投稿です。
最近新しく始めた個人開発でLaravelのバージョンを6から8に上げたので、その内容についてまとめようと思います。
やり方
phpのバージョンを7.3以上にする
Laravel8.xではphpのバージョンが7.3以上でないと動かないので、それ以下のバージョンではアップデートする必要があります
僕の開発環境ではDockerで構築しているので、その手順の紹介となります。
以下の変更点を加えました。
1 2 3 |
FROM php:7.4-fpm RUN apt-get install -y libzip-dev libonig-dev |
package.jsonに記載されたモジュールのバージョンを上げる
バージョン8で使う外部モジュールのバージョンを指定したもの以上でないとダメみたいなのでそれも更新します。
公式に従って以下の通りにしました。
モジュール | バージョン |
uzzlehttp/guzzle |
^7.0.1 |
facade/ignition |
^2.3.6 |
laravel/framework |
^8.0 |
laravel/ui |
^3.0 |
nunomaduro/collision |
^5.0 |
phpunit/phpunit |
^9.0 |
既存コードの改修
既存コードの書き方もバージョン8からは変更しないといけない箇所が出てきますので、公式を見て当てはまる箇所を直していきます。
僕の場合はSeederのフォルダ名とnamespaceの指定を行いました。
- database/seeds => database/seedersに変更
- 各Seederクラスのnamespaceに
namespace Database\Seeders;
を設定 - composer.jsonのautoloadの部分を変更
composer.jsonの変更箇所は以下の通りです。
1 2 3 4 5 6 7 |
"autoload": { "psr-4": { "App\\": "app/", "Database\\Factories\\": "database/factories/", "Database\\Seeders\\": "database/seeders/" } } |
composer updateを実行
設定が終わったらcomposer update
を実行しました。
つまづいたポイント
今回見た公式はこちらです。https://laravel.com/docs/8.x/upgrade
小さい字で「7 から 8への移行」と書いているのを見落としてました。
なので、本来ならバージョン6から7に移行した後に動作確認をして、7から8にバージョンアップを踏むのが正しい手順なのだと思います。
それもあってか、前述のcomposer update
を実行すると以下のエラーが出てスムーズにいかなかったのです。
1 2 |
> @php artisan package:discover --ansi Script @php artisan package:discover --ansi handling the post-autoload-dump event returned with error code 255 |
僕の環境では、以下の変更をして再度composer update
を実行すると解決できました。stackoverflowには感謝です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
// use Exceptionから変更 use Throwable; . . . // public function report(Exception $exception)から変更 public function report(Throwable $exception) { ... } . . . // public function render($request, Throwable $exception)から変更 public function render($request, Throwable $exception) { ... } |