リファクタリング計画テンプレート
リファクタリング作業を文書化し、進捗を追跡するためのテンプレートである。
プロジェクト情報
| 項目 | 値 |
|---|---|
| プロジェクト/モジュール | [プロジェクト名] |
| 対象ファイル | [リファクタリング対象ファイルの一覧] |
| 作成日 | [日付] |
| 作成者 | [氏名] |
| ステータス | Draft / In Review / Approved / In Progress / Completed |
エグゼクティブサマリー
目標
- [主目標: 例、決済処理の可読性向上]
- [副目標: 例、コード重複の削減]
- [第三目標: 例、テスト容易性の向上]
制約
- [制約 1: 例、公開 API は変更不可]
- [制約 2: 例、後方互換性を維持すること]
- [制約 3: 例、データベーススキーマは変更しない]
リスクレベル
- Low - 小規模変更、十分にテストされたコード
- Medium - 中規模変更、ある程度のリスクあり
- High - 大規模変更、慎重な対応が必要
リファクタリング前チェックリスト
テストカバレッジの評価
| 指標 | 現状 | 目標 | ステータス |
|---|---|---|---|
| ユニットテストカバレッジ | __% | ≥80% | |
| 統合テスト | Yes/No | Yes | |
| 全テストがパス | Yes/No | Yes |
開始前に必要な事項
- 全テストがパスしている
- コードがレビューされ理解されている
- バックアップ/バージョン管理が準備済み
- ユーザーの承認を得ている
検出されたコードスメル
サマリー
| # | スメル | 場所 | 深刻度 | 優先度 |
|---|---|---|---|---|
| 1 | [例、Long Method(長すぎる関数)] | [file:line] | High | P1 |
| 2 | [例、Duplicate Code(重複したコード)] | [file:line] | Medium | P2 |
| 3 | [例、Feature Envy(機能の横恋慕)] | [file:line] | Low | P3 |
詳細分析
スメル #1: [名称]
場所: path/to/file.js:45-120
説明: [問題点の詳細説明]
影響:
- [影響 1]
- [影響 2]
提案する解決策: [修正方法の概要]
リファクタリングのフェーズ
フェーズ A: クイックウィン(低リスク)
目的: 即効性のあるシンプルな改善
変更見積もり: [X ファイル、Y メソッド]
ユーザー承認の要否: Yes / No
| # | タスク | ファイル | リファクタリング | ステータス |
|---|---|---|---|---|
| A1 | 変数 x を userCount に名称変更 | utils.js:15 | 変数名の変更 | [ ] |
| A2 | 未使用の oldHandler() を削除 | api.js:89 | デッドコードの削除 | [ ] |
| A3 | 重複バリデーションを抽出 | form.js:23,67 | メソッドの抽出 | [ ] |
ロールバック計画: コミット A1〜A3 を revert
フェーズ B: 構造改善(中リスク)
目的: コードの構成と明確さを改善する
変更見積もり: [X ファイル、Y メソッド]
ユーザー承認の要否: Yes
依存関係: フェーズ A 完了が前提
| # | タスク | ファイル | リファクタリング | ステータス |
|---|---|---|---|---|
| B1 | 長い関数から calculatePrice() を抽出 | order.js:45 | メソッドの抽出 | [ ] |
| B2 | OrderDetails パラメータオブジェクトを導入 | order.js:12 | パラメータオブジェクトの導入 | [ ] |
| B3 | formatAddress() を Address クラスに移動 | customer.js:78 | メソッドの移動 | [ ] |
ロールバック計画: フェーズ A 完了直後のコミットへ revert
フェーズ C: アーキテクチャ変更(高リスク)
目的: より深い構造上の問題に対処する
変更見積もり: [X ファイル、Y メソッド]
ユーザー承認の要否: Yes
依存関係: フェーズ A と B の完了が前提
| # | タスク | ファイル | リファクタリング | ステータス |
|---|---|---|---|---|
| C1 | 価格 switch をポリモーフィズムで置換 | pricing.js:30 | ポリモーフィズムによる条件記述の置き換え | [ ] |
| C2 | NotificationService クラスを抽出 | user.js:100 | クラスの抽出 | [ ] |
ロールバック計画: フェーズ B 完了直後のコミットへ revert
詳細なリファクタリング手順
タスク [ID]: [タスク名]
対処するスメル: [スメル名]
リファクタリング技法: [技法名]
リスクレベル: Low / Medium / High
コンテキスト
Before(現状):
javascript
// 現状のコードをここに貼り付けAfter(期待される状態):
javascript
// 期待されるコードをここに貼り付けステップごとの手順
ステップ 1: [説明]
- テスト: このステップ後にテストを実行する
- 期待結果: 全テストがパスする
ステップ 2: [説明]
- テスト: このステップ後にテストを実行する
- 期待結果: 全テストがパスする
ステップ 3: [説明]
- テスト: このステップ後にテストを実行する
- 期待結果: 全テストがパスする
検証
- 全テストがパスする
- 振る舞いが変わっていない
- コードがコンパイルできる
- 新たな警告が出ていない
コミットメッセージ
refactor: [リファクタリング内容を記述]進捗管理
フェーズステータス
| フェーズ | ステータス | 開始日 | 完了日 | テストパス |
|---|---|---|---|---|
| A | Not Started / In Progress / Done | |||
| B | Not Started / In Progress / Done | |||
| C | Not Started / In Progress / Done |
発生した課題
| # | 課題 | 解決策 | ステータス |
|---|---|---|---|
| 1 | [説明] | [解決方法] | Open / Resolved |
メトリクス比較
リファクタリング前
| 指標 | File 1 | File 2 | 合計 |
|---|---|---|---|
| コード行数 | |||
| 循環的複雑度 | |||
| 保守性指数 | |||
| メソッド数 | |||
| 平均メソッド行数 |
リファクタリング後
| 指標 | File 1 | File 2 | 合計 | 変化 |
|---|---|---|---|---|
| コード行数 | ||||
| 循環的複雑度 | ||||
| 保守性指数 | ||||
| メソッド数 | ||||
| 平均メソッド行数 |
リファクタリング後チェックリスト
- 全テストがパスする
- 新たな警告やエラーが出ていない
- コードが正常にコンパイルできる
- 手動検証が完了している
- ドキュメントが必要に応じて更新されている
- コードレビュー済み
- メトリクスが改善している
- ユーザーの承認を得ている
学んだ教訓
良かった点
- [項目 1]
- [項目 2]
改善余地
- [項目 1]
- [項目 2]
今後への提言
- [項目 1]
- [項目 2]
承認
| 役割 | 氏名 | 日付 | 署名 |
|---|---|---|---|
| 計画作成者 | |||
| テクニカルリード | |||
| プロダクトオーナー |
付録
A. 関連ドキュメント
- [関連ドキュメントへのリンク]
B. 参考資料
- [コードスメルカタログへのリンク]
- [リファクタリングカタログへのリンク]
C. 使用したツール
- [テストフレームワーク]
- [リンタツール]
- [複雑度解析ツール]

