Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

リアーキテクチャ系 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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

リファクタリング系 その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

Slide 14

Slide 14 text

リファクタリング系 その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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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