SlideShare une entreprise Scribd logo
1  sur  32
Télécharger pour lire hors ligne
技術的負債返済・実装改善
に関する取り組み
LTech #8 2019/09/03
株式会社LIFULL
清水通直
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。2
アジェンダ
• 自己紹介
• はじめに
• 技術的負債返済・実装改善に関する取り組み
– Code Climate活用事例
– 効果的な負債返済計画
– Datadog APM活用事例
– Buckyを活用事例
• まとめ
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。3
自己紹介
清水通直
しみず みちなお
@shimimi
● 2018年 LIFULL中途入社
● 今年で2年目
○ Webアプリケーション開発
○ 開発効率向上に関する取り組み
○ パフォーマンス改善に対する取り組み
○ 技術的負債返済に関する取り組み
現在に至る
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。4
1. はじめに
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。5
1. はじめに
エントロピー増大則
「断熱系において不可逆変化が生じた場合、その系のエントロピーは増大す
る。」
引用元 Wikipedia
ソフトウェアも同様、問題のある実装を放置しておくと
そこからまた新たな問題が生まれ、腐敗していきます。
そのため、早期に問題のある実装を取り除いていくことは効果的ですが
既に負債を抱えてしまった大規模プロダクトの場合には
いくら取り除いても、新規開発の速度に負けてしまい
完済目処が立たない可能性があります。
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。6
1. はじめに
そのため、様々なツール・サービスを活用し
リファクタリングの精度・効率を高めることや
リファクタリング以外の改善アプローチを
行なった事例をご紹介させていただきます。
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。7
1. Code Climate活用事例
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。8
1. Code Climate改善事例
渡された値が
特定の数値間の範囲内の場合
→範囲の上限値を返す
最大値を超える場合
→最大値+1を返す
このような冗長な実装があります。
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。9
1. Code Climate改善事例
Code Climate CLI を実行すると、認知的複雑度は12で
デフォルトの規定値5を超えていることがわかります。
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。10
1. Code Climate改善事例
POINT
JSONで出力すると
Code Climate Quality
でも見ることのできない
改善ポイントや、緊急度など
を見ることができます
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。11
1. Code Climate改善事例
認知的複雑度が5まで下がるように
実装改善をおこないました。
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。12
1. Code Climate改善事例
再度解析を行うと問題は無事解消されていました。
もう一つのissue(850,000)も同時に解消されているので
「1,650,000 remediation points 返済完了」となります。
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。
このような細かい改善を少人数でいくつか行いました。
しかし、同期間の新規開発によりそれ以上の負債が新たに増えました。
大規模プロダクトであるほど開発は活発ですので
負債が増えやすい構造を改善していかない限り
負債増加速度 > 負債返済速度となります。
効果的な負債返済計画を立てる必要があると思いました。
13
1. Code Climate改善事例
POINT
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。14
2. 効果的な負債返済計画
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。15
2. 効果的な負債返済計画
プロダクトの技術的負債の返済と
プロダクトのさらなる発展のバランスを
どのように保つべきでしょうか。
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。16
2. 効果的な負債返済計画
POINT新規開発停止(Project Inversion)
「2011年に株式公開に成功してから6か月たっても、LinkedInは、問題を起こしがちなデプ
ロイとの格闘を続けていた。その苦痛が耐えられないものになったので、LinkedInは
Operation InVersionを発足させた。コンピューティング環境、デプロイ、アーキテクチャの
テクチャのオーバーホールのために、2か月にわたって新機能の開発をすべて停止した
のである。」
「社内のトップエンジニアたちは、新機能の開発を完全にストップさせ、部門全体でサイト
のコアインフラストラクチャに修正を加えることにした。」
「Project InVersionは、10年近くにわたって蓄積されたLinkedInの技術的負債を解消する
ことにより、安全と安全性を確保するとともに、会社の成長の次の段階に備えたものにな
った。」
引用元 The DevOps ハンドブック 理論・原則・実践のすべて
全員で負債返済
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。17
2. 効果的な負債返済計画
新規開発と共に
新規の機能開発は行うものの、直面した技術的負債に関する指摘は解消しなければなら
ないようにします。Githubのブランチ保護設定で品質に関する指摘解消の遵守を強制する
制すると、問題のある実装はマージできなくなります。技術的負債は減少方向にのみ動く
ことが約束されます。
技術的負債が減少する一方、負債量によっては開発速度も低下します。既に負債量が大
きすぎる場合には、新規開発自体よりもそれに付随する負債の返済コストで首が回らなく
なり、Project Inversionと同様の状態になる可能性があります。
新規開発チームのライフワークに沿った返済
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。18
2. 効果的な負債返済計画
負債返済チーム
新規開発チームとは別に、負債返済を目的とする専任チームを発足します。負
債返済チームは、改善ノウハウを新規開発チームにフィードバックし、今後の新
時に同様の方法での実装改善を促進します。既存の負債を解消しつつ、ノウハウ
で今後の負債も増えにくくするループを作り出します。
Githubのブランチ保護設定では、品質に関する指摘を通知するに留め、可能な限
ことを促すものの強制はしません。新規開発チームのビジネス的な優先度を優先
す。
負債返済チームによる改善と、新規開発チームが負債返済チームのノウハウを吸
ていくことにより、緩やかに負債を返済していくこととなります。
新規開発チーム 負債返済チーム
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。
負債返済チーム+負債発生原因解消チーム
前案の技術的負債返済チームに加えて、既存の技術的負債が積み立てられてきた背
景・経緯を分析し解消する専任チームを発足します。
このチームは、技術的負債それ自体に目を向けるのではなく、それらが積立てられてき
た経緯・背景、より原始的な問題を探り、アーキテクチャの再設計・開発リードタイムの可
視化・開発サイクルやフロー効率の改善などを行っていき、技術的負債が生まれにくい
にくい状態に変革していきます。
弊社は現在、このようなフォーメーションで、
プロダクトの発展を止めることなく、技術的負債と向き合っています。
19
2. 効果的な負債返済計画
POINT
新規開発チーム 負債返済チーム 負債原因解消チーム
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。20
3. Datadog APM活用事例
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。21
3. Datadog APM活用事例
最初に示したCode Climate CLI / Qualityは
具体的な実装改善にとても便利なのですが
以下を考慮しないため、複数の指摘の中からより効果的なものを選定しづ
らいです。
・実行順序による影響度
・実行速度へのインパクト
・システムメトリクスへの影響度
Datadog APMを併用すると、これらが分析可能になりました。
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。22
3. Datadog APM活用事例
分散トレーシングの技術により、異なる言語で作られた複数コンポーネント
間の実行順序や、ボトルネックがわかります。
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。23
3. Datadog APM活用事例
マルチスレッドの処理は、可視化することで、一番遅いスレッドの処理の
み改善する等、効果的な実装改善が可能になりました。
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。24
3. Datadog APM活用事例
Datadog APMで実際に改善した事例
1. 特定の画面のBackend TTFBが遅い原因を調査
2. 呼ばれているAPIをAPMで掘り下げていく
3. Ruby製APIの1つのエンドポイントの中で、JSONのencode/decode処理
が頻繁に使われており、それぞれは微小でも、1リクエスト間の合計では
120msを費やしていることが明らかになった
4. 実装改善によりその大部分を削減し、数十MBのメモリリソースとのトレ
ードオフで100 ms改善できることがわかった
5. 実施・改善
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。25
4. Bucky活用事例
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。26
4. Bucky活用事例
最後に、安心して様々な改善を行っていくために
各INPUTパターン(HTTP Request)から
最終的にユーザーにどう表示されるかまでを含めた
E2Eテストが手軽に行える状態になると
安心した改善が行え、捗ると思います。
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。27
4. Bucky活用事例
弊社のOSS「Bucky」では、このようなE2Eテストが
簡単なYAMLファイルを書いていくだけで
作っていくことができます。
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。28
4. Bucky活用事例
Buckyで実際に防げた問題の事例
1. ある機能開発が完了
2. Buckyの実施結果も正常
3. developブランチを取り込み、再度Buckyを実行
4. 問題発生(影響範囲と認識していない部分でのエラー画面)
5. 原因調査
6. featureブランチ単体でも、developブランチ単体でも問題はないが、
両者が合わさると問題となる既存の複合バグであり、いつ起こって
もおかしくない潜在的なバグであることがわかった
もし事前にBuckyを回していなければ、マージされdevelopブランチで問
題が初めて発生し、混乱を招いていたことになります。
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。29
5. まとめ
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。
5. まとめ
使用ツール・サービス 長所 短所
1 Code Climate Quality
• 技術的負債がわかりやすい
• 対症療法的な負債返済が可能
• 開発サイクルに言及しない
• 実行順序等を考慮しない
2 Code Climate CLI
• 無料でローカルでQuality同等の機能が使える
• JSONで解析ローデータを出力し解析できる
• 上記同様
3 Code Climate Velocity
• Github上で表現される開発サイクルを可視化・
分析できる
• Github上で表現されない部分は含まれな
い
4 Datadog APM
• 分析より可視化
• 実行順序を考慮した改善ができる
• 実行速度を意識した実装改善が可能
• 何が良くないかは示してはくれない
• クライアントサイドのスクリプトには対
応できない
5 Bucky
• E2Eテスト仕様をYAMLで蓄積
• 改善の過程での、予期せぬ他への影響を検知
• 安心して改善を進めていくためのパートナー
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。
5. まとめ
大規模の場合、効果的な負債返済計画を立てる必要がある。
(1)Project InVersion
(2)新規開発と共に
(3)負債返済チーム
(4)負債返済チーム+発生原因解消チーム
全員で負債返済
新規開発チームのライフワークに沿った返済
新規開発チーム 負債返済チーム
新規開発チーム 負債返済チーム 負債原因解消チーム
© LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。
5. まとめ
戦いは続く

