# リファクタリング計画テンプレート リファクタリング作業を文書化し、進捗を追跡するためのテンプレートである。 --- ## プロジェクト情報 | 項目 | 値 | |-------|-------| | **プロジェクト/モジュール** | [プロジェクト名] | | **対象ファイル** | [リファクタリング対象ファイルの一覧] | | **作成日** | [日付] | | **作成者** | [氏名] | | **ステータス** | 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. [ ] **ステップ 1**: [説明] - テスト: このステップ後にテストを実行する - 期待結果: 全テストがパスする 2. [ ] **ステップ 2**: [説明] - テスト: このステップ後にテストを実行する - 期待結果: 全テストがパスする 3. [ ] **ステップ 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. 使用したツール - [テストフレームワーク] - [リンタツール] - [複雑度解析ツール]