レガシープロダクトを改善していくための戦い方

Takuya Sato
Takuya SatoSoftware Developer
レガシープロダクトを改善していくための戦い⽅
佐藤琢哉(nazo)
今回伝えたいこと
レガシーコードとの向き合い⽅・⼼構え
プロダクト(業務)は必ず前に進めることができる
細かい⽅法はあまり話しません
こんなプロジェクト⾒たことないですか?
突然アサインされたものの…
テストが書かれていない
テストがほとんど通らない
CIがない
インフラが⼿作業で作られている
その他いろいろカオス
前任者が不在でノードキュメント
もうやだ作り直したい!
わかる
わかるー超わかるー
しかし本当にそれでいいのか?
なぜ作り直してはいけないのか
運⽤が始まっていると2ラインのプロジェクトが⾛る
2ラインでほぼ同じ実装をしないといけないため機能開発が⽌まる
そもそも思っているほど簡単じゃない
既存のデータは残さないといけないのでデータの変換などが必要
ビジネス(ロジック)ちゃんと理解してる?
現状で本当に問題あるの?(コード以外の部分)
作り直してもいい場合
まだ運⽤が始まっていない/始まって間もなく、データ量が少ない
データ構造が単純で変換が簡単、あるいは変換する必要がない
独⾃フレームワークなど、根幹レベルで⼿がつけられず、今後メンテナンスすることが
不可能に近い状態
それでも部分的に作り直せないかとか検討すべき
⼀通りやることをやって、ビジネス部分は理解できた上で保守に限界を感じた場合
動いているプロジェクトの特性
利⽤者がいる
⽌めることができない
開発が継続している
これらを踏まえた上でどうにかする
レガシープロダクトにおける最⼤の課題
悪い状態をこれ以上拡⼤させない
なるべく良いほうに少しずつ収束させていく
悪い状態とは何か?
コードの秩序がない
読めない
テストがない
コードの正当性が担保されていない
⾃動化されていない
⼿作業が多くミスの原因になっている
なぜ悪いのか?
既存メンバー以外が⼊ってきた時に把握が難しい
環境を変化させることが難しい
システムを変化させることが難しい
事故が起きる可能性が⾼い
今は⼤丈夫でも将来的に
ビジネス規模が⼤きくなればなるほど被害が⼤きくなる
悪い状態をこれ以上続けないために
CI/CDの整備
Lint導⼊
環境構築しやすい状態にする
テストを書ける体制作り
CI/CDの整備
テスト/Lintを⾃動で⾛らせて品質の確保
デプロイの⾃動化
⼤体⼿動デプロイだよねこういうの…
⼈間の⼿が⼊るところは事故の元なので、そこを極⼒減らす
CI/CDに対応した環境/インフラにする
Lint導⼊
基本的に後から⼊れるのはハードルが⾼い
全てこけるので
⾃動修正できる場合は⾃動修正してしまう
⾃動修正が完璧でない場合もあるので修正箇所は必ずチェック
特にrubocop
最初は全てスキップするように設定し、少しずつ厳しくしていく
(⾃動)テストを書ける体制作り
元々あるなら使おう
元々あるがFailが多すぎる場合は全部消そう
テストの修正は時間の無駄
テストがないプロジェクトの品質が上がることはない
テストがないプロジェクトの品質は誰にもわからない、とも⾔う
プロジェクトの途中からテストを書く
無理しない
なるべく新規のロジックや、⾃分が修正に関わったところを中⼼に⾏う
リファクタリングも並⾏して⾏う
コントローラーにロジックベタ書きだったりすると思うので、そういうのを切り出
してテストを⼀緒に書く
いわゆるe2eテストのようなものは「とりあえず通しておく」
200が帰ってきたらOKくらい
依存度の低いテストのほうが重要
TestSizesを意識する
https://testing.googleblog.com/2010/12/test-sizes.html
定義は⾃分たちで決める
Sサイズのテストが多くなるようにする
そうすることで⾃然に機能が分離され、良い設計になる
環境構築しやすい状態にする
⼈の⼊れ替えの少ないプロジェクトで新しい⼈が⼊った時に環境構築に失敗する←ある
ある
環境構築⽅法が整備されているプロダクトは構造の⾒通しが良い
次⼊ってきた⼈が困らないように
Docker化など
データ構造の⾒直し
DB設計で事故っていると致命的な問題になることがある
必要なログがない
項⽬の増減ができない
イベントの発⽣時刻などがわからない
ビジネスの変更についていけない
DBを直すのはコードを直すのより⼤変なことが多い
イベントとリソースの分離
特定時刻に何か起こったことはイベントである
例えば「ユーザー」と「ブログ記事」があって、それを投稿するというのは「投稿
する」というイベントであって「ユーザーとブログ記事との関連」というわけでは
ない
イベントに対する更新は基本的に発⽣しないようにする(イミュータブル)
-nullはなるべく許可しない
リソースとイベントを明確にすることで業務の流れが明確になる
詳細はぐぐるなりDB設計系の書籍で
インフラ
(規模にもよるが)なるべく⼈の⼿が必要ない構成にする
Terraform等による構築⼿順の⾃動化
12Factorに寄せたアプリ構造にする
アプリ側も構造が分離され綺麗になる
どこを修正するとどこに影響があるのか明確にする
最後は気持ちの問題
最初に⼀気にやる部分と、開発しながら少しずつ直す箇所を分ける
インフラ・CIなどは最初に⼀気に
テスト・Lint・データ構造などは開発しながら
ビジネスの成⻑を⽌めない
開発者の満⾜のために⾏っているわけではない
⽌めないといけない場所もあるが、後になるほど⼤変になることを理解してもらう
進んでいることを明確にする
最初にやって!!!
おわり
1 of 22