Contenu connexe

Similaire à 【Ltech#8】技術的負債返済・実装改善に関する事例紹介

Givery saas_boardmember_recruiting
Givery saas_boardmember_recruitingGivery saas_boardmember_recruiting
Givery saas_boardmember_recruiting山川 雄志
 
Slideshare用 itサービスマネジメントの実現に向けて
Slideshare用 itサービスマネジメントの実現に向けてSlideshare用 itサービスマネジメントの実現に向けて
Slideshare用 itサービスマネジメントの実現に向けてUNIRITA Incorporated
 
SIerとクラウドの付き合い方
SIerとクラウドの付き合い方SIerとクラウドの付き合い方
SIerとクラウドの付き合い方Yusuke Suzuki
 
【Azureデータ分析シリーズ】非専門家向け/利用部門主導で始めるデータ分析_ナレッジコミュニケーション公開資料
【Azureデータ分析シリーズ】非専門家向け/利用部門主導で始めるデータ分析_ナレッジコミュニケーション公開資料【Azureデータ分析シリーズ】非専門家向け/利用部門主導で始めるデータ分析_ナレッジコミュニケーション公開資料
【Azureデータ分析シリーズ】非専門家向け/利用部門主導で始めるデータ分析_ナレッジコミュニケーション公開資料Takaya Nakanishi
 
