Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
売上と開発環境を同時に改善するためにPerl Webアプリケーションをどのようにリプレイスするか
Search
Masashi-Sutou
March 19, 2023
Technology
0
1k
売上と開発環境を同時に改善するためにPerl Webアプリケーションをどのようにリプレイスするか
YAPC::Kyoto 2023 try/catch on 2023/3/19
Masashi-Sutou
March 19, 2023
Tweet
Share
More Decks by Masashi-Sutou
See All by Masashi-Sutou
今年やったこと_20年以上続くWebサービスのリプレイス_書いたコード_私がモダンかもと思うPerl
masashi_sutou
0
1.5k
リッチなポップアップ画面にはshowGeneralDialogが便利だった
masashi_sutou
4
3.4k
iOSでグラフを描くために必要な知識
masashi_sutou
5
3.1k
UITableViewControllerの利点を最大限に活かす使い方 - コードでAutoLayoutを記述する場合 -
masashi_sutou
3
3.1k
制約の優先度 - UITableViewCellのレイアウトを例に考える
masashi_sutou
0
970
「文化を調和させる」 をやってみる Try “Blending Culture”
masashi_sutou
3
470
初めてのiOSアプリ開発 ースマホアプリ開発未経験のSEが1人でiOSアプリを開発するまでー
masashi_sutou
0
380
GitHubで社内学習環境を作る!!
masashi_sutou
2
2.7k
Git, GitHubのチュートリアル
masashi_sutou
0
1.1k
Other Decks in Technology
See All in Technology
ドメインの本質を掴む / Get the essence of the domain
sinsoku
2
140
第23回Ques_タイミーにおけるQAチームの在り方 / QA Team in Timee
takeyaqa
0
270
Oracle Cloud Infrastructureデータベース・クラウド:各バージョンのサポート期間
oracle4engineer
PRO
28
12k
利きプロセススケジューラ
sat
PRO
5
2.7k
信頼性に挑む中で拡張できる・得られる1人のスキルセットとは?
ken5scal
2
470
Terraform CI/CD パイプラインにおける AWS CodeCommit の代替手段
hiyanger
1
190
マルチモーダル / AI Agent / LLMOps 3つの技術トレンドで理解するLLMの今後の展望
hirosatogamo
29
7.7k
組み込みLinuxの時系列
puhitaku
4
1.1k
Microsoft MVPになる前、なってから/Fukuoka_Tech_Women_Community_1_baba
nina01
0
180
メールサーバ管理者のみ知る話
hinono
1
110
TypeScript、上達の瞬間
sadnessojisan
37
9.7k
これまでの計測・開発・デプロイ方法全部見せます! / Findy ISUCON 2024-11-14
tohutohu
3
340
Featured
See All Featured
ReactJS: Keep Simple. Everything can be a component!
pedronauck
665
120k
Practical Orchestrator
shlominoach
186
10k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
6.9k
Code Review Best Practice
trishagee
64
17k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
191
16k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
169
50k
A designer walks into a library…
pauljervisheath
202
24k
Fashionably flexible responsive web design (full day workshop)
malarkey
405
65k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.1k
Optimizing for Happiness
mojombo
376
70k
Faster Mobile Websites
deanohume
305
30k
Side Projects
sachag
452
42k
Transcript
売上と開発環境を 同時に改善するために Perl Webアプリケーションを どのようにリプレイスするか YAPC::Kyoto 2023 try/catch on 2023/3/19
1 1
自己紹介 須藤将史(masashi-sutou) @kurotyann9696 に20年入社、22年5月から取締役CTO Perl歴は約1年、以前はモバイルアプリの開発担当 先月、第一子が産まれたのでオンラインでYAPC初参加 バーチャル リアル 2 2
会社と事業の紹介 SNS/マッチング/ライブ配信の を運営 YYCは2000年開始で当初はライブドアやLINEが運営 現在は親会社から22年5月に独立して新たなスタート エンジニアは6名と業務委託5名の11名(会社は40名ほど) 3 3
Web/iOS/Androidでサービスを展開 iOSとAndroidはFlutterで開発 インフラはAWSで構築してTerraformで管理 今日はWebとServerをどのようにリプレイスしてるか話す 4 4
段階的なリプレイスを実施中 5 5
リプレイスの背景とYYCに求められること 成長の余地がまだあると経営判断している 施策検証や機能追加を速度を落とさず継続したい 開発の速度や手段の妨げになる負債を減らしたい 6 6
要は、売上と開発環境を同時に改善したい 7 7
どのような手段がありえるのか 2022年4月に検討を開始した 8 8
4月時点のCTO(自分)の状況と考え Perlは未経験でした CTO就任前は別事業の担当でYYCの理解が不十分な状態 そこで2つの調査から開始 1. 他社のPerlの改善事例を調べる 2. YYCのWebとServerの技術課題を調べる 9 9
事例の分類 1. リアーキテクチャ系 アーキテクチャの構成を改善する事例 2. リプレイス系 構成だけでなく別言語に移行する事例 3. リファクタリング系 仕様や振る舞いをあまり変えずに改善する事例
10 10
リアーキテクチャ系 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
リプレイス系 LINEポイントクラブ 8年続くPerlプロダクトをKotlinに書き換えた話 https://linedevday.linecorp.com/2021/ja/sessions/157/ https://logmi.jp/tech/articles/326685 12 12
リファクタリング系 その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
リファクタリング系 その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
YYCのWebとServerの技術課題 Perl/フレームワーク/ミドルウェアの多くがEOL WebとServerが密結合でAPI駆動で開発しづらい 静的解析のサポートが無くレビューコストが高い cpanfileがなくモジュールの追加や更新が面倒 一部のテストが動作していない 15 15
Perlは技術課題なのか Perlは年々、開発者や手段(SDKなど)が減っているの は事実で課題ではある しかし、言語を課題にするとPerlをゼロに近づけないと 課題が解決しないことになる まずPerlで解決が難しい課題を見つけてから、その後に 手段を考えることにした 16 16
調査結果から段階的なリプレイスへ 似た課題を持つ他社は数年かけて改善、苦労してる リアーキテクチャや別言語の移行は成果がいつ得られる か予想が難しかった Perlの後方互換性を活かせば使えるコードを残して検証 や後戻りがしやすい 計画中の施策を止め、チームを改善に集中させる仕組み が整ってなかった 17 17
モダンなPerlで新環境(v2)を用意して 段階的に新環境へリプレイスできる 仕組みをCTO室がつくることにした 18 18
Strangler (Fig) Applications 新しいコードで古いコードを包んで徐々に新しいコード に置き換える手法 ロードバランサ(ALB)で画面パスごとに段階的に画面 や機能をリプレイス YYCではDBへの副作用がない、データの参照しかない画 面からリプレイスを試みました https://martinfowler.com/bliki/StranglerFigApplication.html
19 19
新しいコードで古いコードを包む 20 20
古いコード(v1) ≒ O/Rマッパーは活かす 21 21
ロードバランサ(ALB)で段階的にリプレイス https://paulhammant.com/2013/07/14/legacy-application- strangulation-case-studies/ 22 22
DBは共通でリプレイスしない 23 23
DBは共通でリプレイスしない 24 24
ゴールは全コードのリプレイスではない リプレイスを理由にビジネスは止められない v1のリファクタリングで改善できる課題もある リプレイスは将来の課題解決の手段を増やすため v1とv2の両方でプロダクトに何が必要で不要か見極める 25 25
現状のv1とv2 - ソフト面 26 26
git-of-theseus - 2012年 ~ 現在 27 27
1年以内のコードが大きく変化 28 28
コードの新陳代謝や減価償却 v1は2012年のコードが10年で半分になる速度で減少 去年は直近2年分のコードの割合が大きく変化 新機能の追加、不要コードや不要機能の廃止 去年のコードが全体の2割ほどまで増加した 価値あるコードとそうでないコードの整理が課題 29 29
最後に サービスの施策と運営を止めずに開発環境を改善したい リプレイスは新環境で段階的に後戻り出来る構成にした 今後の課題は... v1の不要なコードや機能をどう効率よく消すか v1とv2の認知負荷を抑えてどうアウトプットを出すか みなさんならどんな手を打ちますか? 30 30
続きはカジュアル面談で! 31 31