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

Laravel Laravel

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/frameworknunomaduro/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画面を確認すると、こんな感じです!
laravel11のウェルカム画面

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

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

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

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

コメント

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