😊

Laravel8 -> Laravel9へのアップグレード

2022/02/10に公開

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を修正する

公式のアップグレード手順に合わせてバージョンアップを行います。
https://laravel.com/docs/master/upgrade

"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箇所です。

app/Http/Middleware/TrustProxies.php
use Fideloper\Proxy\TrustProxies as Middleware;use Illuminate\Http\Middleware\TrustProxies as Middleware;
app/Http/Middleware/TrustProxies.php
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の教科書
https://note.com/laravelstudy/

Discussion