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
14年目のサービスと今後も歩むためのリファクタリング戦略
Search
Masato Nishihara
February 16, 2021
Technology
0
1.7k
14年目のサービスと今後も歩むためのリファクタリング戦略
2021/02/16に開催された「ラクスMeetup [Day1]/PM・リファクタリング戦略」で発表した資料です。
Masato Nishihara
February 16, 2021
Tweet
Share
More Decks by Masato Nishihara
See All by Masato Nishihara
ウォーターフォールとアジャイルと楽楽明細/Waterfall×Agile×Rakurakumeisai
whitefox_73
1
870
リーダブルなPHPDocを目指して / Aiming for a readable PHPDoc
whitefox_73
0
51
正攻法はあるのか!?泥臭く戦ったNode.jsバージョンアップ一部始終
whitefox_73
4
6.1k
Other Decks in Technology
See All in Technology
モノタロウ x クリエーションラインで実現する チームトポロジーにおける プラットフォームチーム・ ストリームアラインドチームの 効果的なコラボレーション
creationline
0
630
Java 25に至る道
skrb
3
190
Qiita Bash アドカレ LT #1
okaru
0
170
歴史から学ぶ、Goのメモリ管理基礎
logica0419
12
2.6k
Cloud WAN MCP Serverから考える新しいネットワーク運用 / 20251228 Masaki Okuda
shift_evolve
PRO
0
140
Master Dataグループ紹介資料
sansan33
PRO
1
4.2k
「駆動」って言葉、なんかカッコイイ_Mitz
comucal
PRO
0
140
Eight Engineering Unit 紹介資料
sansan33
PRO
0
6.2k
ハッカソンから社内プロダクトへ AIエージェント ko☆shi 開発で学んだ4つの重要要素
leveragestech
0
620
AI時代のアジャイルチームを目指して ー スクラムというコンフォートゾーンからの脱却 ー / Toward Agile Teams in the Age of AI
takaking22
11
5.8k
善意の活動は、なぜ続かなくなるのか ーふりかえりが"構造を変える判断"になった半年間ー
matsukurou
0
380
Introduction to Sansan, inc / Sansan Global Development Center, Inc.
sansan33
PRO
0
2.9k
Featured
See All Featured
jQuery: Nuts, Bolts and Bling
dougneiner
65
8.3k
Music & Morning Musume
bryan
46
7k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
1
49
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
230
How to Talk to Developers About Accessibility
jct
1
94
Making the Leap to Tech Lead
cromwellryan
135
9.7k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
130
Writing Fast Ruby
sferik
630
62k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
1
100
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.1k
Faster Mobile Websites
deanohume
310
31k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
2
78
Transcript
#RAKUSMeetup 14年目のサービスと 今後も歩むための リファクタリング戦略 株式会社ラクス 西原 優人
#RAKUSMeetup 自己紹介 経歴 • 2015年に新卒でラクスに入社 • 「Mail Dealer」や「Chat Dealer」の開発を経 て現在は「配配メール」の開発担当
良く触る技術 • PHP • JavaScript • Node.js • PostgreSQL 西原 優人 (masato nishihara) Twitter : whiteFox_73 趣味 • アウトドア フットサル/スノーボード/バイク /ペンギン • インドア 音楽鑑賞/ゲーム/ ペンギン
#RAKUSMeetup 配配メールとは • メールマーケティングに必要な機能を備えたメール配信サービス • マーケティングオートメーションツールを備えたプランもある • 現在サービス開始から14年目
#RAKUSMeetup 長く続くサービスの課題 • 長年続くサービスならでは負債が多くある ◦ 複雑化したコードや書式が古いコード • 手を出したいが躊躇してしまい放置されて月日が過ぎる ◦ 現在動いているコードに手を入れるリスクや直接利益にならない心理的抵抗感
• 秘伝のタレのように継ぎ足されていく過程で負債も日々増加 ◦ 「イケて」ない箇所が増える事で余計に腰が重くなる …
#RAKUSMeetup 課題に向き合うきっかけ チーム状況の変化 • チームメンバーの増加 ◦ 3年間で6名→11名 • 1バージョンでの開発工数増加 ◦
3年間で約11人月→約23人月 コードに手を入れる人や機会が増えた。 課題を放置するとこれまで以上の速度で負債が増加し手が出せなくなる…
#RAKUSMeetup そうだ、リファクタリングしよう。
#RAKUSMeetup リファクタリング対象の選定 • 今後の開発で手を入れる可能性が高い ◦ フロントエンド周辺 • 明確に負債になっている ◦ 開発メンバーの多くが負債と感じるコード
• 将来的にモダンな開発環境を目指す ◦ 今後モダンな開発に移行する可能性を見据える
#RAKUSMeetup リファクタリング対象の決定 PHPコードに組み込まれたJS • PHPとJSが入り乱れて分かりにくい • JSが文字列だからシンタックスハイライトされて いない • 参照先に飛べない
• 最終的なJSのイメージが掴めない 見たくない…
#RAKUSMeetup リファクタリング対象の決定
#RAKUSMeetup リファクタリング対象の決定 見やすくなった
#RAKUSMeetup リファクタリング後に得られる効果 • 可読性の悪いコードが要因となる以下のリスクを低減 ◦ 調査の効率低下 ◦ 実装の効率低下 ◦ レビューでの見落とし
• IDEの機能を利用可能になることで効率UP ◦ シンタックスハイライト ◦ 参照先ジャンプ ◦ その他様々な機能…
#RAKUSMeetup リファクタリング対象の絞込 • 対象が膨大 ◦ 対象となるjsの関数は約2500個以上 ◦ 楽観的に見積もったとしても工数は 50人月以上 •
実施できる量まで絞込 ◦ フロントエンドで最も利用されているファイルの関数に限定 ◦ 220個程度まで絞り込めた
#RAKUSMeetup リファクタリングへの3つの懸念点 • 対象数が多いので、開発工程毎にコストがかかりそう • 工数が大きいので、追加のタスクがあった場合に影響が出そう • 工数のかかるリファクタリングを行う事への不安感
#RAKUSMeetup リファクタリングの工夫(1/3) 懸念点:対象数が多いので、開発工程毎にコストがかかりそう 工夫:リファクタリング対象をパターン分け • パターン毎に対応方針と設計を実施 • パターン毎に工数を見積る(工数 × 対象数)
• オフショアへ発注もパターン毎の設計書とサンプルを提供し引継ぎ → パターン分けしたことで設計の一部や準備のコストをカット
#RAKUSMeetup リファクタリングの工夫(2/3) 懸念点:工数が大きく追加のタスクがあった場合に影響が出そう 工夫:柔軟性の高いタスクとして準備 • 複数バージョンで実施する前提で計画 • 3h~4h程度のタスクに分割 ◦ 緊急度の高いタスクが追加された際は最初に削る候補
◦ オフショアで急な空きリソースが出た際は適時追加発注 → リリースへの影響が少なく、安定する
#RAKUSMeetup リファクタリングの工夫(3/3) 懸念点:工数のかかるリファクタリングを行う事への不安感 工夫:開発チームとビジネスサイドチームに実施イメージを説明 • to開発チーム ◦ 現状のままでは計画通りの開発が困難になる課題感の共有 ◦ リファクタリングのサンプルや複数バージョン先までの計画を用いた実行イメージの共有
• toビジネスサイドチーム ◦ 開発チームの課題を伝え、納得感を持ってもらう ◦ リリースには影響を与えない計画を共有し安心感を持ってもらう → チーム全体で納得感・安心感を得てリファクタリングを実施
#RAKUSMeetup 現在の状態 • リファクタリングを分割した第1弾のリリース直前 ◦ 開発終盤に優先タスクが追加されたがリファクタリングタスクを減らすことで、 無理のない開発が行えた → 工夫2(柔軟性の高いタスク)の効果発揮 •
リファクタリングを分割した第2弾の作業中 ◦ オフショアに空きが出た際に追加で発注し対応 → 工夫1(パターン分け)の効果発揮 → 工夫2(柔軟性の高いタスク)の効果発揮
#RAKUSMeetup 今後の展望 • 現在進行中のリファクタリングを完遂 • 今回絞込で漏れたものや規模の大きなリファクタリングを順次実施 • オフショアチームのスケジュールに余裕が生まれた時の追加依頼ストック • JSを分離したことで、Type
Scriptへのハードルが下がったので導入検討
#RAKUSMeetup まとめ • 長年に渡り手を出せなかったリファクタリングの一歩を踏み出せた • リリースサイクル、チーム状態を意識した工夫で順調に進捗 • 今後のリファクタリングのモデルケースに出来た
#RAKUSMeetup まとめ • 長年に渡り手を出せなかったリファクタリングの一歩を踏み出せた • リリースサイクル、チーム状態を意識した工夫で順調に進捗 • 今後のリファクタリングのモデルケースに出来た そうだ、みんなでリファクタリングしよう