ITエンジニア派遣サービスご案内資料.pdf
ITエンジニア派遣サービスご案内資料.pdfITエンジニア派遣サービスご案内資料.pdf
ITエンジニア派遣サービスご案内資料.pdfbstylevaluetechnolog
 
中規模Angularアプリケーションの再設計
中規模Angularアプリケーションの再設計中規模Angularアプリケーションの再設計
中規模Angularアプリケーションの再設計bitbank, Inc. Tokyo, Japan
 
XP祭り2019 - 日立・ソフトウェア革新部会 ~会社を越境する社内コミュニティ~
XP祭り2019 - 日立・ソフトウェア革新部会 ~会社を越境する社内コミュニティ~XP祭り2019 - 日立・ソフトウェア革新部会 ~会社を越境する社内コミュニティ~
XP祭り2019 - 日立・ソフトウェア革新部会 ~会社を越境する社内コミュニティ~Masanori Kaneko
 
ITエンジニア派遣サービスご案内資料(編集用).pdf
ITエンジニア派遣サービスご案内資料(編集用).pdfITエンジニア派遣サービスご案内資料(編集用).pdf
ITエンジニア派遣サービスご案内資料(編集用).pdfbstylevaluetechnolog
 
ITにおけるデザイン活用の課題と対応策ーデザインシステムでできること
ITにおけるデザイン活用の課題と対応策ーデザインシステムでできることITにおけるデザイン活用の課題と対応策ーデザインシステムでできること
ITにおけるデザイン活用の課題と対応策ーデザインシステムでできることFixel Inc.
 
XP祭り2014「アジャイルを手放して得られたこと」
XP祭り2014「アジャイルを手放して得られたこと」 XP祭り2014「アジャイルを手放して得られたこと」
XP祭り2014「アジャイルを手放して得られたこと」 Yusuke Suzuki
 
研修実績:CICOM BRAINS(Asia)
研修実績:CICOM BRAINS(Asia)研修実績:CICOM BRAINS(Asia)
研修実績:CICOM BRAINS(Asia)Cicom Brains Inc.
 
OutSystems 新機能紹介: Reactive Web
OutSystems 新機能紹介: Reactive WebOutSystems 新機能紹介: Reactive Web
OutSystems 新機能紹介: Reactive WebTsuyoshi Kawarasaki
 
Kpiの設定(提案数を増やす)
Kpiの設定(提案数を増やす)Kpiの設定(提案数を増やす)
Kpiの設定(提案数を増やす)e-sales-support
 
慶應ビジネススクール 新事業創造体験 2018年 第1回
慶應ビジネススクール 新事業創造体験 2018年 第1回慶應ビジネススクール 新事業創造体験 2018年 第1回
慶應ビジネススクール 新事業創造体験 2018年 第1回Yasuchika Wakayama
 
500% productivity improvement with the MDC. 生産性向上500%達成 MDC適用のknowhow
500% productivity improvement with the MDC. 生産性向上500%達成 MDC適用のknowhow500% productivity improvement with the MDC. 生産性向上500%達成 MDC適用のknowhow
500% productivity improvement with the MDC. 生産性向上500%達成 MDC適用のknowhowProductivity Partner, Inc.
 
ITIL準拠のツールでアジャイルな変革を実現
ITIL準拠のツールでアジャイルな変革を実現ITIL準拠のツールでアジャイルな変革を実現
ITIL準拠のツールでアジャイルな変革を実現UNIRITA Incorporated
 
Itエンジニアとして身に付けるべきビジネス&プロジェクト・デザイン
Itエンジニアとして身に付けるべきビジネス&プロジェクト・デザインItエンジニアとして身に付けるべきビジネス&プロジェクト・デザイン
Itエンジニアとして身に付けるべきビジネス&プロジェクト・デザインHagimoto Junzo
 
研修実績:CICOM BRAINS(Asia)
研修実績:CICOM BRAINS(Asia)研修実績:CICOM BRAINS(Asia)
研修実績:CICOM BRAINS(Asia)Cicom Brains Inc.
 
【Qiita Night】エンジニア出身PMの1年目の通信簿_PM小川
【Qiita Night】エンジニア出身PMの1年目の通信簿_PM小川【Qiita Night】エンジニア出身PMの1年目の通信簿_PM小川
【Qiita Night】エンジニア出身PMの1年目の通信簿_PM小川Yuta Ogawa
 

