[Laravel] Laravel6のプロジェクトを7にアップグレードする

カテゴリ: composer, Laravel, PHP | タグ: ,

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でユニットテストを再実行して通ることを確認します。

Amazonでポイントを賢くGETする方法
Amazonギフト券チャージ で最大2.5%もお得!
こちらもおススメ

コメントを残す

メールアドレスが公開されることはありません。