YAPC::Kyoto 2023 try/catch on 2023/3/19
売上と開発環境を同時に改善するためにPerl WebアプリケーションをどのようにリプレイスするかYAPC::Kyoto 2023 try/catch on 2023/3/1911
View Slide
自己紹介須藤将史(masashi-sutou) @kurotyann9696に20年入社、22年5月から取締役CTOPerl歴は約1年、以前はモバイルアプリの開発担当先月、第一子が産まれたのでオンラインでYAPC初参加バーチャル リアル22
会社と事業の紹介SNS/マッチング/ライブ配信の を運営YYCは2000年開始で当初はライブドアやLINEが運営現在は親会社から22年5月に独立して新たなスタートエンジニアは6名と業務委託5名の11名(会社は40名ほど)33
Web/iOS/Androidでサービスを展開iOSとAndroidはFlutterで開発インフラはAWSで構築してTerraformで管理今日はWebとServerをどのようにリプレイスしてるか話す44
段階的なリプレイスを実施中55
リプレイスの背景とYYCに求められること成長の余地がまだあると経営判断している施策検証や機能追加を速度を落とさず継続したい開発の速度や手段の妨げになる負債を減らしたい66
要は、売上と開発環境を同時に改善したい77
どのような手段がありえるのか2022年4月に検討を開始した88
4月時点のCTO(自分)の状況と考えPerlは未経験でしたCTO就任前は別事業の担当でYYCの理解が不十分な状態そこで2つの調査から開始1. 他社のPerlの改善事例を調べる2. YYCのWebとServerの技術課題を調べる99
事例の分類1. リアーキテクチャ系アーキテクチャの構成を改善する事例2. リプレイス系構成だけでなく別言語に移行する事例3. リファクタリング系仕様や振る舞いをあまり変えずに改善する事例1010
リアーキテクチャ系livedoor Blog本当にあったレガシーな話 YAPC::Asia Tokyo 2013http://yapcasia.org/2013/talk/show/b262abd0-c77c-11e2-be2e-7ec06aeab6a4未だ現役なPerl5.8 & MySQL4.0とどう戦うか?LINE DEVELOPER DAY 2019https://logmi.jp/tech/articles/3222361111
リプレイス系LINEポイントクラブ8年続くPerlプロダクトをKotlinに書き換えた話https://linedevday.linecorp.com/2021/ja/sessions/157/https://logmi.jp/tech/articles/3266851212
リファクタリング系 その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/1730001313
リファクタリング系 その2ECナビ - CARTA HOLDINGS (元VOYAGE GROUP)動的解析を利用し、実働6日でレガシーコードを1/3削った話(Perl編)https://techblog.cartaholdings.co.jp/entry/2020/05/07/120000『事業をエンジニアリングする技術者たち − フルサイクル開発者がつくるCARTAの現場』ラムダノート 2022/8/8これを知ったのが今年(自分の調査が甘かった )1414
YYCのWebとServerの技術課題Perl/フレームワーク/ミドルウェアの多くがEOLWebとServerが密結合でAPI駆動で開発しづらい静的解析のサポートが無くレビューコストが高いcpanfileがなくモジュールの追加や更新が面倒一部のテストが動作していない1515
Perlは技術課題なのかPerlは年々、開発者や手段(SDKなど)が減っているのは事実で課題ではあるしかし、言語を課題にするとPerlをゼロに近づけないと課題が解決しないことになるまずPerlで解決が難しい課題を見つけてから、その後に手段を考えることにした1616
調査結果から段階的なリプレイスへ似た課題を持つ他社は数年かけて改善、苦労してるリアーキテクチャや別言語の移行は成果がいつ得られるか予想が難しかったPerlの後方互換性を活かせば使えるコードを残して検証や後戻りがしやすい計画中の施策を止め、チームを改善に集中させる仕組みが整ってなかった1717
モダンなPerlで新環境(v2)を用意して段階的に新環境へリプレイスできる仕組みをCTO室がつくることにした1818
Strangler (Fig) Applications新しいコードで古いコードを包んで徐々に新しいコードに置き換える手法ロードバランサ(ALB)で画面パスごとに段階的に画面や機能をリプレイスYYCではDBへの副作用がない、データの参照しかない画面からリプレイスを試みましたhttps://martinfowler.com/bliki/StranglerFigApplication.html1919
新しいコードで古いコードを包む2020
古いコード(v1) ≒ O/Rマッパーは活かす2121
ロードバランサ(ALB)で段階的にリプレイスhttps://paulhammant.com/2013/07/14/legacy-application-strangulation-case-studies/ 2222
DBは共通でリプレイスしない2323
DBは共通でリプレイスしない2424
ゴールは全コードのリプレイスではないリプレイスを理由にビジネスは止められないv1のリファクタリングで改善できる課題もあるリプレイスは将来の課題解決の手段を増やすためv1とv2の両方でプロダクトに何が必要で不要か見極める2525
現状のv1とv2 - ソフト面2626
git-of-theseus - 2012年 ~ 現在2727
1年以内のコードが大きく変化2828
コードの新陳代謝や減価償却v1は2012年のコードが10年で半分になる速度で減少去年は直近2年分のコードの割合が大きく変化新機能の追加、不要コードや不要機能の廃止去年のコードが全体の2割ほどまで増加した価値あるコードとそうでないコードの整理が課題2929
最後にサービスの施策と運営を止めずに開発環境を改善したいリプレイスは新環境で段階的に後戻り出来る構成にした今後の課題は...v1の不要なコードや機能をどう効率よく消すかv1とv2の認知負荷を抑えてどうアウトプットを出すかみなさんならどんな手を打ちますか?3030
続きはカジュアル面談で!3131