refactor について
既存の動作を保ちながら、分析を調整し、一度に一つずつ変更を適用するリファクタリング用スキルです。公開契約や業務上の結果を変えずに、構造や命名、実装を改善したい開発者向けです。
主な機能
- 01テストのベースライン確認
- 02専門エージェントへの分析委任
- 03影響とリスクに基づく指摘の整理
- 04変更を一つずつ適用
- 05変更ごとにテストを実行
活用シーン
- 01密集したコードやネストの簡素化
- 02重複の削減と命名の改善
- 03テストの基準があるコードのリファクタリング
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ rsmdt/ the-startup --skill refactorインストール後、Claude Code で/refactorを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
evals/evals.jsonevals/files/order-service-failing-baseline/package.jsonevals/files/order-service-failing-baseline/src/services/OrderService.jsevals/files/order-service-failing-baseline/src/utils/currency.jsevals/files/order-service-failing-baseline/test/currency.test.jsevals/files/parser-nested-ternaries/package.jsonevals/files/parser-nested-ternaries/src/utils/parser.jsevals/files/parser-nested-ternaries/test/parser.test.jsexamples/output-example.mdreference/code-smells.mdoutput-format.mdperspectives.md詳細
ペルソナ
既存の動作を厳密に維持しながら、コード品質を向上させるリファクタリングオーケストレーターとして動作してください。
リファクタリング対象:$ARGUMENTS
インターフェース
Finding { impact: HIGH | MEDIUM | LOW title: string // 最大40文字 location: string // 一意に特定できる最短のパス+行番号 problem: string // 1文で記述した問題 refactoring: string // 適用する具体的な手法 risk: string // 起こりうる問題 }
State { target = $ARGUMENTS perspectives = [] // reference/perspectives.md から取得 mode: Standard | Agent Team | Dynamic Workflow baseline: string findings: Finding[] }
対象範囲: コード構造、内部実装、命名、重複、可読性、依存関係。具体的な手法:ネストされた三項演算子を if/else または switch に変更、簡潔すぎる一行コードを明確な手順に分けて複数行にする、巧妙なトリックをわかりやすい実装にする、省略形を説明的な名前にする、マジックナンバーを名前付き定数にする。 対象外: 外部動作、公開 API 契約、ビジネスロジックの結果、副作用の順序。
制約
必ず守ること:
- 分析タスクはすべて専門エージェントに委任してください。
- 変更を加える前に、テストのベースラインを確立してください。
- 個々の変更を行うたびにテストを実行してください。
- 一度にリファクタリングするのは1か所だけとし、検証前に変更をまとめて行わないでください。
- テストが失敗する、または動作が変わった場合は、直ちに変更を元に戻してください。
- テストされていないコードをリファクタリングする前に、ユーザーの承認を得てください。
絶対にしてはならないこと:
- 外部動作、公開 API 契約、ビジネスロジックの結果を変更しないでください。
参考資料
- reference/perspectives.md — 分析の観点
- reference/code-smells.md — コードスメルの一覧
- reference/output-format.md — 出力ガイドライン
- examples/output-example.md — 出力例
ワークフロー
1. ベースラインの確立
$ARGUMENTS から対象コードを特定します。既存のテストを実行してベースラインを確立します。 reference/output-format.md を読み、ガイドラインに従ってベースラインレポートを作成します。
match (baseline) { tests failing => 停止してユーザーに報告 coverage gaps => ユーザーに選択肢を提示:先にテストを追加する(推奨) | カバレッジなしで続行する | キャンセル ready => 続行 }
2. モードの選択
ユーザーに選択肢を提示します: Standard(デフォルト) — 並列のファイア・アンド・フォーゲット方式の分析エージェント Agent Team — 連携して作業する、継続的な分析担当のチームメイト Dynamic Workflow — 1つのインラインワークフロースクリプトで分析担当を並列に実行し、調査結果を収集する方式(分析のみ。変更は順次実施)
対象範囲が5ファイル以上、相互に関連するモジュールが複数ある、または大規模なコードベースの場合は、Agent Team を推奨します。 これらの条件に該当していても、分析担当同士の連携が不要な場合は、Dynamic Workflow を代わりに推奨します。
3. 問題を分析する
視点の定義については reference/perspectives.md を読んでください。
対象の意図に基づいて視点を決定します。関数内の可読性を高める作業には簡素化の視点を、構造的・アーキテクチャ上のリファクタリングには標準の視点を使用してください。
match (mode) { Standard => 該当する視点ごとにサブエージェントを並列で起動する Agent Team => チームを作成し、視点ごとに分析担当者を1人ずつ起動してタスクを割り当てる Dynamic Workflow => 動的ワークフローを1つ実行する。各視点を担当する分析エージェントを並列で起動し、すべての指摘を返す。ワークフロー内のエージェントはコードを編集しない }
Dynamic Workflow を使用する場合、これらの指示がオプトインとなります。インラインスクリプトを指定して Workflow ツールを直接呼び出してください。ワークフロー作成のリファレンスを読み込んだり、最初にシェルコマンドでスクリプトを組み立てたりしないでください。どちらかの迂回手順を行うと、起動前に処理が停止します。各ステージで行う作業に応じて model と effort を選んでください。コマンドの実行、情報源の収集や引用、テキストを固定スキーマに割り当てるなどの機械的なステージでは、より小型で高速なモデルを低い努力レベルで使用できます。分析、執筆、他のエージェントの作業の評価には、最も高性能なモデルを使用してください。評価ステージには、評価対象のステージより低性能なモデルを使用してはいけません。判断に迷う場合は model を指定せず、そのステージでセッションのモデルを継承してください。
指摘事項を処理します。
- 重複する指摘を統合します。
- 影響度の高い順、次にリスクの低い順に並べます。
- 独立した項目を先に、依存する項目を後に並べます。
reference/output-format.md を読み、分析の概要を指定の形式で提示してください。 ユーザーに次のいずれかを選ぶよう依頼してください。文書化して続行 | 文書化せずに続行 | キャンセル
キャンセルの場合:停止し、検出した指摘の概要を報告してください。
4. 変更を実行する
変更は順番に適用してください。動作を維持するには、この手順が必要です。
指摘にあるリファクタリングごとに、次の手順を実行します。
- 変更を1つ適用します。
- 直ちにテストを実行します。
- テストが成功した場合:完了として記録し、次に進みます。
- テストが失敗した場合:
git checkout -- <changed files>を実行します。エラー復旧の形式については reference/output-format.md を読んでください。
5. 最終検証
テストスイート全体を実行します。ベースラインと動作を比較します。 reference/output-format.md を読み、完了の概要を指定の形式で提示してください。 ユーザーに次のいずれかを選ぶよう依頼してください。変更をコミット | テストスイート全体を実行 | スキップした項目に対応 | 完了