Laravel5.5からLaravel6へバージョンアップしたときのメモ

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)

以上

コメント

  1. 大変な作業だったのですねー。
    でもめちゃ丁寧に書いてくれてるのが嬉しいです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

This site uses Akismet to reduce spam. Learn how your comment data is processed.