Recommended

開発プロセスの話 by
開発プロセスの話開発プロセスの話
開発プロセスの話Makiko Nakasato
494 views11 slides
Test Yourself - テストを書くと何がどう変わるか by
Test Yourself - テストを書くと何がどう変わるかTest Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるかTakuto Wada
38.3K views49 slides
事業会社のためのプロジェクトマネジメント基礎講座 by
事業会社のためのプロジェクトマネジメント基礎講座事業会社のためのプロジェクトマネジメント基礎講座
事業会社のためのプロジェクトマネジメント基礎講座Koyo 松本
2.9K views53 slides
Rspec勉強会 by
Rspec勉強会Rspec勉強会
Rspec勉強会gaooh
724 views27 slides
プランニングポーカーのすすめ by
プランニングポーカーのすすめプランニングポーカーのすすめ
プランニングポーカーのすすめsugimoto1022
2K views11 slides
組織にテストを書く文化を根付かせる戦略と戦術 by
組織にテストを書く文化を根付かせる戦略と戦術組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術Takuto Wada
76.4K views33 slides

More Related Content

Similar to レガシープロダクトを改善していくための戦い方

DevLOVE関西2012 Drive 講演資料(iBook) by
DevLOVE関西2012 Drive 講演資料(iBook)DevLOVE関西2012 Drive 講演資料(iBook)
DevLOVE関西2012 Drive 講演資料(iBook)広告制作会社
1.1K views23 slides
テキストマイニングのイメージと実際 by
テキストマイニングのイメージと実際テキストマイニングのイメージと実際
テキストマイニングのイメージと実際antibayesian 俺がS式だ
3.6K views13 slides
鹿駆動 by
鹿駆動鹿駆動
鹿駆動Shinichi Kozake
801 views50 slides
(仮)ややこしい時こそ質問してみる by
(仮)ややこしい時こそ質問してみる(仮)ややこしい時こそ質問してみる
(仮)ややこしい時こそ質問してみるT Takeno
327 views11 slides
実務でGo使い始めました by
実務でGo使い始めました実務でGo使い始めました
実務でGo使い始めましたYuki Kikuchi
29 views14 slides
Openthology256pub by
Openthology256pubOpenthology256pub
Openthology256pubKeiichi SASAKI
628 views138 slides

Similar to レガシープロダクトを改善していくための戦い方(20)

