Laravel6のプロジェクトをcomposer update
コマンドでLaravel7にアップデートする機会があったので手順を書いておきます。
composer.jsonの編集
composer.jsonを更新するのですが、Laravel7のアップグレードに関するガイドをみると下記の記載があります。
https://laravel.com/docs/7.x/upgrade#updating-dependencies
Updating Dependencies
Update your laravel/framework dependency to ^7.0 in your composer.json file.
In addition, update your nunomaduro/collision dependency to ^4.1,
phpunit/phpunit dependency to ^8.5,
laravel/tinker dependency to ^2.0, and
facade/ignition to ^2.0.
composerのパッケージをバージョンアップする時はcomposer.jsonを編集すれば良いのですが、Laravel6->7のアップグレードではフレームワーク本体である"laravel/framework"を^7.0
にするだけではなく、nunomaduro/collision
などの依存パッケージの指定も変更する必要があります。
手元の環境でcomposer.jsonを書き換えたところ以下の変更とになりました。
"require": {
"php": "^7.2",
"fideloper/proxy": "^4.0",
- "laravel/framework": "^6.2",
+ "laravel/framework": "^7.0",
"laravel/tinker": "^2.0",
"tymon/jwt-auth": "^1.0"
},
"require-dev": {
- "facade/ignition": "^1.4",
+ "facade/ignition": "^2.0",
"fzaninotto/faker": "^1.4",
"mockery/mockery": "^1.0",
- "nunomaduro/collision": "^3.0",
- "phpunit/phpunit": "^8.0"
+ "nunomaduro/collision": "^4.1",
+ "phpunit/phpunit": "^8.5"
},
試しにupdateしてみる
composer.jsonを書き換えたら試しにcomposer update
してみます。
$ composer update
Loading composer repositories with package information
Updating dependencies (including require-dev)
Nothing to install or update
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover --ansi
PHP Fatal error: Declaration of App\Exceptions\Handler::report(Exception $exception) must be compatible with
Illuminate\Foundation\Exceptions\Handler::report(Throwable $e)
in /path-to-prj/app/Exceptions/Handler.php on line 8
PHP Fatal error: Uncaught ReflectionException: Class App\Exceptions\Handler does not exist
in /path-to-prj/vendor/laravel/framework/src/Illuminate/Container/Container.php:807
Stack trace:
#0 /path-to-prj/vendor/laravel/framework/src/Illuminate/Container/Container.php(807): ReflectionClass->__construct('App\\Exceptions\\...')
#1 /path-to-prj/server/vendor/laravel/framework/src/Illuminate/Container/Container.php(685): Illuminate\Container\Container->build('App\\Exceptions\\...')
#2 /path-to-prj/server/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(794): Illuminate\Container\Container->resolve('App\\Exceptions\\...', Array, false)
#3 /path-to-prj/server/vendor/laravel/framework/src/Illuminate/Container/Container.php(265): Illuminate\Foundation\Application->resolve('App\\Exceptions\\...', Array, false)
#4 /path-to-prj/server/vendor/laravel/framework/src/I in /path-to-prj/vendor/laravel/framework/src/Illuminate/Container/Container.php on line 809
App/Exception/Handler::report()でエラーが発生しました。
Handler.phpの修正
App/Exception/Handler.phpのreport(),render()でエラーが出ているので修正します。(前述のページのSymfony 5 Related Upgradesに書いてある修正手順に従います)
- 変更前
use Exception;
class Handler extends ExceptionHandler
public function report(Exception $exception)
public function render($request, Exception $exception)
- 変更後
use Throwable;
class Handler extends ExceptionHandler
public function report(Throwable $exception);
public function render($request, Throwable $exception);
再度updateしたらOKでした。
$ composer update
Loading composer repositories with package information
Updating dependencies (including require-dev)
Nothing to install or update
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover --ansi
Discovered Package: facade/ignition
Discovered Package: fideloper/proxy
Discovered Package: laravel/tinker
Discovered Package: nesbot/carbon
Discovered Package: nunomaduro/collision
Discovered Package: tymon/jwt-auth
Package manifest generated successfully.
バージョンをみるとv7.3.0になっていました。
$ composer show | grep laravel/framework
laravel/framework v7.3.0 The Laravel Framework.
UnitTestの再実行
アップグレードが成功したら、UnitTestを書いている場合は/vendor/bin/phpunit
でユニットテストを再実行して通ることを確認します。
こちらもおススメ