3
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Laravel6.xからLaravel8.xへアップグレード

Posted at

まえがき

6.xがLTSだし6.xで開発しはじめていたが、ローンチ時期的に次のLTSバージョンが出る、もしくは近いことが想定されるのでいっそ次にバージョンを上げる際のコストを下げようの気持ちで8.xまでアップグレードするよ

アップデート前情報

PHP

PHP 7.4.3 (cli) (built: Feb 20 2020 21:53:46) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.3, Copyright (c), by Zend Technologies
    with Xdebug v2.9.6, Copyright (c) 2002-2020, by Derick Rethans

Laravel

Laravel Framework 6.18.35

composer.json

  • 実際に利用しているPJなのでアップデートとかには関係ないライブラリもあります
    "require": {
        "php": "^7.4",
        "ext-fileinfo": "*",
        "ext-json": "*",
        "ext-pdo": "*",
        "ext-redis": "*",
        "aws/aws-sdk-php-laravel": "~3.0",
        "encore/laravel-admin": "^1.8",
        "fideloper/proxy": "^4.0",
        "guzzlehttp/guzzle": "^7.0",
        "lampager/lampager": "^0.4.0",
        "lampager/lampager-laravel": "^0.4.5",
        "laravel/framework": "^6.2",
        "laravel/tinker": "^2.0",
        "lcobucci/jwt": "^3.3",
        "vinkla/hashids": "^7.0"
    },
    "require-dev": {
        "barryvdh/laravel-ide-helper": "^2.6",
        "brianium/paratest": "^4.2",
        "deployer/deployer": "^6.8",
        "deployer/recipes": "^6.2",
        "facade/ignition": "^1.4",
        "friendsofphp/php-cs-fixer": "^2.16",
        "fzaninotto/faker": "^1.9.1",
        "laravel/telescope": "^3.2",
        "mockery/mockery": "^1.0",
        "nunomaduro/collision": "^3.0",
        "phpmd/phpmd": "^2.9",
        "phpunit/phpunit": "^9.0",
        "squizlabs/php_codesniffer": "^3.5"
    }

変更していく

下記のドキュメントを参考にしながら行っていく

PHP要件

今回はもともとPHP7.4だったので特に変更無し

Laravel依存パッケージのアップデート

6 to 7

laravel/frameworkを^7.0へ
nunomaduro/collisionを^4.1へ
phpunit/phpunitを^8.5へ
laravel/tinkerを^2.0へ
facade/ignitionを^2.0へ

7 to 8

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へ

変更したcomposer.json

  • laravelの依存ライブラリ以外にも対応が必要な場合もあるのでPJごとによしなに
    "require": {
        "php": "^7.4",
        "ext-fileinfo": "*",
        "ext-json": "*",
        "ext-pdo": "*",
        "ext-redis": "*",
        "aws/aws-sdk-php-laravel": "~3.0",
        "encore/laravel-admin": "^1.8",
        "fideloper/proxy": "^4.0",
-       "guzzlehttp/guzzle": "^7.0",
+       "guzzlehttp/guzzle": "^7.0.1",
        "lampager/lampager": "^0.4.0",
        "lampager/lampager-laravel": "^0.4.5",
-       "laravel/framework": "^6.2",
+       "laravel/framework": "^8.0",
        "laravel/tinker": "^2.0",
+       "laravel/ui": "^3.0",
        "lcobucci/jwt": "^3.3",
-       "vinkla/hashids": "^7.0"
+       "vinkla/hashids": "^9.0"
    },
    "require-dev": {
        "barryvdh/laravel-ide-helper": "^2.6",
-       "brianium/paratest": "^6.0",
+       "brianium/paratest": "^6.8",
        "deployer/deployer": "^6.8",
        "deployer/recipes": "^6.2",
-       "facade/ignition": "^1.4",
+       "facade/ignition": "^2.3.6",
        "friendsofphp/php-cs-fixer": "^2.16",
        "fzaninotto/faker": "^1.9.1",
-       "laravel/telescope": "^3.2",
+       "laravel/telescope": "^4.0",
        "mockery/mockery": "^1.0",
-       "nunomaduro/collision": "^3.0",
+       "nunomaduro/collision": "^5.0",
        "phpmd/phpmd": "^2.9",
        "phpunit/phpunit": "^9.0",
        "squizlabs/php_codesniffer": "^3.5"
    }

このまま compose update すると最後のコマンド実行でエラーになるので先にSynfony5対応を行ってしまう

Writing lock file
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover --ansi
Script @php artisan package:discover --ansi handling the post-autoload-dump event returned with error code 255

Symfony5へのアップグレード

App\Exceptions\Handlerの変更

  • app/Exceptions/Handler.php を8.xの内容でコピーする
  • 見た感じ継承して親の処理呼んでただけの部分が消えた
    • 残したければ Exception を受けてるところを Throwable
  • 自前実装分があればよしなに

セッションの設定を変更

  • config/session.php を8.xの内容でコピーする
  • コメント以外は下記のような違いになっている
  • 自前実装分があればよしなに
app\config\session.php
~~

- 'secure' => env('SESSION_SECURE_COOKIE', false),
+ 'secure' => env('SESSION_SECURE_COOKIE'),

~~

- 'same_site' => null,
+ 'same_site' => 'lax',

];

compose updateの実行

上記の対応まで行ってからcomposer updateを行い、エラーが出なければOK
エラーが出た場合は内容見て解決するのが良いとは思います

ここまでで最低限の対応

$ composer update

気になればキャッシュも消しておく

$ artisan optimize:clear

更新後バージョン

Laravel Framework 8.16.1

Next step

PJというか環境によっては上記までの対応では不足しているので動作確認をしながら、エラーや挙動がおかしい箇所に関してアップグレードガイドを参考にしていく

特に「影響の可能性: 高い」の部分は要チェック

参考までに、「影響の可能性: 低い」とされていても 自分のPJでは $model->getOriginal を利用していたので対応が必要になったり、 app/Providers/RouteServiceProvider.php をごにょごにょしていたので変更が必要だったり

ライブラリを更新した影響でLaravelと関係ないところで更新を迫られたりとまぁちょいちょいありました

アップグレードガイド見るよりコード差分見て行くほうが早いかもしれない
https://github.com/laravel/laravel/compare/6.x...8.x

3
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?