まえがき
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"
}
変更していく
下記のドキュメントを参考にしながら行っていく
- 6.xから7.0へのアップグレード
- 7.xから8.0へのアップグレード
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の内容でコピーする - コメント以外は下記のような違いになっている
- 自前実装分があればよしなに
~~
- '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というか環境によっては上記までの対応では不足しているので動作確認をしながら、エラーや挙動がおかしい箇所に関してアップグレードガイドを参考にしていく
特に「影響の可能性: 高い」の部分は要チェック
- 6.xから7.0へのアップグレード
- 7.xから8.0へのアップグレード
参考までに、「影響の可能性: 低い」とされていても 自分のPJでは $model->getOriginal
を利用していたので対応が必要になったり、 app/Providers/RouteServiceProvider.php をごにょごにょしていたので変更が必要だったり
ライブラリを更新した影響でLaravelと関係ないところで更新を迫られたりとまぁちょいちょいありました
アップグレードガイド見るよりコード差分見て行くほうが早いかもしれない
https://github.com/laravel/laravel/compare/6.x...8.x