Forteeをバージョンアップしてみた

 Forteeをバージョンアップしてみた

652359244199b2b5108a5e09c027e0da?s=128

Kanazawa Yuki

November 30, 2019
Tweet

Transcript

  1. 2.

    2019/11/30 大改修!PHPレガシーコードビフォーアフター Speaker Biography 2 Yuki Kanzawa Lancers, Inc. /

    Site Reliability Engineer (2013/11 -) Live in Tokyo, Japan Github:yKanazawa Twitter: @yakitori009 Language: C++, Java, PHP, Go Hobby: Shogi(Japanese Chess)
  2. 4.

    2019/11/30 大改修!PHPレガシーコードビフォーアフター Upgrade History (https://www.lancers.jp/) 1.3 -> 2.8 2.8 ->

    2.10 2.10 -> 3.x .. more 5.3 -> 5.6 5.6 -> 7.3 -> PHP5.6 requires 2017/6/6 2 months 1.7 year 2019/2/5 1.8 month 2019/3/27 2019/3/28 1 day 2019/5/28 2 months CakePHP2.10 requires PHP7.3 requires
  3. 7.

    2019/11/30 大改修!PHPレガシーコードビフォーアフター foteeのサーバー構成 php-cli smtp DB 3306 web ディレクトリ 共有

    SQLクライアント 開発環境(エディタ) PHP 7.2 CakePHP 3.5 MySQL 5.7 WWWブラウザ 80
  4. 9.

    2019/11/30 大改修!PHPレガシーコードビフォーアフター 開発環境 •セットアップ手順 •Windows環境で動かない ◦Docker for Windows ◦git for

    Windows ▪makeコマンドがない •Make for Windowsをインストール ▪Cypressが動かない •結局Macを使うことに。。。 git clone https://github.com/hasegawa-tomoki/fortee.git cd fortee cp config/.env.local config/.env make up make install make migrate docker-compose run web bin/cake records import all
  5. 10.

    2019/11/30 大改修!PHPレガシーコードビフォーアフター テスト環境 •PHPUnit •Cypress ◦E2Eテスト環境 % make test ...

    ..........W..........IIIIIIIR..IIIIIIII.FIII..RW..W...IIIRRRRIIII 65 / 86 ( 75%) I.IIIIIIIII.IIIIIIIII 86 / 86 (100%) ... FAILURES! Tests: 86, Assertions: 114, Failures: 1, Warnings: 3, Incomplete: 44, Risky: 6. make: *** [test] Error 1
  6. 12.

    2019/11/30 大改修!PHPレガシーコードビフォーアフター composer update - Updating symfony/filesystem (v3.4.11 => v4.3.8):

    Downloading (100%) - Updating symfony/config (v3.4.11 => v3.4.35): Downloading (100%) - Updating theseer/tokenizer (1.1.0 => 1.1.3): Downloading (100%) - Updating myclabs/deep-copy (1.8.1 => 1.9.3): Downloading (100%) - Updating friendsofcake/bootstrap-ui (1.4.0 => 1.4.1): Downloading (100%) - Updating twig/twig (v1.35.3 => v1.42.4): Downloading (100%) - Updating ajgl/breakpoint-twig-extension (0.3.1 => 0.3.4): Downloading (100%) - Updating wyrihaximus/twig-view (4.3.4 => 4.3.5): Downloading (100%) - Updating symfony/process (v3.4.11 => v4.3.8): Downloading (100%) - Updating symfony/finder (v3.4.11 => v4.3.8): Downloading (100%) - Updating seld/jsonlint (1.7.1 => 1.7.2): Downloading (100%) - Updating justinrainbow/json-schema (5.2.7 => 5.2.9): Downloading (100%) - Installing composer/xdebug-handler (1.4.0): Downloading (100%) - Updating composer/spdx-licenses (1.4.0 => 1.5.2): Downloading (100%) - Updating composer/semver (1.4.2 => 1.5.0): Downloading (100%) - Updating composer/ca-bundle (1.1.1 => 1.2.4): Downloading (100%) - Updating composer/composer (1.6.5 => 1.9.1): Downloading (100%) - Updating m1/env (2.1.1 => 2.1.2): Downloading (100%) - Removing seld/cli-prompt (1.0.3) - Removing doctrine/lexer (v1.0.1) - Removing doctrine/inflector (v1.2.0) - Removing doctrine/collections (v1.4.0) - Removing doctrine/annotations (v1.4.0) - Removing doctrine/common (v2.7.3) - Updating cakephp/plugin-installer (1.1.0 => 1.1.1): - Updating paragonie/random_compat (v2.0.15 => v2.0.18): Downloading (100%) - Installing ralouphie/getallheaders (3.0.3): Downloading (100%) - Updating guzzlehttp/psr7 (1.4.2 => 1.6.1): Downloading (100%) - Updating guzzlehttp/guzzle (6.3.3 => 6.4.1): Downloading (100%) - Updating league/oauth2-client (2.3.0 => 2.4.1): Downloading (100%) - Updating symfony/polyfill-mbstring (v1.8.0 => v1.12.0): Downloading (100%) - Updating symfony/polyfill-ctype (v1.11.0 => v1.12.0): Downloading (100%) - Updating symfony/dom-crawler (v3.4.11 => v4.3.8): Downloading (100%) - Updating symfony/css-selector (v3.4.11 => v4.3.8): Downloading (100%) - Updating symfony/browser-kit (v3.4.11 => v4.3.8): Downloading (100%) - Updating fabpot/goutte (v3.2.2 => v3.2.3): Downloading (100%) - Installing markbaker/matrix (1.2.0): Downloading (100%) - Installing markbaker/complex (1.4.7): Downloading (100%) - Updating phpoffice/phpspreadsheet (1.3.1 => 1.9.0): Downloading (100%) - Updating phpoffice/phpexcel (1.8.1 => 1.8.2): Downloading (100%) - Updating react/promise (v2.7.0 => v2.7.1): Downloading (100%) - Updating mpyw/cowitter (v1.0.3 => v1.0.5): Downloading (100%) - Updating fzaninotto/faker (v1.8.0 => v1.9.0): Downloading (100%) - Updating doctrine/cache (v1.6.2 => 1.9.1): Downloading (100%) - Installing doctrine/event-manager (1.1.0): Downloading (100%) - Updating doctrine/dbal (v2.5.13 => v2.10.0): Downloading (100%) - Updating lapaz/quick-brown-fox (0.1.2 => 0.1.3): Downloading (100%) - Updating symfony/yaml (v3.4.17 => v3.4.35): Downloading (100%) - Installing symfony/polyfill-php72 (v1.12.0): Downloading (100%) - Updating symfony/var-dumper (v3.4.11 => v4.3.8): Downloading (100%) - Updating zendframework/zend-diactoros (1.7.2 => 1.8.7): Downloading (100%) - Updating psr/log (1.0.2 => 1.1.2): Downloading (100%) - Updating cakephp/chronos (1.1.4 => 1.2.8): Downloading (100%) - Updating cakephp/cakephp (3.5.17 => 3.5.18): Downloading (100%) - Updating fusic/encount (2.0.5 => 2.0.9): Downloading (100%) - Updating jakub-onderka/php-console-color (0.1 => v0.2): Downloading (100%) - Updating jakub-onderka/php-console-highlighter (v0.3.2 => v0.4): Downloading (100%) - Updating nikic/php-parser (v4.0.2 => v4.3.0): Downloading (100%) - Updating symfony/debug (v3.4.11 => v4.3.8): Downloading (100%) - Updating symfony/console (v3.4.11 => v3.4.35): Downloading (100%) - Updating psy/psysh (v0.9.6 => v0.9.9): Downloading (100%) - Updating squizlabs/php_codesniffer (3.3.0 => 3.5.2): Downloading (100%) - Updating cakephp/cakephp-codesniffer (3.0.5 => 3.1.2): Downloading (100%) - Updating doctrine/instantiator (1.2.0 => 1.3.0): Downloading (100%) - Updating sebastian/exporter (3.1.0 => 3.1.2): Downloading (100%) - Updating webmozart/assert (1.4.0 => 1.5.0): Downloading (100%) - Updating phpdocumentor/reflection-common (1.0.1 => 2.0.0): Downloading (100%) - Updating phpdocumentor/type-resolver (0.4.0 => 1.0.1): Downloading (100%) - Updating phpdocumentor/reflection-docblock (4.3.0 => 4.3.2): Downloading (100%) - Updating phpspec/prophecy (1.8.0 => 1.9.0): Downloading (100%)
  7. 13.

    2019/11/30 大改修!PHPレガシーコードビフォーアフター PHPUnit •正常終了 ◦Twitterのテストだけスルー % make test ... ..........W..........IIIIIIIR..IIIIIIII.FIII..RW..W...IIIRRRRIIII

    65 / 86 ( 75%) I.IIIIIIIII.IIIIIIIII 86 / 86 (100%) ... FAILURES! Tests: 86, Assertions: 114, Failures: 1, Warnings: 3, Incomplete: 44, Risky: 6. make: *** [test] Error 1
  8. 16.

    2019/11/30 大改修!PHPレガシーコードビフォーアフター 修正内容 •composer.jsonの修正 •composer update Downloading (100%) - Updating

    cakephp/migrations (1.7.2 => 1.8.1): Downloading (100%) - Updating cakephp/debug_kit (3.14.2 => 3.16.7): Downloading (100%) - Updating wyrihaximus/twig-view (4.3.5 => 4.3.8): Downloading (100%) - Updating cakephp/bake (1.6.4 => 1.8.7): Downloading (100%)
  9. 17.

    2019/11/30 大改修!PHPレガシーコードビフォーアフター PHPUnit Encount¥Error¥EncountErrorHandler::handleError() - ROOT/vendor/fusic/encount/src/Error/EncountErrorHandler.php, line 22 deprecationWarning -

    CORE/src/Core/functions.php, line 311 Cake¥Core¥Plugin::routes() - CORE/src/Core/Plugin.php, line 306 Cake¥Core¥Plugin::routes() - CORE/src/Core/Plugin.php, line 310 include - ROOT/config/routes.php, line 326 Cake¥Routing¥Router::_loadRoutes() - CORE/src/Routing/Router.php, line 1170 Cake¥Routing¥Router::url() - CORE/src/Routing/Router.php, line 610 App¥Classes¥MisocaCore::__construct() - APP/Classes/MisocaCore.php, line 28 App¥Test¥TestCase¥Classes¥MisocaCoreTest::setUp() - ROOT/tests/TestCase/Classes/MisocaCoreTest.php, line 23 ... You can disable deprecation warnings by setting `Error.errorLevel` to `E_ALL & ~E_USER_DEPRECATED` in your config/app.php •正常終了 ◦以下のdeprecationWarningが出力されるようになった
  10. 18.

    2019/11/30 大改修!PHPレガシーコードビフォーアフター Cypress 2019-11-17 18:43:12 Notice: Deprecated (16384): You no

    longer need to call `Plugin::routes()` after upgrading to use Http¥Server. See https://book.cakephp.org/3.0/en/development/application.html#adding-the-new-http- stack-to-an-existing-application for upgrade information. - /var/www/html/config/routes.php, line: 326 2019-11-17 18:43:18 Notice: Deprecated (16384): Accessing url as a property will be removed in 4.0.0. Use getPath() instead. - /var/www/html/src/Classes/UsersCore.php, line: 192 2019-11-17 18:43:20 Notice: Deprecated (16384): Router::parse() is deprecated. Use Router::parseRequest() instead. This will require adopting the Http¥Server library. - /var/www/html/src/Classes/UsersCore.php, line: 195 2019-11-17 18:43:20 Notice: Deprecated (16384): Response::type() is deprecated. Use setTypeMap(), getType() or withType() instead. - /var/www/html/src/Controller/AppController.php, line: 219 … •正常終了 ◦debug.logにNoticeが出力されるようになった
  11. 21.

    2019/11/30 大改修!PHPレガシーコードビフォーアフター 修正内容 •composer.jsonの修正 •composer update Downloading (100%) - Updating

    cakephp/debug_kit (3.16.7 => 3.21.0): Downloading (100%) - Updating cakephp/bake (1.8.7 => 1.10.1): Downloading (100%)
  12. 22.

    2019/11/30 大改修!PHPレガシーコードビフォーアフター PHPUnit •正常終了 ◦Twitterのテストだけスルー % make test ... ..........W..........IIIIIIIR..IIIIIIII.FIII..RW..W...IIIRRRRIIII

    65 / 86 ( 75%) I.IIIIIIIII.IIIIIIIII 86 / 86 (100%) ... FAILURES! Tests: 86, Assertions: 114, Failures: 1, Warnings: 3, Incomplete: 44, Risky: 6. make: *** [test] Error 1
  13. 24.

    2019/11/30 大改修!PHPレガシーコードビフォーアフター Cypress •error.log •以下のcontainをコメントアウトすれば発生しない。。。 ◦スポンサープラングループ(親要素)をselect ◦ついでに子要素(スポンサープラン)をselect ▪そのorderを取得する処理 public function

    index() { $sponsorPlanGroups = $this->SponsorPlanGroups->find() // ->contain(['SponsorPlans' => function (¥Cake¥ORM¥Query $q) { // return $q->where(['SponsorPlans.sort' => 'asc']); // }]) ->where(['SponsorPlanGroups.conference_id' => $this->activeConference->id]) ->order(['SponsorPlanGroups.sort' => 'asc']); $this->set(compact('sponsorPlanGroups')); } Error: [InvalidArgumentException] Cannot convert value of type `string` to integer
  14. 27.

    2019/11/30 大改修!PHPレガシーコードビフォーアフター 修正内容 •composer.jsonの修正 •composer update Package operations: 0 installs,

    2 updates, 0 removals - Updating cakephp/cakephp (3.7.9 => 3.8.6Loading from cache - Updating cakephp/bake (1.10.1 => 1.11.2): Loading from cache
  15. 28.

    2019/11/30 大改修!PHPレガシーコードビフォーアフター PHPUnit •正常終了 ◦Twitterのテストだけスルー % make test ... ..........W..........IIIIIIIR..IIIIIIII.FIII..RW..W...IIIRRRRIIII

    65 / 86 ( 75%) I.IIIIIIIII.IIIIIIIII 86 / 86 (100%) ... FAILURES! Tests: 86, Assertions: 114, Failures: 1, Warnings: 3, Incomplete: 44, Risky: 6. make: *** [test] Error 1
  16. 32.

    2019/11/30 大改修!PHPレガシーコードビフォーアフター PHPUnit •正常終了 ◦Twitterのテストだけスルー % make test ... ..........W..........IIIIIIIR..IIIIIIII.FIII..RW..W...IIIRRRRIIII

    65 / 86 ( 75%) I.IIIIIIIII.IIIIIIIII 86 / 86 (100%) ... FAILURES! Tests: 86, Assertions: 114, Failures: 1, Warnings: 3, Incomplete: 44, Risky: 6. make: *** [test] Error 1
  17. 35.

    2019/11/30 大改修!PHPレガシーコードビフォーアフター Composerのdeprecatedライブラリ •mpyw/twistoauth ◦Use mpyw/cowitter instead •phpoffice/phpexcel ◦Use phpoffice/phpspreadsheet

    instead •phpunit/phpunit-mock-objects ◦No replacement was suggested Package mpyw/twistoauth is abandoned, you should avoid using it. Use mpyw/cowitter instead. Package phpoffice/phpexcel is abandoned, you should avoid using it. Use phpoffice/phpspreadsheet instead. Package phpunit/phpunit-mock-objects is abandoned, you should avoid using it. No replacement was suggested.
  18. 40.

    2019/11/30 大改修!PHPレガシーコードビフォーアフター CakePHP4のインストール "require": { "php": ">=7.2", "cakephp/cakephp": "4.x-dev", "cakephp/plugin-installer":

    "^1.0", "mobiledetect/mobiledetectlib": "2.*" }, "require-dev": { "cakephp/bake": "4.x-dev", "cakephp/cakephp-codesniffer": "dev-next", "cakephp/debug_kit": "4.x-dev", "cakephp/migrations": "4.x-dev", "josegonzalez/dotenv": "3.*", "phpunit/phpunit": "^8.0", "psy/psysh": "@stable" }, •依存関係が複雑 ◦https://github.com/cakephp/app/blob/4.x/composer.json をベースにcompser.json作り直し ◦CakePHP4に対応してなかったライブラリ "adayth/cakephp-cipher-behavior": "^1.0", "fusic/encount": "^2.0", "pgbi/cakephp3-soft-delete": "^1.3", "sizuhiko/cake_fabricate": "^0.2.2"
  19. 45.

    2019/11/30 大改修!PHPレガシーコードビフォーアフター CakePHP Upgrade toolを使う •CakePHP Upgrade tool ◦https://github.com/cakephp/upgrade ▪4.xブランチに切り替え

    •実行 ◦/src/Template → /templates に移動 ◦ctp → phpに変更 root@localhost:~/upgrade# ./bin/cake filename locales /var/www/html … root@localhost:~/upgrade# ./bin/cake templates locales /var/www/html Moving sub directories of /var/www/html/templatesfatal: source directory is empty, source=templates/Layout/Email, destination=templates/Layout/email_fatal: bad source, source=templates/Layout/email_, destination=templates/Layout/email/email_fatal: source directory is empty, source=templates/Element/Flash, destination=templates/Element/flash_fatal: bad source, source=templates/Element/flash_, destination=templates/Element/flash/flash_ …
  20. 47.

    2019/11/30 大改修!PHPレガシーコードビフォーアフター Rectorを使う •実行 ◦失敗。ここで時間切れ。。。 root@localhost:/var/www/html# ./bin/cake upgrade rector src/

    [27-Nov-2019 17:46:37 Asia/Tokyo] PHP Fatal error: Declaration of App¥Application::middleware($middlewareQueue) must be compatible with Cake¥Http¥BaseApplication::middleware(Cake¥Http¥MiddlewareQueue $middleware): Cake¥Http¥MiddlewareQueue in /var/www/html/src/Application.php on line 30 Fatal error: Declaration of App¥Application::middleware($middlewareQueue) must be compatible with Cake¥Http¥BaseApplication::middleware(Cake¥Http¥MiddlewareQueue $middleware): Cake¥Http¥MiddlewareQueue in /var/www/html/src/Application.php on line 30
  21. 49.

    2019/11/30 大改修!PHPレガシーコードビフォーアフター PHP7.4 •PHP7.4 ◦2019/11/28リリース •php-7.4-apache コンテナ ◦2019/11/29リリース •修正内容 2

    0 1 9 /1 1 /3 0 大改修!PHPレガシーコードビフォーアフター PHP7.4 •PHP7.4 ◦2019/11/28リリース •php-7.4-apache コンテナ ◦2019/11/29リリース •修正内容
  22. 51.

    2019/11/30 大改修!PHPレガシーコードビフォーアフター PHPUnit •エラーが1つ増えた。。 •imagecreatefromjpeg 関数が見つからない ◦php-gdが正しく入っていない? % make test

    ... ..........W..........IIIIIIIR..IIIIIIII.FIII..RW..W...IIIRRRRIIII 65 / 86 ( 75%) I.IIIIIIIII.IIIIIIIII 86 / 86 (100%) ... ERRORS! Tests: 87, Assertions: 99, Errors: 2, Failures: 1, Warnings: 3, Incomplete: 43, Risky: 6. make: *** [test] Error 2 There were 2 errors: 1) App¥Test¥TestCase¥Classes¥ForteeUtilTest::testCrop Error: Call to undefined function App¥Classes¥imagecreatefromjpeg() /var/www/html/src/Classes/ForteeUtil.php:118 /var/www/html/tests/TestCase/Classes/ForteeUtilTest.php:64 2) App¥Test¥TestCase¥Classes¥OctavCoreTest::testImport Error: Call to undefined function App¥Classes¥imagecreatefromjpeg()