技術的負債
技術的負債とは
技術的負債は、目先のスピードを優先した結果として残る、将来の開発を遅くするコードや設計の問題を借金にたとえた言葉です。
借金と同じで、負債そのものが悪とは限りません。締め切りに間に合わせるために「今はこの作りで行く」と割り切るのは、合理的な判断であることも多いのです。問題は利子です。負債を放置すると、変更のたびに余計な時間がかかり(利子の支払い)、やがて「怖くて誰も触れないコード」になります(返済不能)。
負債はどこから生まれるか
| 発生源 | 例 |
|---|---|
| 意図的な近道 | 「リリース優先で暫定実装。後で直す」 |
| 知識不足 | 当時はそれが最善だと思っていた設計 |
| 環境の変化 | 仕様変更の積み重ねで設計と現実がズレた |
| 放置 | 更新されない依存ライブラリ、消し忘れたコード |
重要なのは、まじめに開発していても負債は自然に溜まるという点です。「負債ゼロ」は目指すものではなく、返済を回し続けることが目標になります。
負債とどう付き合うか
- 見える化する — 「後で直す」をコード内の TODO コメントやチケットとして記録し、存在を忘れない
- 計画的に返済する — [[リファクタリング]] の時間をスプリントに組み込む。「時間が余ったら」では永遠にやりません
- 利子の大きい負債から返す — 頻繁に触るコードの負債ほど利子が高い。滅多に触らないコードの負債は後回しでよい
- 新規の負債を抑える — [[コードレビュー]] と [[クリーンコード]] の習慣が、負債の発生ペースを抑えます
初学者向けポイント
- 「汚いコード=技術的負債」と単純化しないようにしましょう。負債かどうかは将来の変更を遅らせるかで決まります
- 負債の説明には借金のメタファーがそのまま使えます。「この実装は元本100万・月利10%の借金です」という言い方は、非エンジニアへの説明にも有効です
- 負債の返済は機能追加と違って目に見える成果が出にくいため、[[見積もりとベロシティ]] への影響(返済すると開発速度が回復する)として語ると理解を得やすくなります
- 触るのが怖いコードに出会ったら、それが負債の「利子」を体感している瞬間です
関連技術とのつながり
- [[リファクタリング]] — 負債を返済する具体的な手段
- [[クリーンコード]] — 新規の負債発生を抑える日々の習慣
- [[コードレビュー]] — 負債になりそうな実装を早期に検知するゲート
- [[見積もりとベロシティ]] — 負債は開発速度の低下として現れる
Q: 技術的負債の「利子」にあたるものはどれ?
- [x] 負債を放置している間、変更のたびに余計にかかる時間
- [ ] 依存ライブラリの利用料金
- [ ] サーバーの月額費用
解説: 負債を抱えたコードは変更のたびに余計な時間を要求します。これが借金の利子にたとえられています。
Q: 技術的負債について本文の説明と合致するのはどれ?
- [ ] 負債は常に悪であり、発生させた人の責任問題である
- [x] 意図的な割り切りとして負債を作るのは合理的な場合もある
- [ ] まじめに開発していれば負債は発生しない
解説: 締め切り優先の割り切りは合理的なこともあり、また知識不足や環境変化によって負債は自然に溜まります。
Q: 負債の返済順として本文が推奨しているのはどれ?
- [ ] 発見した順にすべて返済する
- [ ] 滅多に触らないコードの負債を最優先する
- [x] 頻繁に触るコードの負債(利子が大きいもの)から返す
解説: 利子は触る頻度に比例します。頻繁に変更するコードの負債ほど返済の効果が大きくなります。