Similaire à 【Ltech#8】技術的負債返済・実装改善に関する事例紹介 (20)

DLL製造分科会からの告知
DLL製造分科会からの告知DLL製造分科会からの告知
DLL製造分科会からの告知
 
Givery saas_boardmember_recruiting
Givery saas_boardmember_recruitingGivery saas_boardmember_recruiting
Givery saas_boardmember_recruiting
 
Slideshare用 itサービスマネジメントの実現に向けて
Slideshare用 itサービスマネジメントの実現に向けてSlideshare用 itサービスマネジメントの実現に向けて
Slideshare用 itサービスマネジメントの実現に向けて
 
SIerとクラウドの付き合い方
SIerとクラウドの付き合い方SIerとクラウドの付き合い方
SIerとクラウドの付き合い方
 
【Azureデータ分析シリーズ】非専門家向け/利用部門主導で始めるデータ分析_ナレッジコミュニケーション公開資料
【Azureデータ分析シリーズ】非専門家向け/利用部門主導で始めるデータ分析_ナレッジコミュニケーション公開資料【Azureデータ分析シリーズ】非専門家向け/利用部門主導で始めるデータ分析_ナレッジコミュニケーション公開資料
【Azureデータ分析シリーズ】非専門家向け/利用部門主導で始めるデータ分析_ナレッジコミュニケーション公開資料
 
ITエンジニア派遣サービスご案内資料.pdf
ITエンジニア派遣サービスご案内資料.pdfITエンジニア派遣サービスご案内資料.pdf
ITエンジニア派遣サービスご案内資料.pdf
 
中規模Angularアプリケーションの再設計
中規模Angularアプリケーションの再設計中規模Angularアプリケーションの再設計
中規模Angularアプリケーションの再設計
 
XP祭り2019 - 日立・ソフトウェア革新部会 ~会社を越境する社内コミュニティ~
XP祭り2019 - 日立・ソフトウェア革新部会 ~会社を越境する社内コミュニティ~XP祭り2019 - 日立・ソフトウェア革新部会 ~会社を越境する社内コミュニティ~
XP祭り2019 - 日立・ソフトウェア革新部会 ~会社を越境する社内コミュニティ~
 
ITエンジニア派遣サービスご案内資料(編集用).pdf
ITエンジニア派遣サービスご案内資料(編集用).pdfITエンジニア派遣サービスご案内資料(編集用).pdf
ITエンジニア派遣サービスご案内資料(編集用).pdf
 
ITにおけるデザイン活用の課題と対応策ーデザインシステムでできること
ITにおけるデザイン活用の課題と対応策ーデザインシステムでできることITにおけるデザイン活用の課題と対応策ーデザインシステムでできること
ITにおけるデザイン活用の課題と対応策ーデザインシステムでできること
 
XP祭り2014「アジャイルを手放して得られたこと」
XP祭り2014「アジャイルを手放して得られたこと」 XP祭り2014「アジャイルを手放して得られたこと」
XP祭り2014「アジャイルを手放して得られたこと」
 
研修実績:CICOM BRAINS(Asia)
研修実績:CICOM BRAINS(Asia)研修実績:CICOM BRAINS(Asia)
研修実績:CICOM BRAINS(Asia)
 
OutSystems 新機能紹介: Reactive Web
OutSystems 新機能紹介: Reactive WebOutSystems 新機能紹介: Reactive Web
OutSystems 新機能紹介: Reactive Web
 
Kpiの設定(提案数を増やす)
Kpiの設定(提案数を増やす)Kpiの設定(提案数を増やす)
Kpiの設定(提案数を増やす)
 
慶應ビジネススクール 新事業創造体験 2018年 第1回
慶應ビジネススクール 新事業創造体験 2018年 第1回慶應ビジネススクール 新事業創造体験 2018年 第1回
慶應ビジネススクール 新事業創造体験 2018年 第1回
 
500% productivity improvement with the MDC. 生産性向上500%達成 MDC適用のknowhow
500% productivity improvement with the MDC. 生産性向上500%達成 MDC適用のknowhow500% productivity improvement with the MDC. 生産性向上500%達成 MDC適用のknowhow
500% productivity improvement with the MDC. 生産性向上500%達成 MDC適用のknowhow
 
ITIL準拠のツールでアジャイルな変革を実現
ITIL準拠のツールでアジャイルな変革を実現ITIL準拠のツールでアジャイルな変革を実現
ITIL準拠のツールでアジャイルな変革を実現
 
Itエンジニアとして身に付けるべきビジネス&プロジェクト・デザイン
Itエンジニアとして身に付けるべきビジネス&プロジェクト・デザインItエンジニアとして身に付けるべきビジネス&プロジェクト・デザイン
Itエンジニアとして身に付けるべきビジネス&プロジェクト・デザイン
 
研修実績:CICOM BRAINS(Asia)
研修実績:CICOM BRAINS(Asia)研修実績:CICOM BRAINS(Asia)
研修実績:CICOM BRAINS(Asia)
 
【Qiita Night】エンジニア出身PMの1年目の通信簿_PM小川
【Qiita Night】エンジニア出身PMの1年目の通信簿_PM小川【Qiita Night】エンジニア出身PMの1年目の通信簿_PM小川
【Qiita Night】エンジニア出身PMの1年目の通信簿_PM小川
 

