Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
売上と開発環境を同時に改善するためにPerl Webアプリケーションをどのようにリプレイスするか
Search
Masashi-Sutou
March 19, 2023
Technology
0
1.2k
売上と開発環境を同時に改善するために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.6k
リッチなポップアップ画面にはshowGeneralDialogが便利だった
masashi_sutou
4
3.7k
iOSでグラフを描くために必要な知識
masashi_sutou
5
3.5k
UITableViewControllerの利点を最大限に活かす使い方 - コードでAutoLayoutを記述する場合 -
masashi_sutou
3
3.3k
制約の優先度 - UITableViewCellのレイアウトを例に考える
masashi_sutou
0
1.1k
「文化を調和させる」 をやってみる Try “Blending Culture”
masashi_sutou
3
540
初めてのiOSアプリ開発 ースマホアプリ開発未経験のSEが1人でiOSアプリを開発するまでー
masashi_sutou
0
420
GitHubで社内学習環境を作る!!
masashi_sutou
2
2.8k
Git, GitHubのチュートリアル
masashi_sutou
0
1.3k
Other Decks in Technology
See All in Technology
エンジニアとPMのドメイン知識の溝をなくす、 AIネイティブな開発プロセス
applism118
4
1.3k
生成AI活用の型ハンズオン〜顧客課題起点で設計する7つのステップ
yushin_n
0
190
プロンプトやエージェントを自動的に作る方法
shibuiwilliam
10
8.4k
Kubernetes Multi-tenancy: Principles and Practices for Large Scale Internal Platforms
hhiroshell
0
120
LLM-Readyなデータ基盤を高速に構築するためのアジャイルデータモデリングの実例
kashira
0
250
Gemini でコードレビュー知見を見える化
zozotech
PRO
1
260
RAG/Agent開発のアップデートまとめ
taka0709
0
180
今年のデータ・ML系アップデートと気になるアプデのご紹介
nayuts
1
390
Lookerで実現するセキュアな外部データ提供
zozotech
PRO
0
120
チーリンについて
hirotomotaguchi
6
2k
Lessons from Migrating to OpenSearch: Shard Design, Log Ingestion, and UI Decisions
sansantech
PRO
1
130
Challenging Hardware Contests with Zephyr and Lessons Learned
iotengineer22
0
220
Featured
See All Featured
We Have a Design System, Now What?
morganepeng
54
7.9k
Building Adaptive Systems
keathley
44
2.9k
For a Future-Friendly Web
brad_frost
180
10k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.6k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.1k
The Language of Interfaces
destraynor
162
25k
Code Reviewing Like a Champion
maltzj
527
40k
Imperfection Machines: The Place of Print at Facebook
scottboms
269
13k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Building Applications with DynamoDB
mza
96
6.8k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.7k
The Cost Of JavaScript in 2023
addyosmani
55
9.4k
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