← 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 へ戻る 一度に複数の兆候へ手を入れない。落ちたときに原因を切り分けられなくなる。 **テストが構造に依存しているときは、テストも変える。** 「テストを変えない」を絶対の条件に すると、実装に歪みが入るか、構造が形だけ分かれる。**変えてよい範囲と、変えたことの判定は [references/test-changes.md](references/test-changes.md) が定める。** ## テストが乏しい既存コード 振る舞いを変えないことを示す手段が