Laravelフレームワークをバージョンアップする方法まとめ!

LaravelLaravel

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

プロジェクトの他のライブラリに注意しよう

今回はLaravelのフレームワークのバージョンを6から10までバージョンアップしました。

バージョンアップしたら、作っているサービスが正常に動くか確認しておきましょう。
今回バージョンアップした環境では、使っているライブラリがうまく動かないことがありました。
そのためLaravelのフレームワークのバージョンアップよりも、プロジェクトで使っていたライブラリに起因したエラーを修正するのに時間がかかったように感じます。

新しいバージョンが出て安定してきたら、こまめにアップデートしていきたいですね。

コメント

タイトルとURLをコピーしました