Laravel8 -> Laravel9へのアップグレード
2022-02-08 Laravel9がリリースされました。
今後Laravelの教科書はLaravel9をベースに切り替えていきます。
切り替えにあたって、既存のLaravel8プロジェクトをLaravel9に変更する手順についてまとめます。
Laravelのバージョン確認方法
artisanコマンドを使うことでバージョンを確認します。
作業前のバージョンは8.81.0でした。
$ php artisan -V
Laravel Framework 8.81.0
composer upgradeを試す
composer upgradeをそのまま実行した場合でもLaravel8のマイナーバージョンアップが適応されるだけで新しいバージョンには切り替わりませんでした。
$ composer upgrade
$ php artisan -V
Laravel Framework 8.83.0
composer.jsonを修正する
公式のアップグレード手順に合わせてバージョンアップを行います。
"laravel/framework": "^8.0",
↓
"laravel/framework": "^9.0",
"nunomaduro/collision": "^5.0",
↓
"nunomaduro/collision": "^6.0",
"facade/ignition": "^2.3.6",
↓
"spatie/laravel-ignition": "^1.0",
composer.jsonの修正が終わったらcomposer updateを実行します。
$ composer update
composer.updateでエラーが発生した場合の対応
composer.jsonでインストールしている他のライブラリに影響されてうまくインストールが完了しない場合があります。
その場合は「--with-all-dependencies」オプションを設定し、他のライブラリも合わせてアップデートする必要があります。
$ composer update --with-all-dependencies
composerでのインストールは失敗するがエラーが出た
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover --ansi
ここまで実行できてエラーが出る場合、Laravel9のコードに対応していない部分がいくつかあるためautoloadの生成に失敗していることに原因があります。
"fideloper/proxy": "^4.4",
↓
削除
composerからこちらのライブラリを削除します。Laravel9のプロジェクトには含まれていなかったので
こちらを削除しても失敗する場合は、一旦vendorディレクトリを削除してからcomposer updateをやり直してみてください。
$ php artisan -V
Laravel Framework 9.0.1
無事Laravel9がインストールされました。
動作確認
$ php artisan serve
artisan serveコマンドでサーバーを起動するとおそらく先程削除したライブラリに関連したエラーが表示されるはずです。
TrustProxies.phpの修正
この機能が今までは別のライブラリとして配布されていましたが、本体に組み込まれたことで起きているエラーのようです。
ミドルェアTrustProxiesを修正します。修正箇所は2箇所です。
use Fideloper\Proxy\TrustProxies as Middleware;
↓
use Illuminate\Http\Middleware\TrustProxies as Middleware;
protected $headers = Request::HEADER_X_FORWARDED_ALL;
↓
protected $headers =
Request::HEADER_X_FORWARDED_FOR |
Request::HEADER_X_FORWARDED_HOST |
Request::HEADER_X_FORWARDED_PORT |
Request::HEADER_X_FORWARDED_PROTO |
Request::HEADER_X_FORWARDED_AWS_ELB;
保存後、ブラウザをリロードして動作確認してみてください。
Welcome画面が無事表示されたら完了です。
まとめ
Laravel8から以降している場合変更ポイントは少ないと考えられます。
PHP8.0.2が最低バージョンとなったことで7.x系を使っていたユーザーは今後環境の見直しが必要となるでしょう。
Laravelの教科書
Discussion