Skip to main content
ClaudeWave
Skill37k estrellas del repoactualizado 3d ago

refactor

This Claude Code skill guides systematic code refactoring using Martin Fowler's methodology, emphasizing test-driven, incremental changes that preserve external behavior while improving internal structure. Use it when addressing code maintainability, reducing technical debt, eliminating code smells, or cleaning up legacy code through a phased approach involving research, test coverage assessment, and safe implementation.

Instalar en Claude Code
Copiar
git clone --depth 1 https://github.com/luongnv89/claude-howto /tmp/refactor && cp -r /tmp/refactor/ja/03-skills/refactor ~/.claude/skills/refactor
Después abre una sesión nueva de Claude Code; el skill carga automáticamente.

SKILL.md

<!-- i18n-source: 03-skills/refactor/SKILL.md -->
<!-- i18n-source-sha: 245272f -->
<!-- i18n-date: 2026-04-27 -->
---
name: code-refactor
description: Martin Fowler の方法論に基づく体系的なコードリファクタリング。ユーザーがコードのリファクタリング、コード構造の改善、技術的負債の削減、レガシーコードのクリーンアップ、コードスメルの解消、コード保守性の向上を求めた際に使用する。本スキルは、リサーチ・計画・安全な段階的実装からなる段階的アプローチを案内する。
---

# コードリファクタリングスキル

Martin Fowler 著『Refactoring: Improving the Design of Existing Code』(第 2 版) に基づくコードリファクタリングへの体系的アプローチ。本スキルは、テストに支えられた安全で段階的な変更を重視する。

> "Refactoring is the process of changing a software system in such a way that it does not alter the external behavior of the code yet improves its internal structure." — Martin Fowler

## 中核となる原則

1. **振る舞いの保全**: 外部から見える振る舞いは変えてはならない
2. **小さなステップ**: テスト可能な微小な変更を積み重ねる
3. **テスト駆動**: テストはセーフティネットである
4. **継続的**: リファクタリングは一度きりの作業ではなく継続的に行う
5. **協調的**: 各フェーズでユーザーの承認が必要

## ワークフロー概要

```
Phase 1: Research & Analysis
    ↓
Phase 2: Test Coverage Assessment
    ↓
Phase 3: Code Smell Identification
    ↓
Phase 4: Refactoring Plan Creation
    ↓
Phase 5: Incremental Implementation
    ↓
Phase 6: Review & Iteration
```

---

## フェーズ 1: リサーチと分析

### 目的
- コードベースの構造と目的を把握する
- リファクタリングの範囲を特定する
- ビジネス要件に関するコンテキストを収集する

### ユーザーへの確認事項
開始前に次の点を明確化する。

1. **範囲**: どのファイル/モジュール/関数をリファクタリングするのか?
2. **目標**: 何を解決したいのか?(可読性、性能、保守性)
3. **制約**: 変更してはいけない領域はあるか?
4. **時間的圧力**: 他作業のブロッカーになっているか?
5. **テスト状況**: テストは存在するか?パスしているか?

### アクション
- [ ] 対象コードを読み、理解する
- [ ] 依存関係と統合箇所を洗い出す
- [ ] 現行アーキテクチャを文書化する
- [ ] 既存の技術的負債マーカー(TODO、FIXME)を控える

### 出力
ユーザーへの提示内容:
- コード構造のサマリー
- 検出された問題箇所
- 初期推奨事項
- **着手の承認を依頼する**

---

## フェーズ 2: テストカバレッジの評価

### なぜテストが重要か
> "Refactoring without tests is like driving without a seatbelt." — Martin Fowler

テストは安全なリファクタリングを可能にする**鍵となる要素**である。テストがなければ、バグを混入させるリスクがある。

### 評価ステップ

1. **既存テストの確認**
   ```bash
   # テストファイルを探す
   find . -name "*test*" -o -name "*spec*" | head -20
   ```

2. **既存テストの実行**
   ```bash
   # JavaScript/TypeScript
   npm test

   # Python
   pytest -v

   # Java
   mvn test
   ```

3. **カバレッジの確認(可能な場合)**
   ```bash
   # JavaScript
   npm run test:coverage

   # Python
   pytest --cov=.
   ```

### 判断ポイント: ユーザーへの確認

**テストが存在し、かつパスしている場合:**
- フェーズ 3 へ進む

