Laravel の 5.5 から Larave 5.8 にバージョンアップする手順です。同時に PHP 7.0 から 7.1 に更新します。新しいバージョンが出たら放置せずになるべく早く更新しましょう
更新後のバージョン
- Laravel 5.8
- PHP 7.1+
- PHPUnit 7+
- barryvdh/laravel-debugbar 3.2+
Laravel 5.8 は PHP 7.1 以降を要求するので事前にアップデートしておきましょう。PHPUnit も PHP 7.1 に対応するため 7 以降が必要になります。
Laravel DebugBar を使っているときは合わせてバージョンアップが必要です。
更新作業
- 事前準備
- Laravel のバージョンアップ
- PHPUnit のバージョンアップ
- DebugBar のインストール
- テストの実行
事前準備
テストがある場合は事前に実行してエラーが無いことを確認してください。アップデート後に再実行して影響がある箇所を特定します。
続いて PHP 7.1 以降をインストールします。phpenv
を使うとかんたんにインストールできます。
DebugBar barryvdh/laravel-debugbar
は Laravel アップデート時にエラーになるので composer.json
から削除しておきます。config/app.php
に ServiceProvider と Facade を登録している場合は一緒に削除してください。
Laravel のバージョンアップ
composer.json
を開いて require
の中から laravel/framework
を探します。バージョンが 5.5
になっていたらひとつ次のバージョン 5.6
に変更して保存します。
保存したら composer update
を実行してください。
エラーが出なければバージョンを 5.6
から 5.7
に変更して composer update
を再実行します。これを 5.8
まで繰り返してください。
バージョンアップ中にエラーが出る場合
composer update
を実行すると、パッケージのアップデート完了後に php artisan optimize
が実行されます。optimize
の実行中にエラーが発生してもパッケージのアップデートは完了しているので無視するか、エラーメッセージを参照して修正してください。
PHPUnit のバージョンアップ
Laravel のバージョンアップが完了したら PHPUnit のバージョンを更新してください。composer.json
の phpunit/phpunit
を ~7.0
に変更して composer update
を実行します。
Laravel DebugBar のインストール
削除した DebugBar を再インストールします。最新のバージョンを取得するため composer require --dev barryvdh/laravel-debugbar
を実行します。
テストの実行
全ての更新が完了したらテストを再実行してください。発生したエラーと対処方法は以下のとおりです。
Dotenv の仕様変更
エラーメッセージ
PHP Fatal error: Uncaught TypeError: Argument 1 passed to Dotenv\Dotenv::__construct() must be an instance of Dotenv\Loader, string given, called in /app/tests/autoload.php on line 8 and defined in /app/vendor/vlucas/phpdotenv/src/Dotenv.php:31
対応方法
Laravel で使用している Dotenv の初期方法が変わっています。独自に使っている場合は初期化メソッドを以下のように変更します。
// 旧
(new Dotenv\Dotenv(dirname(__DIR__), $filename))->load();
// 新
(\Dotenv\Dotenv::create(dirname(__DIR__), $filename))->load();
PHPUnit のメソッドシグネチャ変更
エラーメッセージ
PHP Fatal error: Declaration of Tests\TestCase::setUp() must be compatible with Illuminate\Foundation\Testing\TestCase::setUp(): void in /app/tests/TestCase.php on line 17
対応方法
TestCase::setUp
のメソッドシグネチャが変更されています。また PHP 7.1 に対応した戻り値の type hinting も追加されています。
テストクラスで setUp()
をオーバーライドしている場合は新しいシグネチャに変更します。
// 旧 Laravel 5.5
public void setUp() {...}
// 新 Laravel 5.8
protected void setUp(): void {...}
互換性のない PHP 7.1 の変更
エラーメッセージ
Failed asserting that exception of type "ArgumentCountError" matches expected exception "\Exception". Message was: "Too few arguments to function App\Hoge::__construct(), 1 passed in /app/tests/Unit/App/HogeTest.php on line 112 and exactly 2 expected" at
対応方法
PHP 7.1 からユーザ定義関数の呼び出し引数が不足していると Error
例外がスローされるようになりました。テストを実行してエラーになる箇所があれば修正します。
その他の変更点は PHP: 下位互換性のない変更点 - Manual にまとめられています。
追記
Laravel 5.8 では新しい設定ファイルが追加されているので適当な場所に laravel new
で新しいアプリケーションを作成してから config/*
のファイルをコピーしてきましょう。
対象ファイル
config/logging.php