composer.jsonを編集して、Laravel 5.5からLaravel 6に変更する
変更前
{
"require": {
"laravel/framework": "5.5.*",
},
}
変更後
{
"require": {
"laravel/framework": "6.*",
},
}
composer updateを実行して、Laravelを更新する
composer update
エラーが表示された
$ composer update laravel/framework
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.
Problem 1
- Conclusion: remove fideloper/proxy 3.3.4
- Conclusion: don't install fideloper/proxy 3.3.4
composer.jsonを編集して、fideloper/proxyのバージョンを更新する。
{
"require": {
"fideloper/proxy": "^4.0",
}
}
composer updateを実行して、Laravelを更新する
composer update
エラーが表示された
$ composer update
- laravelcollective/html v5.5 requires illuminate/view 5.5.* -> satisfiable by laravel/framework[v5.5.45], illuminate/view[v5.5.0, v5.5.16, v5.5.17, v5.5.2, v5.5.28, v5.5.33, v5.5.34, v5.5.35, v5.5.36, v5.5.37, v5.5.39, v5.5.40, v5.5.41, v5.5.43, v5.5.44].
- laravelcollective/html v5.5 requires illuminate/view 5.5.* -> satisfiable by laravel/framework[v5.5.45], illuminate/view[v5.5.0, v5.5.16, v5.5.17, v5.5.2, v5.5.28, v5.5.33, v5.5.34, v5.5.35, v5.5.36, v5.5.37, v5.5.39, v5.5.40, v5.5.41, v5.5.43, v5.5.44].
composer.jsonを編集して、laravelcollective/htmlのバージョンを更新する。
変更前
{
"require": {
"laravelcollective/html": "5.5.*",
},
}
変更後
{
"require": {
"laravelcollective/html": "6.0"
},
}
composer updateを実行して、Laravelを更新する
composer update
エラーが表示された
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover
Script @php artisan package:discover handling the post-autoload-dump event returned with error code 1
In cache.php line 91:
Call to undefined function str_slug()
「Laravel 6.x アップグレードガイド」の「文字列と配列のヘルパパッケージ」の項目によると、
アプリケーションへ新たにlaravel/helpersパッケージを追加すれば、こうしたヘルパを今までどおり利用できます。
ということで、laravel/helpersをインストールする
composer require laravel/helpers
composer updateを実行して、Laravelを更新する
composer update
無事に更新できた
$ composer update
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover
Discovered Package: barryvdh/laravel-ide-helper
Discovered Package: fideloper/proxy
Discovered Package: intervention/image
Discovered Package: laravel/tinker
Discovered Package: laravelcollective/html
Discovered Package: nesbot/carbon
Package manifest generated successfully.
Laravelのバージョンを確認する
$ php artisan --version
Laravel Framework 6.0.4
composer.jsonを編集して、phpunit/phpunitのバージョンを更新する。
{
"require-dev": {
"phpunit/phpunit": "^8.0",
}
}
PHPUnitのバージョンを確認する
$ vendor/bin/phpunit --version
PHPUnit 8.5.4 by Sebastian Bergmann and contributors.
テストを実行すると、エラーが発生した
$ vendor/bin/phpunit
PHP Fatal error: Declaration of Tests\Unit\XXXTest::setUp() must be compatible with Illuminate\Foundation\Testing\TestCase::setUp(): void in XXX.php on line 223
PHPUnitのバージョンが上がり、setup()メソッドが変更されている。
テストコードのsetUp()メソッドを修正する。
class XXXTest extends TestCase
{
public function setUp() :void
{
}
}
テストを実行すると、警告が出た
The @expectedException, @expectedExceptionCode, @expectedExceptionMessage, and @expectedExceptionMessageRegExp annotations are deprecated. They will be removed in PHPUnit 9. Refactor your test to use expectException(), expectExceptionCode(), expectExceptionMessage(), or expectExceptionMessageMatches() instead.
アノテーションがdeprecatedなので、代わりのメソッドに置き換える。
変更前
/**
* @expectedException InvalidArgumentException
*/
public function testHoge()
{
変更後
public function testHoge()
{
$this->expectException(InvalidArgumentException::class);
ログファイルに下記のメッセージが出力されていた。
laravel.EMERGENCY: Unable to create configured logger. Using emergency logger. {"exception":"[object] (InvalidArgumentException(code: 0): Log [] is not defined. at /vagrant/app/vendor/laravel/framework/src/Illuminate/Log/LogManager.php:175)
このメッセージは、Laravel5.6からログの設定がconfig/logging.phpファイルに保存されるようになったため。
デフォルト設定ファイルをコピーしてconfig/logging.phpに配置する。
.envファイルにログの設定を追記する
LOG_CHANNEL=daily
Laravelのバージョンが最終バージョンでないため、更新する
composer.jsonを編集する
- "laravel/framework": "6.*",
+ "laravel/framework": "^6.2",
更新する
composer update
エラーが発生した
- laravelcollective/html v6.0 requires illuminate/view 6.0.* -> satisfiable by laravel/framework[v6.0.4], illuminate/view[v6.0.0, v6.0.1, v6.0.2, v6.0.3, v6.0.4].
composer.jsonを編集する
- "laravelcollective/html": "6.0"
+ "laravelcollective/html": "^6.0"
バージョンを確認する
$ php artisan --version
Laravel Framework 6.18.15
テストを実行して問題がないことを確認する
$ vendor/bin/phpunit
PHPUnit 8.5.5 by Sebastian Bergmann and contributors.
OK (266 tests, 1833 assertions)
以上
大変な作業だったのですねー。
でもめちゃ丁寧に書いてくれてるのが嬉しいです。