**テストが不足、または不完全な場合:**
次の選択肢を提示する。
1. 先にテストを書く(推奨)
2. リファクタリング中に段階的にテストを追加する
3. テストなしで進める(リスクあり、ユーザーの明示的同意が必要)

**テストが失敗している場合:**
- STOP。リファクタリング前に失敗テストを修正する
- ユーザーに確認: 先にテストを直すべきか?

### テスト作成のガイドライン(必要時)

リファクタリング対象の各関数について、以下をテストでカバーする。
- ハッピーパス(通常動作)
- エッジケース(空入力、null、境界値)
- エラーシナリオ(無効入力、例外)

「red-green-refactor」サイクルを用いる。
1. 失敗するテストを書く(red)
2. パスさせる(green)
3. リファクタリングする

---

## フェーズ 3: コードスメルの特定

### コードスメルとは?
コードに潜むより深い問題の症状である。バグそのものではないが、コード改善の余地を示す指標となる。

### よくチェックすべきコードスメル

完全なカタログは [references/code-smells.md](references/code-smells.md) を参照。

#### クイックリファレンス

| スメル | 兆候 | 影響 |
|-------|-------|--------|
| **Long Method(長すぎる関数)** | メソッドが 30〜50 行を超える | 理解、テスト、保守が困難 |
| **Duplicated Code(重複したコード)** | 同じロジックが複数箇所に存在 | バグ修正を複数箇所で行う必要がある |
| **Large Class(巨大なクラス)** | 責務が多すぎるクラス | 単一責任原則に違反 |
| **Feature Envy(機能の横恋慕)** | 他クラスのデータを多く使用するメソッド | カプセル化が不十分 |
| **Primitive Obsession(プリミティブ型への執着)** | オブジェクト化すべき所をプリミティブで多用 | ドメイン概念が欠落 |
| **Long Parameter List(長すぎるパラメータリスト)** | パラメータが 4 個以上 | 正しく呼び出すのが困難 |
| **Data Clumps(データの群れ)** | 同じデータ項目が常に一緒に現れる | 抽象化が欠落 |
| **Switch Statements(スイッチ文)** | 複雑な switch / if-else の連鎖 | 拡張が困難 |
| **Speculative Generality(投機的一般化)** | 「念のため」のコード | 不要な複雑さ |
| **Dead Code(デッドコード)** | 使われていないコード | 混乱と保守負担 |

### 分析ステップ

1. **自動分析**(スクリプトが利用可能な場合)
   ```bash
   python scripts/detect-smells.py <file>
   ```

2. **手動レビュー**
   - コードを体系的に読み進める
   - 各スメルを場所と深刻度とともに記録する
   - 影響度別に分類する(Critical / High / Medium / Low)

3. **優先順位付け**
   次のようなスメルに注力する。
   - 現在の開発をブロックしているもの
   - バグや混乱を引き起こしているもの
   - 変更頻度が高いコードパスに影響するもの

### 出力: スメルレポート

ユーザーへの提示内容:
- 検出されたスメルの一覧と場所
- 各スメルの深刻度評価
- 推奨される優先順位
- **優先順位の承認を依頼する**

---

## フェーズ 4: リファクタリング計画の作成

### リファクタリング技法の選定

各スメルに対して、カタログから適切なリファクタリング技法を選ぶ。

完全な一覧は [references/refactoring-catalog.md](references/refactoring-catalog.md) を参照。

#### スメル別の推奨リファクタリング

| コードスメル | 推奨リファクタリング |
|------------|---------------------------|
| Long Method(長すぎる関数) | メソッドの抽出、Replace Temp with Query |
| Duplicated Code(重複したコード) | メソッドの抽出、Pull Up Method、Form Template Method |
| Large Class(巨大なクラス) | クラスの抽出、Extract Subclass |
| Feature Envy(機能の横恋慕) | Move Method、Move Field |
| Primitive Obsession(プリミティブ型への執着) | Replace Primitive with Object、Replace Type Code with Class |
| Long Parameter List(長すぎるパラメータリスト) | パラメータオブジェクトの導入、Preserve Whole Object |
| Data Clumps(データの群れ) | クラスの抽出、パラメータオブジェクトの導入 |
| Switch Statements(スイッチ文) | ポリモーフィズムによる条件記述の置き換え |
| Speculative Generality(投機的一般化) | Collapse Hierarchy、Inline Class、デッドコードの削除 |
| Dead Code(デッドコード) | デッドコードの削除 |

### 計画の構成

[templates/refactoring-plan.md](templates/refactoring-plan.md) のテンプレートを使用する。