Plus de LIFULL Co., Ltd.

20220319_新卒から活躍し続けるエンジニアが大切にしている5つのこと
20220319_新卒から活躍し続けるエンジニアが大切にしている5つのこと20220319_新卒から活躍し続けるエンジニアが大切にしている5つのこと
20220319_新卒から活躍し続けるエンジニアが大切にしている5つのことLIFULL Co., Ltd.
 
趣味と仕事の違い、現場で求められるアプリケーションの可観測性
趣味と仕事の違い、現場で求められるアプリケーションの可観測性趣味と仕事の違い、現場で求められるアプリケーションの可観測性
趣味と仕事の違い、現場で求められるアプリケーションの可観測性LIFULL Co., Ltd.
 
Kubernetesセキュリティの歩き方
Kubernetesセキュリティの歩き方Kubernetesセキュリティの歩き方
Kubernetesセキュリティの歩き方LIFULL Co., Ltd.
 
LIFULLの全社アプリケーション実行基盤 KEEL について
LIFULLの全社アプリケーション実行基盤 KEEL についてLIFULLの全社アプリケーション実行基盤 KEEL について
LIFULLの全社アプリケーション実行基盤 KEEL についてLIFULL Co., Ltd.
 
Kubernetesクラスタバージョンアップを支える技術
Kubernetesクラスタバージョンアップを支える技術Kubernetesクラスタバージョンアップを支える技術
Kubernetesクラスタバージョンアップを支える技術LIFULL Co., Ltd.
 
LIFULL HOME'SでのSolrの構成と運用の変遷
LIFULL HOME'SでのSolrの構成と運用の変遷LIFULL HOME'SでのSolrの構成と運用の変遷
LIFULL HOME'SでのSolrの構成と運用の変遷LIFULL Co., Ltd.
 
LIFULLでは新卒エンジニアに 丸一日のテスト研修を行なっている
LIFULLでは新卒エンジニアに 丸一日のテスト研修を行なっているLIFULLでは新卒エンジニアに 丸一日のテスト研修を行なっている
LIFULLでは新卒エンジニアに 丸一日のテスト研修を行なっているLIFULL Co., Ltd.
 
SaPID を導入するまでとそれから
SaPID を導入するまでとそれからSaPID を導入するまでとそれから
SaPID を導入するまでとそれからLIFULL Co., Ltd.
 
3D間取りを支える技術
3D間取りを支える技術3D間取りを支える技術
3D間取りを支える技術LIFULL Co., Ltd.
 
LIFULL HOME'Sのおとり広告予測モデルの開発
LIFULL HOME'Sのおとり広告予測モデルの開発LIFULL HOME'Sのおとり広告予測モデルの開発
LIFULL HOME'Sのおとり広告予測モデルの開発LIFULL Co., Ltd.
 
大企業でアジャイル開発を推進できる条件とその心構え
大企業でアジャイル開発を推進できる条件とその心構え大企業でアジャイル開発を推進できる条件とその心構え
大企業でアジャイル開発を推進できる条件とその心構えLIFULL Co., Ltd.
 
スクラムを利用したアジャイルオフショア開発のとりくみ
スクラムを利用したアジャイルオフショア開発のとりくみスクラムを利用したアジャイルオフショア開発のとりくみ
スクラムを利用したアジャイルオフショア開発のとりくみLIFULL Co., Ltd.
 
実践 マーケティングテクノロジーエンジニア
実践 マーケティングテクノロジーエンジニア実践 マーケティングテクノロジーエンジニア
実践 マーケティングテクノロジーエンジニアLIFULL Co., Ltd.
 
エンジニア × マーケティングテクノロジー が必要な理由
エンジニア × マーケティングテクノロジー が必要な理由エンジニア × マーケティングテクノロジー が必要な理由
エンジニア × マーケティングテクノロジー が必要な理由LIFULL Co., Ltd.
 
「空飛ぶホームズくん」を実現するVR技術
「空飛ぶホームズくん」を実現するVR技術「空飛ぶホームズくん」を実現するVR技術
「空飛ぶホームズくん」を実現するVR技術LIFULL Co., Ltd.
 
ニオイセンサで思索する街の新たな指標
ニオイセンサで思索する街の新たな指標ニオイセンサで思索する街の新たな指標
ニオイセンサで思索する街の新たな指標LIFULL Co., Ltd.
 
Well-beingを測る「LIFE WILL」開発の舞台裏
Well-beingを測る「LIFE WILL」開発の舞台裏Well-beingを測る「LIFE WILL」開発の舞台裏
Well-beingを測る「LIFE WILL」開発の舞台裏LIFULL Co., Ltd.
 
㊗ LINE新着物件通知 リリース!! PJ進行に沿って話す、 PjM/PdMとして やったこと
㊗ LINE新着物件通知 リリース!! PJ進行に沿って話す、 PjM/PdMとして やったこと㊗ LINE新着物件通知 リリース!! PJ進行に沿って話す、 PjM/PdMとして やったこと
㊗ LINE新着物件通知 リリース!! PJ進行に沿って話す、 PjM/PdMとして やったことLIFULL Co., Ltd.
 
