Upgrade to Pro — share decks privately, control downloads, hide ads and more …

新米SRE、4つのプロダクトを同時にPHP7.0から8.1へ!!

 新米SRE、4つのプロダクトを同時にPHP7.0から8.1へ!!

PHPカンファレンス香川2024

2024/05/11 10:35〜
槇(まき)の間
レギュラートーク(40分)

https://fortee.jp/phpconkagawa-2024/proposal/3746d04f-d0cd-4f02-b603-4132f82c080d

More Decks by ことみん / kotomin_m

Transcript

  1. X @kotomin_m #phpconkagawa • 所属: ウィルゲート SRE • 技術: PHP,

    Laravel • 趣味: LT会とカンファレンスとカン ファレンスのネイル 新米SREのことみんです!
  2. X @kotomin_m #phpconkagawa 2021年 4月 PHP未経験で入社 PHP 50%・React 50% 2022年

    PHP 70%・その他 30% 新米SREになるまでのキャリア
  3. X @kotomin_m #phpconkagawa 2021年 4月 PHP未経験で入社 PHP 50%・React 50% 2022年

    PHP 70%・その他 30% 新米SREになるまでのキャリア ちょっと出来るように なってきた〜
  4. X @kotomin_m #phpconkagawa 2021年 4月 PHP未経験で入社 PHP 50%・React 50% 2022年

    PHP 70%・その他 30% 2023年 6月 PHP 85% 新米SREになるまでのキャリア 同じプロダクト を担当
  5. X @kotomin_m #phpconkagawa 2021年 4月 PHP未経験で入社 PHP 50%・React 50% 2022年

    PHP 70%・その他 30% 2023年 6月 PHP 85% 新米SREになるまでのキャリア アプリ開発は出来るようになってきたけど PHPのことよく分かってない…
  6. X @kotomin_m #phpconkagawa 2021年 4月 PHP未経験で入社 PHP 50%・React 50% 2022年

    PHP 70%・その他 30% 2023年 6月 PHP 85% 新米SREになるまでのキャリア アプリ開発は出来るようになってきたけど PHPのことよく分かってない… 担当プロダクトのことは分かるけど 他でもやっていけるのか…?
  7. X @kotomin_m #phpconkagawa 2021年 4月 PHP未経験で入社 PHP 50%・React 50% 2022年

    PHP 70%・その他 30% 2023年 6月 PHP 85%・SRE 15% 新米SREになるまでのキャリア
  8. X @kotomin_m #phpconkagawa 2021年 4月 PHP未経験で入社 PHP 50%・React 50% 2022年

    PHP 70%・その他 30% 2023年 6月 PHP 85%・SRE 15% 新米SREになるまでのキャリア 担当プロダクトで少しやったことあった パフォーマンス改善をより本格的に
  9. X @kotomin_m #phpconkagawa 2021年 4月 PHP未経験で入社 PHP 50%・React 50% 2022年

    PHP 70%・その他 30% 2023年 6月 PHP 85%・SRE 15% 新米SREになるまでのキャリア 同じプロダクト を担当 PHPバージョンアップのプロジェクトが始まるぞ!
  10. X @kotomin_m #phpconkagawa 2021年 4月 PHP未経験で入社 PHP 50%・React 50% 2022年

    PHP 70%・その他 30% 2023年 6月 PHP 85%・SRE 15% 2023年12月〜現在 新米SRE!💪 新米SREになるまでのキャリア 同じプロダクト を担当
  11. X @kotomin_m #phpconkagawa 2021年 4月 PHP未経験で入社 PHP 50%・React 50% 2022年

    PHP 70%・その他 30% 2023年 6月 PHP 85%・SRE 15% 2023年12月〜現在 新米SRE!💪 新米SREになるまでのキャリア SREに本格的に移動! 初めてのプロジェクト💪
  12. X @kotomin_m #phpconkagawa 2021年 4月 PHP未経験で入社 PHP 50%・React 50% 2022年

    PHP 70%・その他 30% 2023年 6月 PHP 85%・SRE 15% 2023年12月〜現在 新米SRE!💪 新米SREになるまでのキャリア SREに本格的に移動! 初めてのプロジェクト💪 一気に4つのプロダクトに 関わっていくことに
  13. X @kotomin_m #phpconkagawa 2021年 4月 PHP未経験で入社 PHP 50%・React 50% 2022年

    PHP 70%・その他 30% 2023年 6月 PHP 85%・SRE 15% 2023年12月〜現在 新米SRE!💪 新米SREになるまでのキャリア 1つのプロダクトを 担当するWebアプリ エンジニア 様々なプロダクトを 担当するSRE
  14. X @kotomin_m #phpconkagawa 今回のバージョンアップ 背景 ゴールはCentOS 7からの脱却 CentOS 7が 2024年6月30日にEOLを迎える

    → Amazon Linux 2023への移行 → そのために(諸々端折るが、)PHP 8.1が必要!
  15. X @kotomin_m #phpconkagawa プロダクト コード量 歴 テストコード   ライオン 大 8年

    ある   おさる   ペンギン   リス 4つのプロダクト 概要 一番コード量も多く複雑、大変そう 直近も活発に開発されている
  16. X @kotomin_m #phpconkagawa プロダクト コード量 歴 テストコード   ライオン 大 8年

    ある   おさる 中 6年 ほぼ無い   ペンギン   リス 4つのプロダクト 概要 1年前ぐらいからPHPStanが導入された 最近テストコードを書こうと奮闘中
  17. X @kotomin_m #phpconkagawa プロダクト コード量 歴 テストコード   ライオン 大 8年

    ある   おさる 中 6年 ほぼ無い   ペンギン   リス 4つのプロダクト 概要
  18. X @kotomin_m #phpconkagawa プロダクト コード量 歴 テストコード   ライオン 大 8年

    ある   おさる 中 6年 ほぼ無い   ペンギン 中 5年 ある   リス 4つのプロダクト 概要 元ことみん担当プロダクトなので知識が豊富 テストコードは初期構築の段階から存在/運用
  19. X @kotomin_m #phpconkagawa プロダクト コード量 歴 テストコード   ライオン 大 8年

    ある   おさる 中 6年 ほぼ無い   ペンギン 中 5年 ある   リス 小 7年 ある 4つのプロダクト 概要 社内プロダクトから使われるツール 機能も多くないのでコード量が少ない
  20. X @kotomin_m #phpconkagawa プロダクト コード量 歴 テストコード   ライオン 大 8年

    ある   おさる 中 6年 ほぼ無い   ペンギン 中 5年 ある   リス 小 7年 ある 4つのプロダクト 概要
  21. X @kotomin_m #phpconkagawa PHP Laravel   ライオン 7.0 5.4   おさる 7.1

    5.6   ペンギン 7.1 5.6   リス 7.1→7.2(移行中) 5.7 開始時点のバージョンは?
  22. X @kotomin_m #phpconkagawa 各チームとの連携方法 • 週次のMTG ◦ SRE+インフラ+ = 20分

    ◦ SRE+インフラ+ = 40分 • 各プロダクト/各バージョンごとにSlackスレッド を立てる
  23. X @kotomin_m #phpconkagawa ツールの選定 使えるツールなどを調べる 1. Rector:無料 ◦ 自動で変更差分を修正してくれる 2.

    Laravel Shift:有料 ◦ プルリクを自動で作成してくれる 3. Laravel Human Shifts:有料 ◦ 人力版のLaravel Shift、外注でバージョンアップ
  24. X @kotomin_m #phpconkagawa どれが一番多く障害発生したか? プロダクト コード量 歴 テストコード   ライオン 大

    8年 ある   おさる 中 6年 ほぼ無い   ペンギン 中 5年 ある   リス 小 7年 ある
  25. X @kotomin_m #phpconkagawa プロダクト コード量 歴 テストコード   ライオン 大 8年

    ある   おさる 中 6年 ほぼ無い   ペンギン 中 5年 ある   リス 小 7年 ある どれが一番多く障害発生したか?
  26. X @kotomin_m #phpconkagawa プロダクト コード量 歴 テストコード   おさる 中 6年

    ほぼ無い   ペンギン 中 5年 ある おさるでいっぱい障害発生 一方で、大体同じコード量・大体同じ歴のペンギンの バージョンアップはそこまで苦戦していない、なぜ?
  27. ①テストコードがあるか無いか ②静的解析が継続運用されているか コード 量 歴 テスト コード 静的解析   おさる 中

    6年 ほぼ無い NO運用の 時期あり   ペンギン 中 5年 ある 継続運用 おさる・ペンギンの違い
  28. X @kotomin_m #phpconkagawa おさる・ペンギンの違い ②静的解析が継続運用されているか ペンギン:ある • プロダクト構築初期から導入 • PHPStan,

    PHPCS, PHPMD の3種類 • 必ずCIで実行・エラーは修正されていた 私自身、1年目実装しているときは「静的解析わ からない」だったけど、CIで落ちているエラーを 一生懸命調べて修正・リリースしていた
  29. X @kotomin_m #phpconkagawa おさる・ペンギンの違い ②静的解析が継続運用されているか ペンギン:ある • プロダクト構築初期から導入 • PHPStan,

    PHPCS, PHPMD の3種類 • 必ずCIで実行・エラーは修正されていた 私自身、1年目実装しているときは「静的解析わ からない」だったけど、CIで落ちているエラーを 一生懸命調べて修正・リリースしていた CIで実行されていたおかげで、静的解析わか らない新人がプロダクトコードを書いてても 一定の品質は担保出来ていた
  30. コード量 おさる・ライオンも比較 テストコード 障害件数 小 大 有 無 少 多

    コード量 テストコード 障害件数 小 大 有 無 少 多
  31. コード量 おさる・ライオンも比較 テストコード 障害件数 小 大 有 無 少 多

    コード量 テストコード 障害件数 小 大 有 無 少 多
  32. X @kotomin_m #phpconkagawa どんなプロダクトが バージョンアップ大変か? • テストコードが無い • 静的解析が無いので品質があまり良くない →

    バージョンアップしたら障害起きるかも…って思っ ていたら「やろう!」ってなりにくい🥺
  33. X @kotomin_m #phpconkagawa どんなプロダクトが バージョンアップしやすいか? • テストコードが網羅的にある • 静的解析を運用して品質が担保されたコードである →

    テストコードがあるので安心してバージョンアップできる! → 品質が担保されていれば、バージョンアップも苦戦しない!
  34. X @kotomin_m #phpconkagawa Composerとのお付き合い これまでは、 • composer install はしている •

    composer require は前に手取り足取り教えても らってやったことがある • dependabot のPRをマージしたことがある ぐらいの関わりだった
  35. X @kotomin_m #phpconkagawa Composerとのお付き合い なので最初、composer require にめっちゃ苦戦した composer require -W

    hoge/fuga:^x.x とか打ってみる ※ -W:いい感じに他のライブラリもなるべく最新に アップデートするオプション
  36. Composerとのお付き合い Your requirements could not be resolved to an installable

    set of packages. Problem 1 - Root composer.json requires laravel/framework 5.8.*, found laravel/framework[v5.8.0, ..., 5.8.x-dev] but these were not loaded, likely because it conflicts with another require. Problem 2 // 中略 Problem 6 not loaded, likely because it conflicts with another require.
  37. Composerとのお付き合い Your requirements could not be resolved to an installable

    set of packages. Problem 1 - Root composer.json requires laravel/framework 5.8.*, found laravel/framework[v5.8.0, ..., 5.8.x-dev] but these were not loaded, likely because it conflicts with another require. Problem 2 // 中略 Problem 6 not loaded, likely because it conflicts with another require. 「このライブラリのこのバージョンが競合し ているからインストール出来なかったよ」
  38. X @kotomin_m #phpconkagawa Composerとのお付き合い 複数ライブラリをまとめてアップデートする $ composer require -W phpunit/phpunit:^8.0

    mpdf/mpdf:8.2.3 composer/composer:2.7.2 barryvdh/laravel-ide-helper:^2.9 phpmd/phpmd:2.12.0 とか打ってみる
  39. Composerとのお付き合い - Root composer.json requires laravel/framework ^6.0, found laravel/framework[v6.0.0, ...,

    6.x-dev] but these were not loaded, likely because it conflicts with another require.
  40. Composerとのお付き合い - Root composer.json requires laravel/framework ^6.0, found laravel/framework[v6.0.0, ...,

    6.x-dev] but these were not loaded, likely because it conflicts with another require. 「Laravelのバージョンが競合してなんか無理」
  41. Composerとのお付き合い $ composer require -W phpunit/phpunit:^8.0 mpdf/mpdf:8.2.3 composer/composer:2.7.2 barryvdh/laravel-ide-helper:^2.9 phpmd/phpmd:2.12.0

    $ composer require -W phpunit/phpunit:^8.0 $ composer require -W mpdf/mpdf:8.2.3 $ composer require -W composer/composer:2.7.2 $ composer require -W barryvdh/laravel-ide-helper:^2.9 $ composer require -W phpmd/phpmd:2.12.0
  42. Composerとのお付き合い $ composer require -W phpunit/phpunit:^8.0 mpdf/mpdf:8.2.3 composer/composer:2.7.2 barryvdh/laravel-ide-helper:^2.9 phpmd/phpmd:2.12.0

    $ composer require -W phpunit/phpunit:^8.0 $ composer require -W mpdf/mpdf:8.2.3 $ composer require -W composer/composer:2.7.2 $ composer require -W barryvdh/laravel-ide-helper:^2.9 $ composer require -W phpmd/phpmd:2.12.0 これを実行したときだけ さっきのエラーになることを発見