PHPカンファレンス福岡2023(2023/06/24) https://fortee.jp/phpconfukuoka-2023/proposal/c92e8e48-ba20-4a01-9555-b261f20ef493
月に一度の大規模リファクタリングでレガシーコードと向き合う取り組みPHPカンファレンス福岡2023
View Slide
meihei / 江間 洋平 株式会社PR TIMESBackend Engineer (PHP/Python/Go)Twitter: @app1e_sGitHub: @meihei3Bluesky: @meihei.bsky.social最近はヘブバンにハマり中。VTuberもハマってます。最近のニュースでは、ぶいぱいが熱い!!アップランドから6月16日に新自己紹介2
毎月一度、3
毎月一度、大規模なリファクタリングを4
毎月一度、大規模なリファクタリングを行う日(デー)5
リファクタリングデー6
リファクタリングデー外から見た挙動を変えずに、コードを変更すること。7
リファクタリングデー外から見た挙動を変えずに、コードを変更すること。→ 設計や手法については話しません8
背景9
PR TIMESというサービス10
いくつかの機能があり11
旧基盤・新基盤がある12
現在進行系でリプレイスしている13
旧基盤の方はレガシーコード14
リプレイスだけすれば良いのか?15
リプレイスだけすれば良いのか?全てのリプレイスが完了する前にリファクタリングを行う必要が出てくる16
旧基盤の方はレガシーコード17
リファクタリングが困難No TestsArrayArrayArrayArrayAmazing ArrayLet sleeping dogs lie.18
もうウンザリです、何も改善できません19
でも、出来ます。20
リファクタリング外から見た挙動を変えずに、コードを変更すること。21
挙動が変わっていない事を保証する22
挙動が変わっていない事を保証する23サービス全体に対して、結合テストやQAを行って、動作を保証する。
非常に荒々しいやり方で無理矢理にでも前に進める24
非常に荒々しいやり方で無理矢理にでも前に進める251日かけてリファクタリング&確認作業を行うので名前を付けたものがリファクタリングデーになります。
手順26
当日までの流れ● チケットの起票● チケットの精査● (初参加者向けオンボーディング)27
当日までの流れ● チケットの起票● チケットの精査 ←もっとも重要● (初参加者向けオンボーディング)28
チケットの精査では戦略を立てる● 影響範囲の大きいチケットは、リリースブランチの中で Revert し易いところにマージする● 影響範囲の大きいが優先度の低い場合は、今回はリリースしないという選択も可能○ 毎月行うので次月に回す29
チケットの精査では戦略を立てる● 影響範囲の大きいチケットは、リリースブランチの中で Revert し易いところにマージする● 影響範囲の大きいが優先度の低い場合は、今回はリリースしないという選択も可能○ 毎月行うので次月に回す30→何をやるか、やらないかを決める
31
当日の流れ● ブランチの作成 → ~10:00● わいわい開発・レビュー → 10:00~● STG環境で確認 → 14:00~● デプロイ → 16:00~● 本番確認 → ~18:0032
当日の流れ● ブランチの作成● わいわい開発・レビュー● STG環境で確認 ←重要● デプロイ● 本番確認 ←重要33
確認作業● 手動テスト● テスト自動化ツール(Autifyなど)● E2Eテスト34
確認作業● 手動テスト● テスト自動化ツール(Autifyなど)● E2Eテスト35←これが理想形だが、レガシーコードでは厳しい場合がある。手を動かす。
失敗するときはします。36
でも、出来ます。37リファクタリングが困難と言いました
でも、出来ます。38リファクタリングが困難 やります。
● 失敗を恐れ、リリースできない空気は壊す● 失敗した時にすぐに切り戻しが出来るようにする● 優先度の高いものをリリースして、リファクタリングデーが意味のあるものにする● QAの負担を減らす自動テスト、自動ツールなどを充実させるリファクタリングデーを行うために39
● 失敗を恐れ、リリースできない空気は壊す● 失敗した時にすぐに切り戻しが出来るようにする● 優先度の高いものをリリースして、リファクタリングデーが意味のあるものにする● QAの負担を減らす自動テスト、自動ツールなどを充実させるリファクタリングデーを行うために40→失敗出来る環境(仕組み・組織)は超重要。
メリット・デメリット41
● 通常リリースでは出来ないような影響範囲が大きいものを、まとめてリリース出来る● 月一開催なので、リファクタリングチケットを気軽に積んで消化出来る○ いつかやろうではなく、この日にやろう。○ フィーチャートグルの削除のタイミングなどで便利● (応用)影響範囲を絞ることで、小チーム単位でも行うことが可能メリット42
● 通常のリリースよりもQAコストがかなり高い● 開発担当者、QA担当者にかなりのパワーを求められる● ご覧の通り荒業なので、失敗のリスクを受け入れる必要があるデメリット43
それでもレガシーに立ち向かうなら荒業でもリファクタリングするしか無い44俺たちの戦いはここからだ!参考ブログ: https://developers.prtimes.jp/2021/12/13/introducing-refactoring-day/