ウェブアクセシビリティ推進活動はじめました
ウェブアクセシビリティ推進活動はじめましたウェブアクセシビリティ推進活動はじめました
ウェブアクセシビリティ推進活動はじめましたLIFULL Co., Ltd.
 
大きめレガシープロジェクトのフロント行く末
大きめレガシープロジェクトのフロント行く末大きめレガシープロジェクトのフロント行く末
大きめレガシープロジェクトのフロント行く末LIFULL Co., Ltd.
 

Plus de LIFULL Co., Ltd. (20)

20220319_新卒から活躍し続けるエンジニアが大切にしている5つのこと
20220319_新卒から活躍し続けるエンジニアが大切にしている5つのこと20220319_新卒から活躍し続けるエンジニアが大切にしている5つのこと
20220319_新卒から活躍し続けるエンジニアが大切にしている5つのこと
 
趣味と仕事の違い、現場で求められるアプリケーションの可観測性
趣味と仕事の違い、現場で求められるアプリケーションの可観測性趣味と仕事の違い、現場で求められるアプリケーションの可観測性
趣味と仕事の違い、現場で求められるアプリケーションの可観測性
 
Kubernetesセキュリティの歩き方
Kubernetesセキュリティの歩き方Kubernetesセキュリティの歩き方
Kubernetesセキュリティの歩き方
 
LIFULLの全社アプリケーション実行基盤 KEEL について
LIFULLの全社アプリケーション実行基盤 KEEL についてLIFULLの全社アプリケーション実行基盤 KEEL について
LIFULLの全社アプリケーション実行基盤 KEEL について
 
Kubernetesクラスタバージョンアップを支える技術
Kubernetesクラスタバージョンアップを支える技術Kubernetesクラスタバージョンアップを支える技術
Kubernetesクラスタバージョンアップを支える技術
 
LIFULL HOME'SでのSolrの構成と運用の変遷
LIFULL HOME'SでのSolrの構成と運用の変遷LIFULL HOME'SでのSolrの構成と運用の変遷
LIFULL HOME'SでのSolrの構成と運用の変遷
 
LIFULLでは新卒エンジニアに 丸一日のテスト研修を行なっている
LIFULLでは新卒エンジニアに 丸一日のテスト研修を行なっているLIFULLでは新卒エンジニアに 丸一日のテスト研修を行なっている
LIFULLでは新卒エンジニアに 丸一日のテスト研修を行なっている
 
SaPID を導入するまでとそれから
SaPID を導入するまでとそれからSaPID を導入するまでとそれから
SaPID を導入するまでとそれから
 
3D間取りを支える技術
3D間取りを支える技術3D間取りを支える技術
3D間取りを支える技術
 
LIFULL HOME'Sのおとり広告予測モデルの開発
LIFULL HOME'Sのおとり広告予測モデルの開発LIFULL HOME'Sのおとり広告予測モデルの開発
LIFULL HOME'Sのおとり広告予測モデルの開発
 
大企業でアジャイル開発を推進できる条件とその心構え
大企業でアジャイル開発を推進できる条件とその心構え大企業でアジャイル開発を推進できる条件とその心構え
大企業でアジャイル開発を推進できる条件とその心構え
 
スクラムを利用したアジャイルオフショア開発のとりくみ
スクラムを利用したアジャイルオフショア開発のとりくみスクラムを利用したアジャイルオフショア開発のとりくみ
スクラムを利用したアジャイルオフショア開発のとりくみ
 
実践 マーケティングテクノロジーエンジニア
実践 マーケティングテクノロジーエンジニア実践 マーケティングテクノロジーエンジニア
実践 マーケティングテクノロジーエンジニア
 
エンジニア × マーケティングテクノロジー が必要な理由
エンジニア × マーケティングテクノロジー が必要な理由エンジニア × マーケティングテクノロジー が必要な理由
エンジニア × マーケティングテクノロジー が必要な理由
 
「空飛ぶホームズくん」を実現するVR技術
「空飛ぶホームズくん」を実現するVR技術「空飛ぶホームズくん」を実現するVR技術
「空飛ぶホームズくん」を実現するVR技術
 
ニオイセンサで思索する街の新たな指標
ニオイセンサで思索する街の新たな指標ニオイセンサで思索する街の新たな指標
ニオイセンサで思索する街の新たな指標
 
Well-beingを測る「LIFE WILL」開発の舞台裏
Well-beingを測る「LIFE WILL」開発の舞台裏Well-beingを測る「LIFE WILL」開発の舞台裏
Well-beingを測る「LIFE WILL」開発の舞台裏
 
㊗ LINE新着物件通知 リリース!! PJ進行に沿って話す、 PjM/PdMとして やったこと
㊗ LINE新着物件通知 リリース!! PJ進行に沿って話す、 PjM/PdMとして やったこと㊗ LINE新着物件通知 リリース!! PJ進行に沿って話す、 PjM/PdMとして やったこと
㊗ LINE新着物件通知 リリース!! PJ進行に沿って話す、 PjM/PdMとして やったこと
 
ウェブアクセシビリティ推進活動はじめました
ウェブアクセシビリティ推進活動はじめましたウェブアクセシビリティ推進活動はじめました
ウェブアクセシビリティ推進活動はじめました
 