DevLOVE関西2012 Drive 講演資料(iBook) by 広告制作会社
DevLOVE関西2012 Drive 講演資料(iBook)DevLOVE関西2012 Drive 講演資料(iBook)
DevLOVE関西2012 Drive 講演資料(iBook)
広告制作会社1.1K views
(仮)ややこしい時こそ質問してみる by T Takeno
(仮)ややこしい時こそ質問してみる(仮)ややこしい時こそ質問してみる
(仮)ややこしい時こそ質問してみる
T Takeno327 views
実務でGo使い始めました by Yuki Kikuchi
実務でGo使い始めました実務でGo使い始めました
実務でGo使い始めました
Yuki Kikuchi29 views
合言葉は…Backlog感出しますか! by 毅 佐藤
合言葉は…Backlog感出しますか!合言葉は…Backlog感出しますか!
合言葉は…Backlog感出しますか!
毅 佐藤661 views
Roo by terahide
RooRoo
Roo
terahide1.2K views
20160326 第10回 Rad Studio 勉強会@Osaka by Ryo Ohki
20160326 第10回 Rad Studio 勉強会@Osaka20160326 第10回 Rad Studio 勉強会@Osaka
20160326 第10回 Rad Studio 勉強会@Osaka
Ryo Ohki1.2K views
2012.11.03 #odstudy Excel方眼紙に魂を削られない為のoffice講座 by 真乙 九龍
2012.11.03 #odstudy Excel方眼紙に魂を削られない為のoffice講座 2012.11.03 #odstudy Excel方眼紙に魂を削られない為のoffice講座
2012.11.03 #odstudy Excel方眼紙に魂を削られない為のoffice講座
真乙 九龍5.4K views
Saga Smart Center - Excelで完結!マイクロソフト流データサイエンスの極意 by Daiyu Hatakeyama
Saga Smart Center - Excelで完結!マイクロソフト流データサイエンスの極意Saga Smart Center - Excelで完結!マイクロソフト流データサイエンスの極意
Saga Smart Center - Excelで完結!マイクロソフト流データサイエンスの極意
Daiyu Hatakeyama583 views
20180809_機械学習を使った「ビジネスになる」アプリケーションの作り方 by Shunsuke Nakamura
20180809_機械学習を使った「ビジネスになる」アプリケーションの作り方20180809_機械学習を使った「ビジネスになる」アプリケーションの作り方
20180809_機械学習を使った「ビジネスになる」アプリケーションの作り方
Shunsuke Nakamura360 views
[JJUG CCC 2018 Spring LT Speech]WEBアプリケーションの性能問題を診断する話 by Nan Zhang
[JJUG CCC 2018 Spring LT Speech]WEBアプリケーションの性能問題を診断する話[JJUG CCC 2018 Spring LT Speech]WEBアプリケーションの性能問題を診断する話
[JJUG CCC 2018 Spring LT Speech]WEBアプリケーションの性能問題を診断する話
Nan Zhang559 views
2015-10-31 クラウドネイティヴ時代の運用を考える 〜 ドキュメント駆動運用へ by Operation Lab, LLC.
2015-10-31 クラウドネイティヴ時代の運用を考える  〜 ドキュメント駆動運用へ2015-10-31 クラウドネイティヴ時代の運用を考える  〜 ドキュメント駆動運用へ
2015-10-31 クラウドネイティヴ時代の運用を考える 〜 ドキュメント駆動運用へ
Operation Lab, LLC.4.9K views
Agile Japan 大阪サテライト 2017 by Ohta Atsushi
Agile Japan 大阪サテライト 2017Agile Japan 大阪サテライト 2017
Agile Japan 大阪サテライト 2017
Ohta Atsushi3.2K views
コンソールゲームを世界展開してみた - JAWS DAYS 2015 by Ryo Nakamaru
コンソールゲームを世界展開してみた - JAWS DAYS 2015コンソールゲームを世界展開してみた - JAWS DAYS 2015
コンソールゲームを世界展開してみた - JAWS DAYS 2015
Ryo Nakamaru3.9K views

More from Takuya Sato

設計と実装で 抑えておきたい サービスクラスと例外 by
設計と実装で 抑えておきたい サービスクラスと例外設計と実装で 抑えておきたい サービスクラスと例外
設計と実装で 抑えておきたい サービスクラスと例外Takuya Sato
31.7K views47 slides
Vue.js入門 by
Vue.js入門Vue.js入門
Vue.js入門Takuya Sato
17.9K views41 slides
本番環境で使いたいPHP by
本番環境で使いたいPHP本番環境で使いたいPHP
本番環境で使いたいPHPTakuya Sato
3.4K views41 slides
徹底攻略!PHP5.4 by
徹底攻略!PHP5.4徹底攻略!PHP5.4
徹底攻略!PHP5.4Takuya Sato
5K views96 slides
Silex入門 by
Silex入門Silex入門
Silex入門Takuya Sato
7.9K views34 slides
ここがすごい! なぞとPHP5.3 by
ここがすごい! なぞとPHP5.3ここがすごい! なぞとPHP5.3
ここがすごい! なぞとPHP5.3Takuya Sato
1.7K views34 slides

More from Takuya Sato(12)

