SlideShare a Scribd company logo
Submit Search
Upload
レガシープロダクトを改善していくための戦い方
Report
Share
Takuya Sato
Software Developer
Follow
•
0 likes
•
1,039 views
1
of
22
レガシープロダクトを改善していくための戦い方
•
0 likes
•
1,039 views
Report
Share
Download Now
Download to read offline
Engineering
UUUM System Meetup #2 2019.12.13 https://uuum.connpass.com/event/152000/
Read more
Takuya Sato
Software Developer
Follow
Recommended
開発プロセスの話 by
開発プロセスの話
Makiko Nakasato
494 views
•
11 slides
Test Yourself - テストを書くと何がどう変わるか by
Test Yourself - テストを書くと何がどう変わるか
Takuto Wada
38.3K views
•
49 slides
事業会社のためのプロジェクトマネジメント基礎講座 by
事業会社のためのプロジェクトマネジメント基礎講座
Koyo 松本
2.9K views
•
53 slides
Rspec勉強会 by
Rspec勉強会
gaooh
724 views
•
27 slides
プランニングポーカーのすすめ by
プランニングポーカーのすすめ
sugimoto1022
2K views
•
11 slides
組織にテストを書く文化を根付かせる戦略と戦術 by
組織にテストを書く文化を根付かせる戦略と戦術
Takuto Wada
76.4K views
•
33 slides
More Related Content
Similar to レガシープロダクトを改善していくための戦い方
DevLOVE関西2012 Drive 講演資料(iBook) by
DevLOVE関西2012 Drive 講演資料(iBook)
広告制作会社
1.1K views
•
23 slides
テキストマイニングのイメージと実際 by
テキストマイニングのイメージと実際
antibayesian 俺がS式だ
3.6K views
•
13 slides
鹿駆動 by
鹿駆動
Shinichi Kozake
801 views
•
50 slides
(仮)ややこしい時こそ質問してみる by
(仮)ややこしい時こそ質問してみる
T Takeno
327 views
•
11 slides
実務でGo使い始めました by
実務でGo使い始めました
Yuki Kikuchi
29 views
•
14 slides
Openthology256pub by
Openthology256pub
Keiichi SASAKI
628 views
•
138 slides
Similar to レガシープロダクトを改善していくための戦い方
(20)
DevLOVE関西2012 Drive 講演資料(iBook) by 広告制作会社
DevLOVE関西2012 Drive 講演資料(iBook)
広告制作会社
•
1.1K views
テキストマイニングのイメージと実際 by antibayesian 俺がS式だ
テキストマイニングのイメージと実際
antibayesian 俺がS式だ
•
3.6K views
鹿駆動 by Shinichi Kozake
鹿駆動
Shinichi Kozake
•
801 views
(仮)ややこしい時こそ質問してみる by T Takeno
(仮)ややこしい時こそ質問してみる
T Takeno
•
327 views
実務でGo使い始めました by Yuki Kikuchi
実務でGo使い始めました
Yuki Kikuchi
•
29 views
Openthology256pub by Keiichi SASAKI
Openthology256pub
Keiichi SASAKI
•
628 views
合言葉は…Backlog感出しますか! by 毅 佐藤
合言葉は…Backlog感出しますか!
毅 佐藤
•
661 views
Roo by terahide
Roo
terahide
•
1.2K views
失敗から学ぶ?、教科書には書いてあるけど、現場でしか学べないこと.pdf by Rakuten Commerce Tech (Rakuten Group, Inc.)
失敗から学ぶ?、教科書には書いてあるけど、現場でしか学べないこと.pdf
Rakuten Commerce Tech (Rakuten Group, Inc.)
•
316 views
20160326 第10回 Rad Studio 勉強会@Osaka by Ryo Ohki
20160326 第10回 Rad Studio 勉強会@Osaka
Ryo Ohki
•
1.2K views
20201128 Power Automate by ひかり 影中
20201128 Power Automate
ひかり 影中
•
1.6K views
2012.11.03 #odstudy Excel方眼紙に魂を削られない為のoffice講座 by 真乙 九龍
2012.11.03 #odstudy Excel方眼紙に魂を削られない為のoffice講座
真乙 九龍
•
5.4K views
ごった煮じゃNight!vol.1 by Satoshi Furuichi
ごった煮じゃNight!vol.1
Satoshi Furuichi
•
410 views
Saga Smart Center - Excelで完結!マイクロソフト流データサイエンスの極意 by Daiyu Hatakeyama
Saga Smart Center - Excelで完結!マイクロソフト流データサイエンスの極意
Daiyu Hatakeyama
•
583 views
20180809_機械学習を使った「ビジネスになる」アプリケーションの作り方 by Shunsuke Nakamura
20180809_機械学習を使った「ビジネスになる」アプリケーションの作り方
Shunsuke Nakamura
•
360 views
[JJUG CCC 2018 Spring LT Speech]WEBアプリケーションの性能問題を診断する話 by Nan Zhang
[JJUG CCC 2018 Spring LT Speech]WEBアプリケーションの性能問題を診断する話
Nan Zhang
•
559 views
2015-10-31 クラウドネイティヴ時代の運用を考える 〜 ドキュメント駆動運用へ by Operation Lab, LLC.
2015-10-31 クラウドネイティヴ時代の運用を考える 〜 ドキュメント駆動運用へ
Operation Lab, LLC.
•
4.9K views
今日から始めるアジャイル開発 by Takashi Takebayashi
今日から始めるアジャイル開発
Takashi Takebayashi
•
1.5K views
Agile Japan 大阪サテライト 2017 by Ohta Atsushi
Agile Japan 大阪サテライト 2017
Ohta Atsushi
•
3.2K views
コンソールゲームを世界展開してみた - JAWS DAYS 2015 by Ryo Nakamaru
コンソールゲームを世界展開してみた - JAWS DAYS 2015
Ryo Nakamaru
•
3.9K views
More from Takuya Sato
設計と実装で 抑えておきたい サービスクラスと例外 by
設計と実装で 抑えておきたい サービスクラスと例外
Takuya Sato
31.7K views
•
47 slides
Vue.js入門 by
Vue.js入門
Takuya Sato
17.9K views
•
41 slides
本番環境で使いたいPHP by
本番環境で使いたいPHP
Takuya Sato
3.4K views
•
41 slides
徹底攻略!PHP5.4 by
徹底攻略!PHP5.4
Takuya Sato
5K views
•
96 slides
Silex入門 by
Silex入門
Takuya Sato
7.9K views
•
34 slides
ここがすごい! なぞとPHP5.3 by
ここがすごい! なぞとPHP5.3
Takuya Sato
1.7K views
•
34 slides
More from Takuya Sato
(12)
設計と実装で 抑えておきたい サービスクラスと例外 by Takuya Sato
設計と実装で 抑えておきたい サービスクラスと例外
Takuya Sato
•
31.7K views
Vue.js入門 by Takuya Sato
Vue.js入門
Takuya Sato
•
17.9K views
本番環境で使いたいPHP by Takuya Sato
本番環境で使いたいPHP
Takuya Sato
•
3.4K views
徹底攻略!PHP5.4 by Takuya Sato
徹底攻略!PHP5.4
Takuya Sato
•
5K views
Silex入門 by Takuya Sato
Silex入門
Takuya Sato
•
7.9K views
ここがすごい! なぞとPHP5.3 by Takuya Sato
ここがすごい! なぞとPHP5.3
Takuya Sato
•
1.7K views
2009年のPHPフレームワーク by Takuya Sato
2009年のPHPフレームワーク
Takuya Sato
•
3.1K views
Redmineで始めるチケット駆動開発 by Takuya Sato
Redmineで始めるチケット駆動開発
Takuya Sato
•
7.7K views
フレームワーク使おうぜ! by Takuya Sato
フレームワーク使おうぜ!
Takuya Sato
•
1.9K views
本当は怖いPHP by Takuya Sato
本当は怖いPHP
Takuya Sato
•
2.4K views
PHPとMongoDBで学ぶ次世代データストア by Takuya Sato
PHPとMongoDBで学ぶ次世代データストア
Takuya Sato
•
4.7K views
PHPでセキュリティを真面目に考える by Takuya Sato
PHPでセキュリティを真面目に考える
Takuya Sato
•
34.8K views
Recently uploaded
AIで始めるRustプログラミング #SolDevHub by
AIで始めるRustプログラミング #SolDevHub
K Kinzal
22 views
•
25 slides
onewedge_companyguide1 by
onewedge_companyguide1
ONEWEDGE1
27 views
•
22 slides
JISTA月例会2023年12月 書籍『3カ月で改善!システム障害対応実践ガイド』ご紹介+失敗学と障害対応と私 by
JISTA月例会2023年12月 書籍『3カ月で改善!システム障害対応実践ガイド』ご紹介+失敗学と障害対応と私
修治 松浦
122 views
•
36 slides
SSH超入門 by
SSH超入門
Toru Miyahara
363 views
•
21 slides
システム概要.pdf by
システム概要.pdf
Taira Shimizu
40 views
•
1 slide
図解で理解するvetKD by
図解で理解するvetKD
ryoo toku
86 views
•
22 slides
Recently uploaded
(9)
AIで始めるRustプログラミング #SolDevHub by K Kinzal
AIで始めるRustプログラミング #SolDevHub
K Kinzal
•
22 views
onewedge_companyguide1 by ONEWEDGE1
onewedge_companyguide1
ONEWEDGE1
•
27 views
JISTA月例会2023年12月 書籍『3カ月で改善!システム障害対応実践ガイド』ご紹介+失敗学と障害対応と私 by 修治 松浦
JISTA月例会2023年12月 書籍『3カ月で改善!システム障害対応実践ガイド』ご紹介+失敗学と障害対応と私
修治 松浦
•
122 views
SSH超入門 by Toru Miyahara
SSH超入門
Toru Miyahara
•
363 views
システム概要.pdf by Taira Shimizu
システム概要.pdf
Taira Shimizu
•
40 views
図解で理解するvetKD by ryoo toku
図解で理解するvetKD
ryoo toku
•
86 views
Najah Matsuo Self Introduction by NajahMatsuo
Najah Matsuo Self Introduction
NajahMatsuo
•
7 views
lt.pptx by tomochamarika
lt.pptx
tomochamarika
•
80 views
how query cost affects search behavior translated in JP by Tobioka Ken
how query cost affects search behavior translated in JP
Tobioka Ken
•
9 views
レガシープロダクトを改善していくための戦い方
1.
レガシープロダクトを改善していくための戦い⽅ 佐藤琢哉(nazo)
2.
今回伝えたいこと レガシーコードとの向き合い⽅・⼼構え プロダクト(業務)は必ず前に進めることができる 細かい⽅法はあまり話しません
3.
こんなプロジェクト⾒たことないですか? 突然アサインされたものの… テストが書かれていない テストがほとんど通らない CIがない インフラが⼿作業で作られている その他いろいろカオス 前任者が不在でノードキュメント
4.
もうやだ作り直したい! わかる わかるー超わかるー しかし本当にそれでいいのか?
5.
なぜ作り直してはいけないのか 運⽤が始まっていると2ラインのプロジェクトが⾛る 2ラインでほぼ同じ実装をしないといけないため機能開発が⽌まる そもそも思っているほど簡単じゃない 既存のデータは残さないといけないのでデータの変換などが必要 ビジネス(ロジック)ちゃんと理解してる? 現状で本当に問題あるの?(コード以外の部分)
6.
作り直してもいい場合 まだ運⽤が始まっていない/始まって間もなく、データ量が少ない データ構造が単純で変換が簡単、あるいは変換する必要がない 独⾃フレームワークなど、根幹レベルで⼿がつけられず、今後メンテナンスすることが 不可能に近い状態 それでも部分的に作り直せないかとか検討すべき ⼀通りやることをやって、ビジネス部分は理解できた上で保守に限界を感じた場合
7.
動いているプロジェクトの特性 利⽤者がいる ⽌めることができない 開発が継続している これらを踏まえた上でどうにかする
8.
レガシープロダクトにおける最⼤の課題 悪い状態をこれ以上拡⼤させない なるべく良いほうに少しずつ収束させていく
9.
悪い状態とは何か? コードの秩序がない 読めない テストがない コードの正当性が担保されていない ⾃動化されていない ⼿作業が多くミスの原因になっている
10.
なぜ悪いのか? 既存メンバー以外が⼊ってきた時に把握が難しい 環境を変化させることが難しい システムを変化させることが難しい 事故が起きる可能性が⾼い 今は⼤丈夫でも将来的に ビジネス規模が⼤きくなればなるほど被害が⼤きくなる
11.
悪い状態をこれ以上続けないために CI/CDの整備 Lint導⼊ 環境構築しやすい状態にする テストを書ける体制作り
12.
CI/CDの整備 テスト/Lintを⾃動で⾛らせて品質の確保 デプロイの⾃動化 ⼤体⼿動デプロイだよねこういうの… ⼈間の⼿が⼊るところは事故の元なので、そこを極⼒減らす CI/CDに対応した環境/インフラにする
13.
Lint導⼊ 基本的に後から⼊れるのはハードルが⾼い 全てこけるので ⾃動修正できる場合は⾃動修正してしまう ⾃動修正が完璧でない場合もあるので修正箇所は必ずチェック 特にrubocop 最初は全てスキップするように設定し、少しずつ厳しくしていく
14.
(⾃動)テストを書ける体制作り 元々あるなら使おう 元々あるがFailが多すぎる場合は全部消そう テストの修正は時間の無駄 テストがないプロジェクトの品質が上がることはない テストがないプロジェクトの品質は誰にもわからない、とも⾔う
15.
プロジェクトの途中からテストを書く 無理しない なるべく新規のロジックや、⾃分が修正に関わったところを中⼼に⾏う リファクタリングも並⾏して⾏う コントローラーにロジックベタ書きだったりすると思うので、そういうのを切り出 してテストを⼀緒に書く いわゆるe2eテストのようなものは「とりあえず通しておく」 200が帰ってきたらOKくらい 依存度の低いテストのほうが重要
16.
TestSizesを意識する https://testing.googleblog.com/2010/12/test-sizes.html 定義は⾃分たちで決める Sサイズのテストが多くなるようにする そうすることで⾃然に機能が分離され、良い設計になる
17.
環境構築しやすい状態にする ⼈の⼊れ替えの少ないプロジェクトで新しい⼈が⼊った時に環境構築に失敗する←ある ある 環境構築⽅法が整備されているプロダクトは構造の⾒通しが良い 次⼊ってきた⼈が困らないように Docker化など
18.
データ構造の⾒直し DB設計で事故っていると致命的な問題になることがある 必要なログがない 項⽬の増減ができない イベントの発⽣時刻などがわからない ビジネスの変更についていけない DBを直すのはコードを直すのより⼤変なことが多い
19.
イベントとリソースの分離 特定時刻に何か起こったことはイベントである 例えば「ユーザー」と「ブログ記事」があって、それを投稿するというのは「投稿 する」というイベントであって「ユーザーとブログ記事との関連」というわけでは ない イベントに対する更新は基本的に発⽣しないようにする(イミュータブル) -nullはなるべく許可しない リソースとイベントを明確にすることで業務の流れが明確になる 詳細はぐぐるなりDB設計系の書籍で
20.
インフラ (規模にもよるが)なるべく⼈の⼿が必要ない構成にする Terraform等による構築⼿順の⾃動化 12Factorに寄せたアプリ構造にする アプリ側も構造が分離され綺麗になる どこを修正するとどこに影響があるのか明確にする
21.
最後は気持ちの問題 最初に⼀気にやる部分と、開発しながら少しずつ直す箇所を分ける インフラ・CIなどは最初に⼀気に テスト・Lint・データ構造などは開発しながら ビジネスの成⻑を⽌めない 開発者の満⾜のために⾏っているわけではない ⽌めないといけない場所もあるが、後になるほど⼤変になることを理解してもらう 進んでいることを明確にする 最初にやって!!!
22.
おわり