Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Laravel5.5から6.4にアップグレードしたときに必要だった7つのこと

956 views

Published on

Laravel/Vue.js 勉強会 #11

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Laravel5.5から6.4にアップグレードしたときに必要だった7つのこと

  1. 1. Laravel 5.5 から 6.4に アップグレードしたときに 必要だった7つのこと Laravel/Vue.js勉強会 #11 2019/10/28 Yuta Ohashi
  2. 2. 2 blue_goheimochi ⻘ごへいもち 株式会社オウケイウェイヴ PHP(Laravel), Javascript(Vue.js/Nuxt.js) Docker, PHPer Kaigi Laravel JP Conference … おおはし ゆうた
  3. 3. 3 今⽇話すこと • 対象となるアプリケーション • PHPのバージョンアップ • 依存パッケージのアップデート • アプリケーションエラーの解消 • テストコードの修正 • まとめ
  4. 4. 4 対象となる アプリケーション
  5. 5. 5 対象となるアプリケーション https://speakerdeck.com/blue_goheimochi/phpconsen2019
  6. 6. 6 PHPのバージョンアップ
  7. 7. 7 PHPのバージョンアップ • Laravel6.0からはPHP7.2以上が必須 • 7.0 → 7.2 • Ubuntu 16.04 → Ubuntu 18.04 • コンテナは要リビルド • IaCされていたのでそんなに⼿間ではなかった • が、ビルドが途中でストップ・・・
  8. 8. 8 PHPのバージョンアップ timezoneの設定で⽌まる
  9. 9. 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. 10. 10 依存パッケージの アップデート
  11. 11. 11 依存パッケージのアップデート • Laravel 5.5 → Laravel 6.4 • composer.jsonの修正 • "laravel/framework": "5.5.*^6.4” • composer update
  12. 12. 12 依存パッケージのアップデート エラー発⽣
  13. 13. 13 依存パッケージのアップデート エラー発⽣ fideloper/proxy 3.3.4 requires illuminate/contracts ~5.0 …
  14. 14. 14 依存パッケージのアップデート • composer.json • "fideloper/proxy": "~3.3", • Laravelのリポジトのcomposer.jsonを⾒に⾏く • "^4.0” • " fideloper/proxy ": "~3.3^4.0”
  15. 15. 15 依存パッケージのアップデート エラー発⽣2
  16. 16. 16 依存パッケージのアップデート エラー発⽣2 Call to undefined function str_slug()
  17. 17. 17 依存パッケージのアップデート エラー発⽣2
  18. 18. 18 依存パッケージのアップデート • composer require laravel/helpers • composer update • めでたくエラーも発⽣せず完了 • 動作確認 • エラー。。
  19. 19. 19 アプリケーションエラーの 解消
  20. 20. 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. 21. 21 アプリケーションエラーの解消 FormRequestでエラー
  22. 22. 22 テストコードの修正
  23. 23. 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. 24. 24 テストコードの修正 PHPUnitの実⾏でエラー その1 https://github.com/laravel/framework/commit/8fc3a75b413267a30e41464d358c1d0714a6a 186#diff-e791a588881be197282063e5f8c699b8
  25. 25. 25 テストコードの修正 • src/Illuminate/Foundation/Testing/TestCase.php • setUp、tearDownに戻り値の型宣⾔(void)が追加された • 継承しているクラスは、戻り値を合わせる必要があ る • setUp(): void のように戻り値の型を指定
  26. 26. 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. 27. 27 テストコードの修正 PHPUnitの実⾏でエラー その2 https://github.com/laravel/framework/commit/695a29928d5f3e595363306cf62ba4ff653d73 ba
  28. 28. 28 テストコードの修正 PHPUnitの実⾏でエラー その2 https://github.com/sebastianbergmann/phpunit/commit/853e2f698a130a4bec0ced4ef7e4b c902061291d#diff-2a51e18082c4a03eee7c1f8aac26ebb3L103
  29. 29. 29 テストコードの修正 • PHPUnitの6→7になるときに戻り値の型宣⾔が⼊っている • PHP7以降で指定が可能に(voidは7.1〜) • Laravelのコアに修正があるのでPHPUnit⾃体のバージョン アップが必要 • Laravelのリポジトのcomposer.jsonを⾒に⾏く • “phpunit/phpunit ”: “~6.0^8.0” に変更
  30. 30. 30 テストコードの修正 PHPUnitの実⾏でエラー その3
  31. 31. 31 テストコードの修正 PHPUnitの実⾏でエラー その3
  32. 32. 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. 33. 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. 34. 34 テストコードの修正 PHPUnitの実⾏でエラー その3
  35. 35. 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. 36. 36 テストコードの修正 • PHPUnitの9で@expectedExceptionsのアノテーションや assertInternalType()がDeprecetedになる様⼦ • テストを実⾏して、アラートがあがったら1つ1つ対応 する
  37. 37. 37 テストコードの修正 ということでPHPUnitのエラー解消︕
  38. 38. 38 まとめ
  39. 39. 39 まとめ • 基本的には公式のUpgrade Guideに従う • わたしたちの環境で必要だったこと • PHPのバージョンアップ • 依存パッケージのアップデート • Laravel本体、 fideloper/proxy • laravel/helpersのインストール • アプリケーションエラーの解消 • FormRequestのvalidationDataをprotected→publicに • テストコードの修正 • setUp、tearDownメソッドに戻り値の型が付与されたので、基底クラスを継承してい るクラスでも戻り値の型宣⾔を追加 • PHPUnitのバージョンアップ(6→8) • Deprecatedになっている記述を1つ1つ修正する

×