レガシーコード改善のガイド。テストなし・ドキュメントなしのコードを安全に改善する手法を提供。 Use for: "レガシーコード", "テストがない", "引き継いだコード", "リファクタリング", "技術的負債", "コード改善"
t_wadaの「実録レガシーコード改善」に基づく実践的アプローチ。
1. 現状確認 → 2. 闘う準備を整える → 3. 段階的に改善
コードの状態を把握:
[ ] バージョン管理の有無
[ ] テストの有無
[ ] 自動化(CI/CD)の有無
[ ] 主要ロジックの特定
[ ] 外部依存の把握
開発の3本柱を確立(優先度順):
「undefinedでなければ良い」程度の雑さで始める:
it('returns something', () => {
assert(result !== undefined);
});
| 状況 | 戦術 | 説明 |
|---|---|---|
| 既存コードをテストで保護可能 | Extract | ロジックを抽出してテスト |
| 既存コードが複雑すぎる | Sprout | 新コードを別に育てる |
外部依存やランダム性を関数引数として差し込み可能にする:
// Before: テスト困難
function getNext() {
return Math.random() * items.length;
}
// After: テスト可能
function createHandler(getNextIndex) {
// getNextIndexを外から渡せる
}
フレームワーク依存をPlain Oldオブジェクトから分離:
[Framework層] → [Plain Old モデル] ← [テスト]
Plain Oldオブジェクトは高速にテスト可能。