大きめレガシープロジェクトのフロント行く末
大きめレガシープロジェクトのフロント行く末大きめレガシープロジェクトのフロント行く末
大きめレガシープロジェクトのフロント行く末
 

Dernier

プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価sugiuralab
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールsugiuralab
 

Dernier (7)

プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツール
 

【Ltech#8】技術的負債返済・実装改善に関する事例紹介

  • 2. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。2 アジェンダ • 自己紹介 • はじめに • 技術的負債返済・実装改善に関する取り組み – Code Climate活用事例 – 効果的な負債返済計画 – Datadog APM活用事例 – Buckyを活用事例 • まとめ
  • 3. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。3 自己紹介 清水通直 しみず みちなお @shimimi ● 2018年 LIFULL中途入社 ● 今年で2年目 ○ Webアプリケーション開発 ○ 開発効率向上に関する取り組み ○ パフォーマンス改善に対する取り組み ○ 技術的負債返済に関する取り組み 現在に至る
  • 4. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。4 1. はじめに
  • 5. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。5 1. はじめに エントロピー増大則 「断熱系において不可逆変化が生じた場合、その系のエントロピーは増大す る。」 引用元 Wikipedia ソフトウェアも同様、問題のある実装を放置しておくと そこからまた新たな問題が生まれ、腐敗していきます。 そのため、早期に問題のある実装を取り除いていくことは効果的ですが 既に負債を抱えてしまった大規模プロダクトの場合には いくら取り除いても、新規開発の速度に負けてしまい 完済目処が立たない可能性があります。
  • 6. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。6 1. はじめに そのため、様々なツール・サービスを活用し リファクタリングの精度・効率を高めることや リファクタリング以外の改善アプローチを 行なった事例をご紹介させていただきます。
  • 7. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。7 1. Code Climate活用事例
  • 8. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。8 1. Code Climate改善事例 渡された値が 特定の数値間の範囲内の場合 →範囲の上限値を返す 最大値を超える場合 →最大値+1を返す このような冗長な実装があります。
  • 9. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。9 1. Code Climate改善事例 Code Climate CLI を実行すると、認知的複雑度は12で デフォルトの規定値5を超えていることがわかります。
  • 10. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。10 1. Code Climate改善事例 POINT JSONで出力すると Code Climate Quality でも見ることのできない 改善ポイントや、緊急度など を見ることができます
  • 11. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。11 1. Code Climate改善事例 認知的複雑度が5まで下がるように 実装改善をおこないました。
  • 12. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。12 1. Code Climate改善事例 再度解析を行うと問題は無事解消されていました。 もう一つのissue(850,000)も同時に解消されているので 「1,650,000 remediation points 返済完了」となります。
  • 13. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。 このような細かい改善を少人数でいくつか行いました。 しかし、同期間の新規開発によりそれ以上の負債が新たに増えました。 大規模プロダクトであるほど開発は活発ですので 負債が増えやすい構造を改善していかない限り 負債増加速度 > 負債返済速度となります。 効果的な負債返済計画を立てる必要があると思いました。 13 1. Code Climate改善事例 POINT
  • 14. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。14 2. 効果的な負債返済計画
  • 15. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。15 2. 効果的な負債返済計画 プロダクトの技術的負債の返済と プロダクトのさらなる発展のバランスを どのように保つべきでしょうか。
  • 16. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。16 2. 効果的な負債返済計画 POINT新規開発停止(Project Inversion) 「2011年に株式公開に成功してから6か月たっても、LinkedInは、問題を起こしがちなデプ ロイとの格闘を続けていた。その苦痛が耐えられないものになったので、LinkedInは Operation InVersionを発足させた。コンピューティング環境、デプロイ、アーキテクチャの テクチャのオーバーホールのために、2か月にわたって新機能の開発をすべて停止した のである。」 「社内のトップエンジニアたちは、新機能の開発を完全にストップさせ、部門全体でサイト のコアインフラストラクチャに修正を加えることにした。」 「Project InVersionは、10年近くにわたって蓄積されたLinkedInの技術的負債を解消する ことにより、安全と安全性を確保するとともに、会社の成長の次の段階に備えたものにな った。」 引用元 The DevOps ハンドブック 理論・原則・実践のすべて 全員で負債返済
  • 17. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。17 2. 効果的な負債返済計画 新規開発と共に 新規の機能開発は行うものの、直面した技術的負債に関する指摘は解消しなければなら ないようにします。Githubのブランチ保護設定で品質に関する指摘解消の遵守を強制する 制すると、問題のある実装はマージできなくなります。技術的負債は減少方向にのみ動く ことが約束されます。 技術的負債が減少する一方、負債量によっては開発速度も低下します。既に負債量が大 きすぎる場合には、新規開発自体よりもそれに付随する負債の返済コストで首が回らなく なり、Project Inversionと同様の状態になる可能性があります。 新規開発チームのライフワークに沿った返済
  • 18. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。18 2. 効果的な負債返済計画 負債返済チーム 新規開発チームとは別に、負債返済を目的とする専任チームを発足します。負 債返済チームは、改善ノウハウを新規開発チームにフィードバックし、今後の新 時に同様の方法での実装改善を促進します。既存の負債を解消しつつ、ノウハウ で今後の負債も増えにくくするループを作り出します。 Githubのブランチ保護設定では、品質に関する指摘を通知するに留め、可能な限 ことを促すものの強制はしません。新規開発チームのビジネス的な優先度を優先 す。 負債返済チームによる改善と、新規開発チームが負債返済チームのノウハウを吸 ていくことにより、緩やかに負債を返済していくこととなります。 新規開発チーム 負債返済チーム
  • 19. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。 負債返済チーム+負債発生原因解消チーム 前案の技術的負債返済チームに加えて、既存の技術的負債が積み立てられてきた背 景・経緯を分析し解消する専任チームを発足します。 このチームは、技術的負債それ自体に目を向けるのではなく、それらが積立てられてき た経緯・背景、より原始的な問題を探り、アーキテクチャの再設計・開発リードタイムの可 視化・開発サイクルやフロー効率の改善などを行っていき、技術的負債が生まれにくい にくい状態に変革していきます。 弊社は現在、このようなフォーメーションで、 プロダクトの発展を止めることなく、技術的負債と向き合っています。 19 2. 効果的な負債返済計画 POINT 新規開発チーム 負債返済チーム 負債原因解消チーム
  • 20. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。20 3. Datadog APM活用事例
  • 21. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。21 3. Datadog APM活用事例 最初に示したCode Climate CLI / Qualityは 具体的な実装改善にとても便利なのですが 以下を考慮しないため、複数の指摘の中からより効果的なものを選定しづ らいです。 ・実行順序による影響度 ・実行速度へのインパクト ・システムメトリクスへの影響度 Datadog APMを併用すると、これらが分析可能になりました。
  • 22. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。22 3. Datadog APM活用事例 分散トレーシングの技術により、異なる言語で作られた複数コンポーネント 間の実行順序や、ボトルネックがわかります。
  • 23. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。23 3. Datadog APM活用事例 マルチスレッドの処理は、可視化することで、一番遅いスレッドの処理の み改善する等、効果的な実装改善が可能になりました。
  • 24. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。24 3. Datadog APM活用事例 Datadog APMで実際に改善した事例 1. 特定の画面のBackend TTFBが遅い原因を調査 2. 呼ばれているAPIをAPMで掘り下げていく 3. Ruby製APIの1つのエンドポイントの中で、JSONのencode/decode処理 が頻繁に使われており、それぞれは微小でも、1リクエスト間の合計では 120msを費やしていることが明らかになった 4. 実装改善によりその大部分を削減し、数十MBのメモリリソースとのトレ ードオフで100 ms改善できることがわかった 5. 実施・改善
  • 25. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。25 4. Bucky活用事例
  • 26. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。26 4. Bucky活用事例 最後に、安心して様々な改善を行っていくために 各INPUTパターン(HTTP Request)から 最終的にユーザーにどう表示されるかまでを含めた E2Eテストが手軽に行える状態になると 安心した改善が行え、捗ると思います。
  • 27. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。27 4. Bucky活用事例 弊社のOSS「Bucky」では、このようなE2Eテストが 簡単なYAMLファイルを書いていくだけで 作っていくことができます。
  • 28. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。28 4. Bucky活用事例 Buckyで実際に防げた問題の事例 1. ある機能開発が完了 2. Buckyの実施結果も正常 3. developブランチを取り込み、再度Buckyを実行 4. 問題発生(影響範囲と認識していない部分でのエラー画面) 5. 原因調査 6. featureブランチ単体でも、developブランチ単体でも問題はないが、 両者が合わさると問題となる既存の複合バグであり、いつ起こって もおかしくない潜在的なバグであることがわかった もし事前にBuckyを回していなければ、マージされdevelopブランチで問 題が初めて発生し、混乱を招いていたことになります。
  • 29. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。29 5. まとめ
  • 30. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。 5. まとめ 使用ツール・サービス 長所 短所 1 Code Climate Quality • 技術的負債がわかりやすい • 対症療法的な負債返済が可能 • 開発サイクルに言及しない • 実行順序等を考慮しない 2 Code Climate CLI • 無料でローカルでQuality同等の機能が使える • JSONで解析ローデータを出力し解析できる • 上記同様 3 Code Climate Velocity • Github上で表現される開発サイクルを可視化・ 分析できる • Github上で表現されない部分は含まれな い 4 Datadog APM • 分析より可視化 • 実行順序を考慮した改善ができる • 実行速度を意識した実装改善が可能 • 何が良くないかは示してはくれない • クライアントサイドのスクリプトには対 応できない 5 Bucky • E2Eテスト仕様をYAMLで蓄積 • 改善の過程での、予期せぬ他への影響を検知 • 安心して改善を進めていくためのパートナー
  • 31. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。 5. まとめ 大規模の場合、効果的な負債返済計画を立てる必要がある。 (1)Project InVersion (2)新規開発と共に (3)負債返済チーム (4)負債返済チーム+発生原因解消チーム 全員で負債返済 新規開発チームのライフワークに沿った返済 新規開発チーム 負債返済チーム 新規開発チーム 負債返済チーム 負債原因解消チーム
  • 32. © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。 5. まとめ 戦いは続く