← ClaudeAtlas

refactoringlisted

Change structure without changing behavior, guarded by tests, judging smells and how decisions are represented. Use when cleaning up code or touching legacy code(リファクタリング・コードスメル・分岐をデータ化・現状固定テスト).
devbasex/ai-plugins · ★ 1 · Code & Development · score 65
Install: claude install-skill devbasex/ai-plugins
# 安全な構造改善 **テストがなければ、それは構造改善ではなく単なる編集である。** 振る舞いが変わっていない ことを示す手段がない書き換えは、この Skill の対象外として扱う。 この工程は**レビューと同じく、実装のあとに必ず通す**。動くコードが出た時点では整理が済んで いないことを前提に置く。対象は書き換えた行だけでなく、**その呼び出し元・呼び出し先と、同じ ファイル・同じモジュールの関連箇所まで**を含む(範囲と例外は [references/code-smells.md](references/code-smells.md) の「手を付ける範囲」)。 ## 最初に決める 2 つのこと ### 1. 機能変更と構造改善を混ぜない 同じ差分に両方を入れると、レビュアーは「意図した振る舞いの変更」と「構造改善の事故」を 区別できない。 ```text ❌ 機能追加と同時に周辺を整理した 1 つのコミット ✅ コミット A: 構造改善(振る舞い不変。既存テストが通る) コミット B: 機能追加(新しいテストが増える) ``` 順序は **構造改善 → 機能変更** を既定とする。先に整理すると機能変更の差分が小さくなる。 ただし整理の必要性が機能変更を通して初め��分かった場合は、機能変更を先に通し、構造改善を 別の差分に切り出してもよい。 ### 2. テストの有無で手順を分ける | 状況 | 進め方 | | --- | --- | | 対象コードに振る舞いを担保するテストがある | 下の「テストがある場合」 | | テストがない・少ない・実装詳細に結合している | 下の「テストが乏しい既存コード」 | 判定は行数ではなく **これから変える経路がテストで通っているか**で行う。カバレッジの 数値ではなく、実際にその関数を通すテス��があるかを確認する。 ## テストがある場合 1. **変更前に既存テストを実行する。** ここで落ちているものがあれば、先に報告する 2. スメルを 1 つ選ぶ(一覧は [references/code-smells.md](references/code-smells.md)) 3. 対応する手法を選ぶ([references/refactoring-catalog.md](references/refactoring-catalog.md)。 スメル一覧で ★ が付いた手法はカタログに項目がなく、一覧の記述だけで進めてよい)。 分岐・反復・定数を**何にどう置き換えるか**は [references/data-representation.md](references/data-representation.md) で決める 4. **1 手だけ適用する** 5. テストを実行する。落ちたら直前の 1 手を戻す 6. 通ったらコミットする(1 手 = 1 コミットを既定とする) 7. 2 へ戻る 一度に複数のスメルへ手を入れない。落ちたときに原因を切り分けられなくなる。 ## テストが乏しい既存コード 振る舞いを変えないことを示す手段がないため、**先に手段を作る**。 ```mermaid flowchart TD A[構造分析] --> B[現状固定テストを追加] B --> C{現状の振る舞いは<br/>妥当か} C -->|妥当| D[段階的に改善] C -->|不具合を含む| E[不具合として別に扱う]