各リファクタリングごとに次の項目を埋める。
1. **対象**: 何を変更するか
2. **スメル**: どの問題に対処するか
3. **リファクタリング**: どの技法を適用するか
4. **手順**: 細かいマイクロステップ
5. **リスク**: 何が失敗しうるか
6. **ロールバック**: 取り消す方法

### 段階的アプローチ

**重要**: リファクタリングはフェーズに分けて段階的に導入する。

**フェーズ A: クイックウィン**(低リスク、高価値)
- 明確化のための変数名変更
- 明らかな重複コードの抽出
- デッドコードの削除

**フェーズ B: 構造改善**(中リスク)
- 長すぎる関数からのメソッド抽出
- パラメータオブジェクトの導入
- メソッドを適切なクラスへ移動

**フェーズ C: アーキテクチャ変更**(高リスク)
- 条件分岐をポリモーフィズムで置換
- クラスの抽出
- デザインパターンの導入

### 判断ポイント: ユーザーへの計画提示

実装前に:
- 完全なリファクタリング計画を提示する
- 各フェーズの内容とリスクを説明する
- 各フェーズについて明示的な承認を得る
- **質問**: 「フェーズ A を進めてもよいか?」

---

## フェーズ 5: 段階的な実装

### ゴールデンルール
> "Change → Test → Green? → Commit → Next step"

### 実装のリズム

各リファクタリングステップで:

1. **事前チェック**
   - テストがパスしている(green)
   - コードがコンパイルできる

2. **小さな変更を 1 つだけ行う**
   - カタログのメカニクスに従う
   - 変更は最小限に保つ

3. **検証**
   - 直ちにテストを実行
   - コンパイルエラーがないか確認

4. **テストがパス(green)した場合**
   - 説明的なコミットメッセージでコミット
   - 次のステップへ進む

5. **テストが失敗(red)した場合**
   - 直ちに STOP
   - 変更を取り消す
   - 何が起きたかを分析する
   - 不明な場合はユーザーに確認する

### コミット戦略

各コミットは次の性質を満たすこと。
- **アトミック**: 論理的に 1 つの変更
- **可逆**: 容易に revert できる
- **説明的**: 明確なコミットメッセージ

コミットメッセージ例:
```
refactor: Extract calculateTotal() from processOrder()
refactor: Rename 'x' to 'customerCount' for clarity
refactor: R
lesson-quizSkill

Interactive lesson-level quiz for Claude Code tutorials. Tests understanding of a specific lesson (01-10) with 8-10 questions mixing conceptual and practical knowledge. Use before a lesson to pre-test, during to check progress, or after to verify mastery. Use when asked to "quiz me on hooks", "test my knowledge of lesson 3", "lesson quiz", "practice quiz for MCP", or "do I understand skills".

self-assessmentSkill

Comprehensive Claude Code self-assessment and learning path advisor. Runs a multi-category quiz covering 10 feature areas, produces a detailed skill profile with per-topic scores, identifies specific gaps, and generates a personalized learning path with prioritized next steps. Use when asked to "assess my level", "take the quiz", "find my level", "where should I start", "what should I learn next", "check my skills", "skill check", or "level up".

blog-draftSkill

根据想法和资料撰写博客草稿。适用于用户想写博客、基于研究创建内容,或起草文章的场景。流程会引导你完成调研、头脑风暴、提纲编写和带版本控制的迭代撰写。

brand-voice-consistencySkill

确保所有沟通内容都符合品牌语气和风格指南。适用于撰写营销文案、客户沟通、对外内容,或用户提到品牌语气、tone、写作风格的场景。

claude-mdSkill

按最佳实践创建或更新 CLAUDE.md 文件,以便为 AI agent 提供最优的项目入门上下文

code-review-specialistSkill

提供全面的代码审查能力,覆盖安全、性能和代码质量分析。适用于用户请求代码审查、代码质量评估、Pull Request 审查,或提到安全分析和性能优化时。

api-documentation-generatorSkill

从源代码生成全面且准确的 API 文档。适用于创建或更新 API 文档、生成 OpenAPI 规范,或在用户提到 API 文档、端点或说明时使用。

code-refactorSkill

基于 Martin Fowler 方法论的系统化代码重构 skill。适用于用户请求重构代码、改进代码结构、减少技术债、清理旧代码、消除 code smell 或提升可维护性时。这个 skill 采用分阶段、带研究与计划的安全增量实施方式。