狠狠撸

狠狠撸Share a Scribd company logo
Laravel 5.5 から 6.4に
アップグレードしたときに
必要だった7つのこと
Laravel/Vue.js勉強会 #11
2019/10/28
Yuta Ohashi
2
blue_goheimochi
?ごへいもち
株式会社オウケイウェイヴ
PHP(Laravel),
Javascript(Vue.js/Nuxt.js)
Docker, PHPer Kaigi
Laravel JP Conference …
おおはし ゆうた
3
今?話すこと
? 対象となるアプリケーション
? PHPのバージョンアップ
? 依存パッケージのアップデート
? アプリケーションエラーの解消
? テストコードの修正
? まとめ
4
対象となる
アプリケーション
5
対象となるアプリケーション
https://speakerdeck.com/blue_goheimochi/phpconsen2019
6
PHPのバージョンアップ
7
PHPのバージョンアップ
? Laravel6.0からはPHP7.2以上が必須
? 7.0 → 7.2
? Ubuntu 16.04 → Ubuntu 18.04
? コンテナは要リビルド
? IaCされていたのでそんなに?間ではなかった
? が、ビルドが途中でストップ???
8
PHPのバージョンアップ
timezoneの設定で?まる
9
PHPのバージョンアップ
解決策
FROM ubuntu:18.04
ENV DEBIAN_FRONTEND=noninteractive
MAINTAINER Yuta Ohashi <y_ohashi@okwave.co.jp>
RUN apt-get update
…
https://qiita.com/yagince/items/deba267f789604643bab
? Dockerfileに ENV DEBIAN_FRONTEND=noninteractive を追加
? ??待ちによって?まらなくなる
10
依存パッケージの
アップデート
11
依存パッケージのアップデート
? Laravel 5.5 → Laravel 6.4
? composer.jsonの修正
? "laravel/framework": "5.5.*^6.4”
? composer update
12
依存パッケージのアップデート
エラー発?
13
依存パッケージのアップデート
エラー発?
fideloper/proxy 3.3.4 requires illuminate/contracts ~5.0 …
14
依存パッケージのアップデート
? composer.json
? "fideloper/proxy": "~3.3",
? Laravelのリポジトのcomposer.jsonを?に?く
? "^4.0”
? " fideloper/proxy ": "~3.3^4.0”
15
依存パッケージのアップデート
エラー発?2
16
依存パッケージのアップデート
エラー発?2
Call to undefined function str_slug()
17
依存パッケージのアップデート
エラー発?2
18
依存パッケージのアップデート
? composer require laravel/helpers
? composer update
? めでたくエラーも発?せず完了
? 動作確認
? エラー。。
19
アプリケーションエラーの
解消
20
アプリケーションエラーの解消
{
"message": "Access level to
XXXX??Application??Requests??XXXX??XXXX::validationData() must be public (as in
class Illuminate??Foundation??Http??FormRequest)",
"exception": "Symfony??Component??Debug??Exception??FatalErrorException",
"file": "/var/www/XXXXX/Application/Requests/XXXX/XXXX.php",
"line": 9,
"trace": []
}
FormRequestでエラー
21
アプリケーションエラーの解消
FormRequestでエラー
22
テストコードの修正
23
テストコードの修正
PHPUnitの実?でエラー その1
PHP Fatal error: Declaration of
Tests?Unit?XXXXX?XXXXX?XXXXX?XXXXX?XXXXX::setUp() must be compatible with
Illuminate?Foundation?Testing?TestCase::setUp(): void in
/opt/project/tests/Unit/XXXXX/XXXXX/XXXXX/XXXXX/XXXXX.php on line 121
24
テストコードの修正
PHPUnitの実?でエラー その1
https://github.com/laravel/framework/commit/8fc3a75b413267a30e41464d358c1d0714a6a
186#diff-e791a588881be197282063e5f8c699b8
25
テストコードの修正
? src/Illuminate/Foundation/Testing/TestCase.php
? setUp、tearDownに戻り値の型宣?(void)が追加された
? 継承しているクラスは、戻り値を合わせる必要があ
る
? setUp(): void のように戻り値の型を指定
26
テストコードの修正
PHPUnitの実?でエラー その2
1) Tests?Feature?ExampleTest::testBasicTest
ErrorException: Declaration of
Illuminate?Foundation?Testing?Assert::assertArraySubset($subset, $array, bool
$checkForObjectIdentity = false, string $message = ''): void should be compatible
with PHPUnit?Framework?Assert::assertArraySubset($subset, $array, $strict = false,
$message = '')
/opt/project/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Assert.ph
p:42
/opt/project/vendor/laravel/framework/src/Illuminate/Foundation/Testing/TestResp
onse.php:181
/opt/project/tests/Feature/ExampleTest.php:19
27
テストコードの修正
PHPUnitの実?でエラー その2
https://github.com/laravel/framework/commit/695a29928d5f3e595363306cf62ba4ff653d73
ba
28
テストコードの修正
PHPUnitの実?でエラー その2
https://github.com/sebastianbergmann/phpunit/commit/853e2f698a130a4bec0ced4ef7e4b
c902061291d#diff-2a51e18082c4a03eee7c1f8aac26ebb3L103
29
テストコードの修正
? PHPUnitの6→7になるときに戻り値の型宣?が?っている
? PHP7以降で指定が可能に(voidは7.1?)
? Laravelのコアに修正があるのでPHPUnit?体のバージョン
アップが必要
? Laravelのリポジトのcomposer.jsonを?に?く
? “phpunit/phpunit ”: “~6.0^8.0” に変更
30
テストコードの修正
PHPUnitの実?でエラー その3
31
テストコードの修正
PHPUnitの実?でエラー その3
32
テストコードの修正
PHPUnitの実?でエラー その3
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
expectExceptionMessageRegExp() instead.
33
テストコードの修正
? PHPUnit9でexpectedExceptionのアノテーションは廃?
https://blog.okashoi.net/entry/2019/09/04/155400
/**
* @expectedException ?xxx?MyException
*/
public static function testHoge()
{
//code
}
public static function testHoge()
{
$this->expectException(MyException::class);
//code
}
34
テストコードの修正
PHPUnitの実?でエラー その3
35
テストコードの修正
PHPUnitの実?でエラー その3
assertInternalType() is deprecated and will be removed in
PHPUnit 9. Refactor your test to use assertIsArray(),
assertIsBool(), assertIsFloat(), assertIsInt(), assertIsNumeric(),
assertIsObject(), assertIsResource(), assertIsString(),
assertIsScalar(), assertIsCallable(), or assertIsIterable() instead.
36
テストコードの修正
? PHPUnitの9で@expectedExceptionsのアノテーションや
assertInternalType()がDeprecetedになる様?
? テストを実?して、アラートがあがったら1つ1つ対応
する
37
テストコードの修正
ということでPHPUnitのエラー解消?
38
まとめ
39
まとめ
? 基本的には公式のUpgrade Guideに従う
? わたしたちの環境で必要だったこと
? PHPのバージョンアップ
? 依存パッケージのアップデート
? Laravel本体、 fideloper/proxy
? laravel/helpersのインストール
? アプリケーションエラーの解消
? FormRequestのvalidationDataをprotected→publicに
? テストコードの修正
? setUp、tearDownメソッドに戻り値の型が付与されたので、基底クラスを継承してい
るクラスでも戻り値の型宣?を追加
? PHPUnitのバージョンアップ(6→8)
? Deprecatedになっている記述を1つ1つ修正する

More Related Content

尝补谤补惫别濒5.5から6.4にアップグレードしたときに必要だった7つのこと