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

売上と開発環境を同時に改善するためにPerl Webアプリケーションをどのようにリプレイスするか

売上と開発環境を同時に改善するためにPerl Webアプリケーションをどのようにリプレイスするか

YAPC::Kyoto 2023 try/catch on 2023/3/19

Masashi-Sutou

March 19, 2023
Tweet

More Decks by Masashi-Sutou

Other Decks in Technology

Transcript

  1. 売上と開発環境を
    同時に改善するために
    Perl Webアプリケーションを
    どのようにリプレイスするか
    YAPC::Kyoto 2023 try/catch on 2023/3/19
    1
    1

    View Slide

  2. 自己紹介
    須藤将史(masashi-sutou) @kurotyann9696
    に20年入社、22年5月から取締役CTO
    Perl歴は約1年、以前はモバイルアプリの開発担当
    先月、第一子が産まれたのでオンラインでYAPC初参加
    バーチャル リアル
    2
    2

    View Slide

  3. 会社と事業の紹介
    SNS/マッチング/ライブ配信の を運営
    YYCは2000年開始で当初はライブドアやLINEが運営
    現在は親会社から22年5月に独立して新たなスタート
    エンジニアは6名と業務委託5名の11名(会社は40名ほど)
    3
    3

    View Slide

  4. Web/iOS/Androidでサービスを展開
    iOSとAndroidはFlutterで開発
    インフラはAWSで構築してTerraformで管理
    今日はWebとServerをどのようにリプレイスしてるか話す
    4
    4

    View Slide

  5. 段階的なリプレイスを実施中
    5
    5

    View Slide

  6. リプレイスの背景とYYCに求められること
    成長の余地がまだあると経営判断している
    施策検証や機能追加を速度を落とさず継続したい
    開発の速度や手段の妨げになる負債を減らしたい
    6
    6

    View Slide

  7. 要は、売上と開発環境を同時に改善したい
    7
    7

    View Slide

  8. どのような手段がありえるのか
    2022年4月に検討を開始した
    8
    8

    View Slide

  9. 4月時点のCTO(自分)の状況と考え
    Perlは未経験でした
    CTO就任前は別事業の担当でYYCの理解が不十分な状態
    そこで2つの調査から開始
    1. 他社のPerlの改善事例を調べる
    2. YYCのWebとServerの技術課題を調べる
    9
    9

    View Slide

  10. 事例の分類
    1. リアーキテクチャ系
    アーキテクチャの構成を改善する事例
    2. リプレイス系
    構成だけでなく別言語に移行する事例
    3. リファクタリング系
    仕様や振る舞いをあまり変えずに改善する事例
    10
    10

    View Slide

  11. リアーキテクチャ系
    livedoor Blog
    本当にあったレガシーな話 YAPC::Asia Tokyo 2013
    http://yapcasia.org/2013/talk/show/b262abd0-c77c-11e2-be2e-
    7ec06aeab6a4
    未だ現役なPerl5.8 & MySQL4.0とどう戦うか?
    LINE DEVELOPER DAY 2019
    https://logmi.jp/tech/articles/322236
    11
    11

    View Slide

  12. リプレイス系
    LINEポイントクラブ
    8年続くPerlプロダクトをKotlinに書き換えた話
    https://linedevday.linecorp.com/2021/ja/sessions/157/
    https://logmi.jp/tech/articles/326685
    12
    12

    View Slide

  13. リファクタリング系 その1
    ぼくらの甲子園!ポケット - 面白法人カヤック
    6年続いているサービスのPerlのバージョンを5.16か
    ら5.30へと今にもアップデートさせようとしている
    https://techblog.kayac.com/koshien-pocket-perl-5.16-to-5.30
    はてなブログ
    はてなブログPerl 5.28.1化への道
    https://developer.hatenastaff.com/entry/2018/12/22/173000
    13
    13

    View Slide

  14. リファクタリング系 その2
    ECナビ - CARTA HOLDINGS (元VOYAGE GROUP)
    動的解析を利用し、実働6日でレガシーコードを1/3削
    った話(Perl編)
    https://techblog.cartaholdings.co.jp/entry/2020/05/07/120000
    『事業をエンジニアリングする技術者たち − フルサイクル開発者がつ
    くるCARTAの現場』ラムダノート 2022/8/8
    これを知ったのが今年(自分の調査が甘かった )
    14
    14

    View Slide

  15. YYCのWebとServerの技術課題
    Perl/フレームワーク/ミドルウェアの多くがEOL
    WebとServerが密結合でAPI駆動で開発しづらい
    静的解析のサポートが無くレビューコストが高い
    cpanfileがなくモジュールの追加や更新が面倒
    一部のテストが動作していない
    15
    15

    View Slide

  16. Perlは技術課題なのか
    Perlは年々、開発者や手段(SDKなど)が減っているの
    は事実で課題ではある
    しかし、言語を課題にするとPerlをゼロに近づけないと
    課題が解決しないことになる
    まずPerlで解決が難しい課題を見つけてから、その後に
    手段を考えることにした
    16
    16

    View Slide

  17. 調査結果から段階的なリプレイスへ
    似た課題を持つ他社は数年かけて改善、苦労してる
    リアーキテクチャや別言語の移行は成果がいつ得られる
    か予想が難しかった
    Perlの後方互換性を活かせば使えるコードを残して検証
    や後戻りがしやすい
    計画中の施策を止め、チームを改善に集中させる仕組み
    が整ってなかった
    17
    17

    View Slide

  18. モダンなPerlで新環境(v2)を用意して
    段階的に新環境へリプレイスできる
    仕組みをCTO室がつくることにした
    18
    18

    View Slide

  19. Strangler (Fig) Applications
    新しいコードで古いコードを包んで徐々に新しいコード
    に置き換える手法
    ロードバランサ(ALB)で画面パスごとに段階的に画面
    や機能をリプレイス
    YYCではDBへの副作用がない、データの参照しかない画
    面からリプレイスを試みました
    https://martinfowler.com/bliki/StranglerFigApplication.html
    19
    19

    View Slide

  20. 新しいコードで古いコードを包む
    20
    20

    View Slide

  21. 古いコード(v1) ≒ O/Rマッパーは活かす
    21
    21

    View Slide

  22. ロードバランサ(ALB)で段階的にリプレイス
    https://paulhammant.com/2013/07/14/legacy-application-
    strangulation-case-studies/ 22
    22

    View Slide

  23. DBは共通でリプレイスしない
    23
    23

    View Slide

  24. DBは共通でリプレイスしない
    24
    24

    View Slide

  25. ゴールは全コードのリプレイスではない
    リプレイスを理由にビジネスは止められない
    v1のリファクタリングで改善できる課題もある
    リプレイスは将来の課題解決の手段を増やすため
    v1とv2の両方でプロダクトに何が必要で不要か見極める
    25
    25

    View Slide

  26. 現状のv1とv2 - ソフト面
    26
    26

    View Slide

  27. git-of-theseus - 2012年 ~ 現在
    27
    27

    View Slide

  28. 1年以内のコードが大きく変化
    28
    28

    View Slide

  29. コードの新陳代謝や減価償却
    v1は2012年のコードが10年で半分になる速度で減少
    去年は直近2年分のコードの割合が大きく変化
    新機能の追加、不要コードや不要機能の廃止
    去年のコードが全体の2割ほどまで増加した
    価値あるコードとそうでないコードの整理が課題
    29
    29

    View Slide

  30. 最後に
    サービスの施策と運営を止めずに開発環境を改善したい
    リプレイスは新環境で段階的に後戻り出来る構成にした
    今後の課題は...
    v1の不要なコードや機能をどう効率よく消すか
    v1とv2の認知負荷を抑えてどうアウトプットを出すか
    みなさんならどんな手を打ちますか?
    30
    30

    View Slide

  31. 続きはカジュアル面談で!
    31
    31

    View Slide