$30 off During Our Annual Pro Sale. View Details »

月に一度の大規模リファクタリングでレガシーコードと向き合う取り組み / PHP Conference Fukuoka 2023

meihei
June 24, 2023

月に一度の大規模リファクタリングでレガシーコードと向き合う取り組み / PHP Conference Fukuoka 2023

meihei

June 24, 2023
Tweet

More Decks by meihei

Other Decks in Programming

Transcript

  1. 月に一度の大規模リファクタリングで
    レガシーコードと向き合う取り組み
    PHPカンファレンス福岡2023

    View Slide

  2. meihei / 江間 洋平 株式会社PR TIMES
    Backend Engineer (PHP/Python/Go)
    Twitter: @app1e_s
    GitHub: @meihei3
    Bluesky: @meihei.bsky.social
    最近はヘブバンにハマり中。
    VTuberもハマってます。最近のニュースでは、
    ぶいぱいが熱い!!アップランドから6月16日に新
    自己紹介
    2

    View Slide

  3. 毎月一度、
    3

    View Slide

  4. 毎月一度、
    大規模なリファクタリングを
    4

    View Slide

  5. 毎月一度、
    大規模なリファクタリングを
    行う日(デー)
    5

    View Slide

  6. リファクタリングデー
    6

    View Slide

  7. リファクタリングデー
    外から見た挙動を変えずに、コードを変更すること。
    7

    View Slide

  8. リファクタリングデー
    外から見た挙動を変えずに、コードを変更すること。
    → 設計や手法については話しません
    8

    View Slide

  9. 背景
    9

    View Slide

  10. PR TIMESというサービス
    10

    View Slide

  11. いくつかの機能があり
    11

    View Slide

  12. 旧基盤・新基盤がある
    12

    View Slide

  13. 現在進行系でリプレイスしている
    13

    View Slide

  14. 旧基盤の方はレガシーコード
    14

    View Slide

  15. リプレイスだけすれば良いのか?
    15

    View Slide

  16. リプレイスだけすれば良いのか?
    全てのリプレイスが完了する前に
    リファクタリングを行う必要が出てくる
    16

    View Slide

  17. 旧基盤の方はレガシーコード
    17

    View Slide

  18. リファクタリングが困難
    No Tests
    Array
    Array
    Array
    Array
    Amazing Array
    Let sleeping dogs lie.
    18

    View Slide

  19. もうウンザリです、何も改善できません
    19

    View Slide

  20. でも、出来ます。
    20

    View Slide

  21. リファクタリング
    外から見た挙動を変えずに、コードを変更すること。
    21

    View Slide

  22. 挙動が変わっていない事を保証する
    22

    View Slide

  23. 挙動が変わっていない事を保証する
    23
    サービス全体に対して、結合テストや
    QAを行って、動作を保証する。

    View Slide

  24. 非常に荒々しいやり方で
    無理矢理にでも前に進める
    24

    View Slide

  25. 非常に荒々しいやり方で
    無理矢理にでも前に進める
    25
    1日かけてリファクタリング&確認作業を行うので
    名前を付けたものがリファクタリングデーになります。

    View Slide

  26. 手順
    26

    View Slide

  27. 当日までの流れ
    ● チケットの起票
    ● チケットの精査
    ● (初参加者向けオンボーディング)
    27

    View Slide

  28. 当日までの流れ
    ● チケットの起票
    ● チケットの精査 ←もっとも重要
    ● (初参加者向けオンボーディング)
    28

    View Slide

  29. チケットの精査では戦略を立てる
    ● 影響範囲の大きいチケットは、リリースブランチの
    中で Revert し易いところにマージする
    ● 影響範囲の大きいが優先度の低い場合は、今回は
    リリースしないという選択も可能
    ○ 毎月行うので次月に回す
    29

    View Slide

  30. チケットの精査では戦略を立てる
    ● 影響範囲の大きいチケットは、リリースブランチの
    中で Revert し易いところにマージする
    ● 影響範囲の大きいが優先度の低い場合は、今回は
    リリースしないという選択も可能
    ○ 毎月行うので次月に回す
    30
    →何をやるか、やらないかを決める

    View Slide

  31. 31

    View Slide

  32. 当日の流れ
    ● ブランチの作成     → ~10:00
    ● わいわい開発・レビュー → 10:00~
    ● STG環境で確認     → 14:00~
    ● デプロイ        → 16:00~
    ● 本番確認        → ~18:00
    32

    View Slide

  33. 当日の流れ
    ● ブランチの作成
    ● わいわい開発・レビュー
    ● STG環境で確認 ←重要
    ● デプロイ
    ● 本番確認 ←重要
    33

    View Slide

  34. 確認作業
    ● 手動テスト
    ● テスト自動化ツール(Autifyなど)
    ● E2Eテスト
    34

    View Slide

  35. 確認作業
    ● 手動テスト
    ● テスト自動化ツール(Autifyなど)
    ● E2Eテスト
    35
    ←これが理想形だが、
    レガシーコードでは厳しい
    場合がある。手を動かす。

    View Slide

  36. 失敗するときはします。
    36

    View Slide

  37. でも、出来ます。
    37
    リファクタリングが困難
    と言いました

    View Slide

  38. でも、出来ます。
    38
    リファクタリングが困難
       やります。

    View Slide

  39. ● 失敗を恐れ、リリースできない空気は壊す
    ● 失敗した時にすぐに切り戻しが出来るようにする
    ● 優先度の高いものをリリースして、
    リファクタリングデーが意味のあるものにする
    ● QAの負担を減らす自動テスト、自動ツールなどを充
    実させる
    リファクタリングデーを行うために
    39

    View Slide

  40. ● 失敗を恐れ、リリースできない空気は壊す
    ● 失敗した時にすぐに切り戻しが出来るようにする
    ● 優先度の高いものをリリースして、
    リファクタリングデーが意味のあるものにする
    ● QAの負担を減らす自動テスト、自動ツールなどを充
    実させる
    リファクタリングデーを行うために
    40
    →失敗出来る環境(仕組み・組織)は超重要。

    View Slide

  41. メリット・デメリット
    41

    View Slide

  42. ● 通常リリースでは出来ないような影響範囲が大きい
    ものを、まとめてリリース出来る
    ● 月一開催なので、リファクタリングチケットを気軽
    に積んで消化出来る
    ○ いつかやろうではなく、この日にやろう。
    ○ フィーチャートグルの削除のタイミングなどで便利
    ● (応用)影響範囲を絞ることで、小チーム単位でも
    行うことが可能
    メリット
    42

    View Slide

  43. ● 通常のリリースよりもQAコストがかなり高い
    ● 開発担当者、QA担当者にかなりのパワーを求められ

    ● ご覧の通り荒業なので、失敗のリスクを受け入れる
    必要がある
    デメリット
    43

    View Slide

  44. それでもレガシーに立ち向かうなら
    荒業でもリファクタリングするしか無い
    44
    俺たちの戦いはここからだ!
    参考ブログ: https://developers.prtimes.jp/2021/12/13/introducing-refactoring-day/

    View Slide