設計と実装で 抑えておきたい サービスクラスと例外 by Takuya Sato
設計と実装で 抑えておきたい サービスクラスと例外設計と実装で 抑えておきたい サービスクラスと例外
設計と実装で 抑えておきたい サービスクラスと例外
Takuya Sato31.7K views
Vue.js入門 by Takuya Sato
Vue.js入門Vue.js入門
Vue.js入門
Takuya Sato17.9K views
本番環境で使いたいPHP by Takuya Sato
本番環境で使いたいPHP本番環境で使いたいPHP
本番環境で使いたいPHP
Takuya Sato3.4K views
徹底攻略!PHP5.4 by Takuya Sato
徹底攻略!PHP5.4徹底攻略!PHP5.4
徹底攻略!PHP5.4
Takuya Sato5K views
ここがすごい! なぞとPHP5.3 by Takuya Sato
ここがすごい! なぞとPHP5.3ここがすごい! なぞとPHP5.3
ここがすごい! なぞとPHP5.3
Takuya Sato1.7K views
2009年のPHPフレームワーク by Takuya Sato
2009年のPHPフレームワーク2009年のPHPフレームワーク
2009年のPHPフレームワーク
Takuya Sato3.1K views
Redmineで始めるチケット駆動開発 by Takuya Sato
Redmineで始めるチケット駆動開発Redmineで始めるチケット駆動開発
Redmineで始めるチケット駆動開発
Takuya Sato7.7K views
フレームワーク使おうぜ! by Takuya Sato
フレームワーク使おうぜ!フレームワーク使おうぜ!
フレームワーク使おうぜ!
Takuya Sato1.9K views
本当は怖いPHP by Takuya Sato
本当は怖いPHP本当は怖いPHP
本当は怖いPHP
Takuya Sato2.4K views
PHPとMongoDBで学ぶ次世代データストア by Takuya Sato
PHPとMongoDBで学ぶ次世代データストアPHPとMongoDBで学ぶ次世代データストア
PHPとMongoDBで学ぶ次世代データストア
Takuya Sato4.7K views
PHPでセキュリティを真面目に考える by Takuya Sato
PHPでセキュリティを真面目に考えるPHPでセキュリティを真面目に考える
PHPでセキュリティを真面目に考える
Takuya Sato34.8K views

Recently uploaded

AIで始めるRustプログラミング #SolDevHub by
AIで始めるRustプログラミング #SolDevHubAIで始めるRustプログラミング #SolDevHub
AIで始めるRustプログラミング #SolDevHubK Kinzal
22 views25 slides
onewedge_companyguide1 by
onewedge_companyguide1onewedge_companyguide1
onewedge_companyguide1ONEWEDGE1
27 views22 slides
JISTA月例会2023年12月 書籍『3カ月で改善!システム障害対応実践ガイド』ご紹介+失敗学と障害対応と私 by
JISTA月例会2023年12月 書籍『3カ月で改善!システム障害対応実践ガイド』ご紹介+失敗学と障害対応と私JISTA月例会2023年12月 書籍『3カ月で改善!システム障害対応実践ガイド』ご紹介+失敗学と障害対応と私
JISTA月例会2023年12月 書籍『3カ月で改善!システム障害対応実践ガイド』ご紹介+失敗学と障害対応と私修治 松浦
122 views36 slides
SSH超入門 by
SSH超入門SSH超入門
SSH超入門Toru Miyahara
363 views21 slides
システム概要.pdf by
システム概要.pdfシステム概要.pdf
システム概要.pdfTaira Shimizu
40 views1 slide
図解で理解するvetKD by
図解で理解するvetKD図解で理解するvetKD
図解で理解するvetKDryoo toku
86 views22 slides

Recently uploaded(9)

AIで始めるRustプログラミング #SolDevHub by K Kinzal
AIで始めるRustプログラミング #SolDevHubAIで始めるRustプログラミング #SolDevHub
AIで始めるRustプログラミング #SolDevHub
K Kinzal22 views
onewedge_companyguide1 by ONEWEDGE1
onewedge_companyguide1onewedge_companyguide1
onewedge_companyguide1
ONEWEDGE127 views
JISTA月例会2023年12月 書籍『3カ月で改善!システム障害対応実践ガイド』ご紹介+失敗学と障害対応と私 by 修治 松浦
JISTA月例会2023年12月 書籍『3カ月で改善!システム障害対応実践ガイド』ご紹介+失敗学と障害対応と私JISTA月例会2023年12月 書籍『3カ月で改善!システム障害対応実践ガイド』ご紹介+失敗学と障害対応と私
JISTA月例会2023年12月 書籍『3カ月で改善!システム障害対応実践ガイド』ご紹介+失敗学と障害対応と私
修治 松浦122 views
図解で理解するvetKD by ryoo toku
図解で理解するvetKD図解で理解するvetKD
図解で理解するvetKD
ryoo toku86 views
Najah Matsuo Self Introduction by NajahMatsuo
Najah Matsuo Self IntroductionNajah Matsuo Self Introduction
Najah Matsuo Self Introduction
NajahMatsuo7 views
how query cost affects search behavior translated in JP by Tobioka Ken
how query cost affects search behavior translated in JPhow query cost affects search behavior translated in JP
how query cost affects search behavior translated in JP
Tobioka Ken9 views

レガシープロダクトを改善していくための戦い方