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. 大変な作業だったのですねー。
    でもめちゃ丁寧に書いてくれてるのが嬉しいです。

コメントを残す

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

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください