<!-- i18n-source: 03-skills/refactor/templates/refactoring-plan.md -->
<!-- i18n-source-sha: 245272f -->
<!-- i18n-date: 2026-04-27 -->
# リファクタリング計画テンプレート

リファクタリング作業を文書化し、進捗を追跡するためのテンプレートである。

---

## プロジェクト情報

| 項目 | 値 |
|-------|-------|
| **プロジェクト/モジュール** | [プロジェクト名] |
| **対象ファイル** | [リファクタリング対象ファイルの一覧] |
| **作成日** | [日付] |
| **作成者** | [氏名] |
| **ステータス** | 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. 使用したツール
- [テストフレームワーク]
- [リンタツール]
- [複雑度解析ツール]
