Laravelのフレームワークをバージョン6からバージョン10まで、バージョンアップする方法について書いています。
基本的には公式ドキュメント(laravel.com)のアップグレード手順に従ってアップデートすると大丈夫です。
公式ドキュメントに載っている内容以外にもプロジェクトで使っているライブラリによっては、PHPのバージョンに関連して一緒にアップグレードする必要があります。
Laravel6から10まで、実際にバージョンアップして動くか試してみました。
Laravelのバージョンに合わせて、先にPHPのバージョンをあげておきましょう。
Laravel6からLaravel7にアップグレードする
Laravel7で必要なPHPのバージョンは7.2.5以上です。
筆者はPHP7.4を使って、アップグレードできるか確かめました。
PHPのバージョンを一気にあげてしまうと、使っているライブラリでエラーが出ていたので、PHPバージョンも少しずつあげました。
・公式ドキュメント(6から7へのバージョンアップ)はこちらです。
1. Hander.phpファイルの修正
app/Exceptions/Handler.php
ファイルを修正します。
Exception
クラスをuseしている箇所を下記のように、Throwable
クラスを使うようにします。
use Throwable;
また、このHandler.php
ファイルの中で、Exception
クラスを使っている箇所はThrowable
クラスを使うように書き換えましょう。
public function report(Throwable $exception)
public function render($request, Throwable $exception)
2. composer.json書き換え
公式ドキュメントにあるようにcomposer.jsonのバージョンを書き換えます。
下記のように書き換えておきましょう。(PHPのバージョンは使っているものに合わせてください)
"php": "^7.4",
"laravel/framework": "^7.0",
"nunomaduro/collision": "^4.1",
"phpunit/phpunit": "^8.5",
"laravel/tinker": "^2.0",
"facade/ignition": "^2.0",
"laravel/ui": "^2.1",
3. composer updateコマンド実行
書き換え終わったら、composer update
コマンドを実行して、Laravelをアップグレードしてください。
下記のようにコマンドが流れて、特にエラーが発生しなければ成功です。
$ composer update
Loading composer repositories with package information
Updating dependencies
Nothing to modify in lock file
---- 省略 ----
Package manifest generated successfully.
90 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
No security vulnerability advisories found
artisanコマンドでバージョンを確認すると、上がっていることが確認できました。
$ php artisan -V
Laravel Framework 7.30.6
Laravel7からLaravel8にアップグレードする
Laravel8で必要なPHPのバージョンは7.3.0以上です。
筆者はPHP8.0を使って、アップグレードできるか確かめました。
・公式ドキュメント(7から8へのバージョンアップ)はこちらです。
1. composer.json書き換え
公式ドキュメントにあるようにcomposer.jsonのバージョンを書き換えます。
下記のように書き換えておきましょう。
"php": "^8.0",
"guzzlehttp/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",
2. composer updateコマンド実行
書き換え終わったら、composer update
コマンドを実行して、Laravelをアップグレードします。
下記のように実行して、特にエラーが発生しなければ成功です。
$ composer update
Loading composer repositories with package information
Info from https://repo.packagist.org: #StandWithUkraine
Updating dependencies
---- 省略 ----
Package manifest generated successfully.
92 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
No security vulnerability advisories found
artisanコマンドでバージョンを確認します。
下記のように上がっていることが確認できました。
$ php artisan -V
Laravel Framework 8.83.26
Laravel8からLaravel9にアップグレードする
Laravel9で必要なPHPのバージョンは8.0.2以上です。
筆者はPHP8.1.13を使って、アップグレードできるか確かめました。
・公式ドキュメント(8から9へのバージョンアップ)はこちらです。
1. TrustProxies.phpファイルの修正とfideloper/proxyの削除
app/Http/Middleware/TrustProxies.php
ファイルを修正します。
fideloper/proxy
パッケージを使っている箇所を書き換えます。
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;
composerコマンドでインストールしているfideloper/proxy
パッケージを削除します。
$ composer remove fideloper/proxy
コマンドで削除できないときには、composer.jsonを編集して削除しておきましょう。
2. composer.json書き換え
公式ドキュメントにあるようにcomposer.jsonのバージョンを書き換えます。
下記のように書き換えておきましょう。
"php": "^8.1",
"laravel/framework": "^9.0",
"nunomaduro/collision": "^6.1",
そして「facade/ignition
」は「"spatie/laravel-ignition": "^1.0"
」に書き換えてください。
「league/flysystem-ftp
」を使っている場合には、「"league/flysystem-sftp": "^3.0"
」に書き換えます。
3. composer updateコマンド実行
書き換え終わったらcomposer update
コマンドを実行して、Laravelをアップグレードします。
下記のように実行して、特にエラーが発生しなければ成功です。
$ composer update
Xdebug: [Step Debug] Could not connect to debugging client. Tried: host.docker.internal:9000 (through xdebug.client_host/xdebug.client_port) :-(
Loading composer repositories with package information
Updating dependencies
Lock file operations: 11 installs, 35 updates, 13 removals
- Removing facade/flare-client-php (1.10.0)
---- 省略 ----
96 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
No security vulnerability advisories found
Laravel9からLaravel10にアップグレードする
Laravel10で必要なPHPのバージョンは8.1以上です。
筆者はPHP8.2.1を使って、アップグレードできるか確かめました。
・公式ドキュメント(9から10へのバージョンアップ)はこちらです。
1. composer.json書き換え
公式ドキュメントにあるようにcomposer.jsonのバージョンを書き換えます。
下記のように書き換えておきましょう。
"php": "^8.1",
"laravel/framework": "^10.0",
"laravel/sanctum": "^3.2",
"spatie/laravel-ignition": "^2.0"
2. laravel-corsを使っているか?
laravel-corsを使っている場合は、composer.jsonから削除する必要があります。
こちらのパッケージは、laravelのコアに含まれるようになったとのこと。(パッケージのgithubページ)
“fruitcake/laravel-cors”をcomposer.jsonから削除したら、app/Http/Kernel.php
を書き換えます。
\Fruitcake\Cors\HandleCors::class
を削除します。
protected $middleware = [
//--- 省略 ---
\Fruitcake\Cors\HandleCors::class, // 削除する
];
そして、\Illuminate\Http\Middleware\HandleCors::class
を追加しておきましょう。
protected $middleware = [
//--- 省略 ---
\Illuminate\Http\Middleware\HandleCors::class, // 追加する
];
3. composer updateコマンド実行
書き換え終わったらcomposer update
コマンドを実行し、Laravelをアップグレードします。
下記のように実行して、特にエラーが発生しなければ成功です。
$ composer update
Loading composer repositories with package information
Updating dependencies
Lock file operations: 0 installs, 4 updates, 2 removals
- Removing asm89/stack-cors (v2.1.1)
- Removing fruitcake/laravel-cors (v2.2.0)
- Upgrading laravel/framework (v9.52.2 => v10.1.1)
- Upgrading laravel/sanctum (v2.15.1 => v3.2.1)
---- 省略 ----
> @php artisan vendor:publish --tag=laravel-assets --ansi --force
INFO No publishable resources for tag [laravel-assets].
No security vulnerability advisories found
Laravel10からLaravel11にアップグレードする
Laravel11で必要なPHPのバージョンは8.2以上です。
またcurlの7.34.0が必要とのことです。
筆者はPHP8.2.9を使って、アップグレードできるか確かめました。
簡単な構成で10から11にアップグレードを試しただけなので、詳細は公式のドキュメントを確認してみてください。
・公式ドキュメント(10から11へのバージョンアップ)はこちらです。
1. composer.json書き換え
laravel/framework
とnunomaduro/collision
を必須で書き換えます。
phpのバージョンも指定しておきましょう。
"php": "^8.2",
"laravel/framework": "^11.0",
"nunomaduro/collision": "^8.1",
アップグレード対象のライブラリを使用しているか?
アップグレード対象の下記のライブラリがある場合には、書き換えておきましょう。
"laravel/breeze": "^2.0",
"laravel/cashier": "^15.0",
"laravel/dusk": "^8.0",
"laravel/jetstream": "^5.0",
"laravel/octane": "^2.3",
"laravel/passport": "^12.0",
"laravel/sanctum": "^4.0",
"laravel/spark-stripe": "^5.0",
"laravel/telescope": "^5.0",
"inertiajs/inertia-laravel": "^1.0",
2. composer updateコマンド実行
composer.jsonを書き換え終わったら、composer update
コマンドを実行します。
$ composer update
Loading composer repositories with package information
Updating dependencies
Lock file operations: 6 installs, 85 updates, 0 removals
- Upgrading brick/math (0.10.2 => 0.11.0)
- Locking carbonphp/carbon-doctrine-types (3.2.0)
- Upgrading doctrine/inflector (2.0.6 => 2.0.10)
- Upgrading doctrine/lexer (3.0.0 => 3.0.1)
- Upgrading dragonmantank/cron-expression (v3.3.2 => v3.3.3)
- Upgrading egulias/email-validator (4.0.1 => 4.0.2)
- Upgrading fakerphp/faker (v1.21.0 => v1.23.1)
- Upgrading filp/whoops (2.14.6 => 2.15.4)
- Upgrading fruitcake/php-cors (v1.2.0 => v1.3.0)
#--- 省略 ---
ages you are using are looking for funding.
Use the `composer fund` command to find out more!
> @php artisan vendor:publish --tag=laravel-assets --ansi --force
INFO No publishable resources for tag [laravel-assets].
No security vulnerability advisories found
特にエラーなく終わったら、アップデート完了です。
3. php artisanでバージョン確認
php artisanコマンドでlaravelのバージョンを確認すると、11になっていました!
$ php artisan -V
Laravel Framework 11.2.0
Wellcome画面を確認すると、こんな感じです!
プロジェクトの他のライブラリに注意しよう
今回はLaravelのフレームワークのバージョンを6から10までバージョンアップしました。
バージョンアップしたら、作っているサービスが正常に動くか確認しておきましょう。
今回バージョンアップした環境では、使っているライブラリがうまく動かないことがありました。
そのためLaravelのフレームワークのバージョンアップよりも、プロジェクトで使っていたライブラリに起因したエラーを修正するのに時間がかかったように感じます。
新しいバージョンが出て安定してきたら、こまめにアップデートしていきたいですね。
コメント