ストーリー
佐藤CTOは厳しい表情でした。
定量化の4つのアプローチ
アプローチ1: コードメトリクスによる定量化
静的解析ツールが提供するメトリクスを活用します。
| メトリクス | ツール | 負債との関連 |
|---|---|---|
| 技術負債比率(Technical Debt Ratio) | SonarQube | 修正コスト / 開発コスト × 100% |
| サイクロマチック複雑度 | SonarQube, ESLint | 高複雑度 = テスト困難 = 負債 |
| コード重複率 | SonarQube, jscpd | 重複 = 変更時の追加コスト |
| 依存関係の深さ | Madge, deptree | 深い依存 = 変更の影響範囲大 |
# SonarQube メトリクスの読み方
sonarqube_metrics:
technical_debt_ratio:
A: "< 5%" # 優秀
B: "5-10%" # 許容範囲
C: "10-20%" # 要注意
D: "20-50%" # 深刻
E: "> 50%" # 危険
example:
project: "PayFlow Backend"
total_dev_effort: "2,400人時(約300人日)"
remediation_cost: "360人時(約45人日)"
debt_ratio: "15% (Rating: C)"
interpretation: "開発コストの15%に相当する負債が蓄積"
アプローチ2: DORA メトリクスへの影響分析
技術負債が開発パフォーマンスに与える影響をDORAメトリクスで測定します。
| DORA メトリクス | 負債の影響 | 測定方法 |
|---|---|---|
| デプロイ頻度 | 負債が多いと頻度が下がる | デプロイ回数/週の推移 |
| リードタイム | 負債が多いと延びる | コミットからデプロイまでの時間 |
| 変更失敗率 | 負債が多いと上がる | デプロイ後のロールバック率 |
| 復旧時間(MTTR) | 負債が多いと長くなる | 障害検知から復旧までの時間 |
graph TD
subgraph Chart["デプロイ頻度の推移と負債の関係"]
direction LR
M1["1月
6回/週"] --> M2["2月
8回/週"]
M2 --> M3["3月
10回/週"]
M3 --> M4["4月
12回/週"]
M4 --> M5["5月
10回/週"]
M5 --> M6["6月
8回/週"]
M6 --> M7["7月
6回/週"]
M7 --> M8["8月
4回/週"]
M8 --> M9["9月
2回/週
← 負債の蓄積"]
end
style M1 fill:#d1fae5,stroke:#059669,color:#065f46
style M2 fill:#d1fae5,stroke:#059669,color:#065f46
style M3 fill:#d1fae5,stroke:#059669,color:#065f46
style M4 fill:#dbeafe,stroke:#2563eb,stroke-width:2px,color:#1e40af
style M5 fill:#fef3c7,stroke:#d97706,stroke-width:2px,color:#92400e
style M6 fill:#fef3c7,stroke:#d97706,stroke-width:2px,color:#92400e
style M7 fill:#fef3c7,stroke:#d97706,stroke-width:2px,color:#92400e
style M8 fill:#fee2e2,stroke:#dc2626,color:#991b1b
style M9 fill:#fee2e2,stroke:#dc2626,color:#991b1b
アプローチ3: 開発者サーベイ
定量データだけでは捉えられない負債の影響を開発者に聞きます。
## 技術負債サーベイ(四半期実施)
### Q1. 先月、技術負債が原因で余分にかかった時間は?
- [ ] 0-5時間
- [ ] 5-10時間
- [ ] 10-20時間
- [ ] 20時間以上
### Q2. 最も影響の大きい技術負債を3つ挙げてください
1. [自由記述]
2. [自由記述]
3. [自由記述]
### Q3. 技術負債が原因で避けている作業はありますか?
[自由記述]
### Q4. 現在のコードベースの品質を10段階で評価してください
[1-10のスケール]
### Q5. 6ヶ月前と比べて、負債は増えていますか?減っていますか?
- [ ] 大幅に増加
- [ ] やや増加
- [ ] 変化なし
- [ ] やや減少
- [ ] 大幅に減少
アプローチ4: SQALE メソッド
SQALE(Software Quality Assessment based on Lifecycle Expectations)は、品質特性ごとに修正コストを見積もる体系的な手法です。
sqale_analysis:
characteristics:
- name: "テスタビリティ"
issues:
- "テストカバレッジ不足(対象: 150ファイル)"
- "テスト不可能な設計(依存注入なし: 30クラス)"
remediation_cost: "120人時"
- name: "変更容易性"
issues:
- "循環依存(12箇所)"
- "God Class(5クラス)"
remediation_cost: "80人時"
- name: "信頼性"
issues:
- "例外処理の不備(45箇所)"
- "リソースリーク(8箇所)"
remediation_cost: "40人時"
- name: "セキュリティ"
issues:
- "ハードコードされた認証情報(3箇所)"
- "SQLインジェクション可能性(2箇所)"
remediation_cost: "16人時"
total_remediation_cost: "256人時(約32人日)"
annual_interest: "月20人時 × 12 = 240人時/年"
roi_of_remediation: "256人時の投資で年240人時を節約"
負債の経済的インパクト計算
利子コストの算出
年間利子コスト = 負債起因の追加工数/年 × エンジニア時間単価
例:
月間追加工数: 80人時(開発者サーベイより)
年間追加工数: 80 × 12 = 960人時
エンジニア時間単価: 5,000円
年間利子コスト: 960 × 5,000 = 480万円
返済の ROI
返済ROI = (年間利子コスト × 想定削減率) / 返済コスト
例:
返済コスト: 256人時 × 5,000円 = 128万円
年間利子削減: 480万円 × 60% = 288万円
ROI = 288万円 / 128万円 = 2.25x(1年で投資回収、以降は純利益)
経営向けプレゼン用のサマリー
# 技術負債レポート - 2026年Q1
## エグゼクティブサマリー
- 現在の技術負債: 約256人日(SonarQube + 開発者サーベイより推計)
- 年間利子コスト: 約480万円(開発速度の低下として顕在化)
- 推奨返済投資: 128万円(Q2に集中投資)
- 期待効果: 年間288万円のコスト削減(ROI 2.25x)
## 放置した場合のリスク
- デプロイ頻度がさらに30%低下(現在週4回→週2.8回)
- 新機能リードタイムが2倍に(現在3日→6日)
- セキュリティインシデントリスクの増大
ダッシュボードの構築
技術負債の状況を常時監視するダッシュボードを構築します。
dashboard_panels:
- panel: "技術負債サマリー"
metrics:
- "総負債量(人日)"
- "月次の負債増減"
- "負債比率(Debt Ratio)"
- panel: "DORA メトリクス"
metrics:
- "デプロイ頻度(週次推移)"
- "リードタイム(中央値)"
- "変更失敗率"
- panel: "ホットスポット"
metrics:
- "負債スコア TOP 10 モジュール"
- "変更頻度 × 負債スコア マトリクス"
- panel: "トレンド"
metrics:
- "負債量の6ヶ月トレンド"
- "四半期サーベイスコア推移"
まとめ
| ポイント | 内容 |
|---|---|
| コードメトリクス | SonarQube等で技術負債比率を定量化 |
| DORAへの影響 | デプロイ頻度、リードタイム等で負債の影響を可視化 |
| 開発者サーベイ | 定量データでは捉えられない体感を数値化 |
| 経済的インパクト | 利子コストとROIで経営判断に変換 |
チェックリスト
- 4つの定量化アプローチを理解した
- 利子コストの算出方法を把握した
- 返済のROI計算ができるようになった
- ダッシュボードに必要なメトリクスを理解した
次のステップへ
次は「リファクタリング戦略」を学びます。定量化した負債に対して、どのように戦略的に返済していくかのアプローチを見ていきましょう。
推定読了時間: 40分