refactor について
Refactorは、Gitの差分に対してCommand Centerのリファクタリングエージェントを実行するスキルです。ブランチ範囲、ステージ済み変更、作業ツリーの変更を処理でき、生成した変更はレビュー用に未コミットで残します。
主な機能
- 01指定したGit差分範囲のリファクタリング
- 02ステージ済みまたは作業ツリーの変更を選択
- 03重複コードの統合
- 04globによる変更ファイルの絞り込み
- 05実行状況と結果の逐次表示
活用シーン
- 01レビュー前のブランチのリファクタリング
- 02最近の変更にある重複コードの統合
- 03指定ファイルにリファクタリングを限定
- 04git diffで生成された変更を確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ command-center-ai/ skills --skill refactorインストール後、Claude Code で/refactorを入力して読み込まれたか確認します。
同梱ファイルcc-skill-lib.mjsrun.mjs
詳細
リファクタリング
差分に対して Command Center のリファクタリングエージェントを実行します。Command Center はリファクタリングを計画し、独自のコーディングエージェントのセッションを起動して変更を適用し、結果を作業ツリー内の未コミットの編集として残します。
実行するタイミング
ユーザーが Command Center を使って最近の変更をリファクタリングするよう依頼した場合です。対象は現在のブランチ、コミット範囲、または未コミットの作業です。例:
- 「Command Center でこのブランチをリファクタリングしてください。」
- 「変更に対して Command Center のリファクタリングエージェントを実行してください。」
- 「今書いたコードの重複を CC で解消してください。」
実行前の注意事項
- リファクタリングによって作業ツリーが変更されます。 実行中はリポジトリ内のファイルを編集しないでください。また、完了したらキャッシュしていたファイルを読み直してください(結果には、変更されたファイルが正確に表示されます)。
- コミット済みのベースラインを優先してください。 重要な未コミットの作業がある場合は、まずコミットするよう提案してください。そうすれば、リファクタリングの内容を
git diffで簡単に確認・取り消しできます。必須ではありません。未コミットの変更を意図的にリファクタリングするための--working-treeもあります。 - 時間がかかるため、頻繁にポーリングしないでください。 通常は数分、大きな差分では数十分かかることもあります。進捗はワークフローのステップ間でのみ更新されるため、10 分以上進捗がないのはよくあることです。そのような間も、実行中であることを示すハートビートのステータス行が約 1 分ごとに出力されます。ハーネスが対応している場合はバックグラウンドで実行し、数分間隔で状態を確認してください。何もない確認結果を逐一ユーザーに伝えるのではなく、進捗行が表示されたら伝えてください。
呼び出し方法
run.mjs を実行します。これはこの SKILL.md と同じディレクトリにあります。ランナーがすべての処理を行います。インストールの検出、バックエンドの起動、認証/モデル/エージェントの確認、ファイルのスクリーニング、リファクタリングの開始、完了までの進捗のストリーミングが含まれます。
node <SKILL_DIR>/run.mjs [from..to] [--workflow=do-it-all|de-duplicate] [--files=PATTERN[,PATTERN...]]
<SKILL_DIR> は、skills CLI がこのスキルをインストールした場所です。一般的な場所は次のとおりです。
| サーフェス | パス |
|---|---|
| Claude Code、プロジェクトローカル | ./.claude/skills/refactor |
Claude Code、グローバル(-g) | ~/.claude/skills/refactor |
| その他のエージェント | ./.agents/skills/refactor |
この SKILL.md をディスクから読み込んだ場合、ランナーはその隣にあります。そのディレクトリに置き換えてください。
すべての引数は省略可能です。デフォルトでは、ランナーは解決された範囲内の変更されたすべてのファイルをリファクタリングします。
参照範囲 — [from..to]:
- 省略した場合 →
merge-base(HEAD, <base>)..HEADがデフォルトです。<base>はorigin/HEADのシンボリック参照で、存在しない場合はorigin/main/origin/master/main/masterの順にフォールバックします。 gitが解釈できる任意の値を渡せます。SHA、ブランチ、HEAD~3..HEADなど。- 特殊トークン:
WORKING_TREE(未コミットの変更)とSTAGED(インデックス)。例:HEAD..WORKING_TREE。
ワークフロー — --workflow=:
do-it-all(デフォルト)— Command Center の「Refactor」ボタンが実行する、リファクタリングの全工程です。de-duplicate— 重複コードの統合のみを行う、対象を絞った処理です。
便利なフラグ:
--working-tree→ マージベースから現在の作業ツリーまでの差分をリファクタリングします(未コミットの編集内容を含みます)。--staged→git addされた内容のみをリファクタリングします。--files=PATTERN[,PATTERN...]→ 変更されたファイルの対象を絞ります。リポジトリ相対の glob をカンマ区切りで指定します。*はスラッシュ以外の文字に一致し、**はディレクトリをまたいで一致します。先頭に!を付けると除外します。除外のみを指定した場合は、暗黙的に**が含まれます。--timeout-mins=<n>→ リファクタリングの完了を待つ時間です(デフォルトは 60 分)。タイムアウトしても、Command Center ではリファクタリングが引き続き実行されます。--port=<port>→ 特定の Command Center バックエンドポートに接続します。複数の CC インスタンスが実行されている場合(開発環境など)や、ランナーが適切なインスタンスを自動検出できない場合に便利です。
注:Command Center はさらにファイルリストをスクリーニングし、適切なサイズのコードファイルに絞り込みます。ロックファイル、生成ファイル、非常に大きなファイルは自動的にスキップされます。
例 — ユーザーの意図に合ったものを選んでください。
| ユーザーの意図 | コマンド |
|---|---|
| ブランチ全体とベースを比較(デフォルト) | (引数なし) |
| 直近 3 件のコミット | HEAD~3..HEAD |
| 未コミットの編集内容 | --working-tree |
| ブランチ全体の重複を除去 | --workflow=de-duplicate |
| ブランチ全体を対象にするが、テストをスキップ | --files=!**/*.test.*,!**/*.spec.*,!**/__tests__/** |
src/ 内の TS ファイルのみ | --files=src/**/*.ts |
出力の解釈
ランナーは、標準出力に1行につき1つのJSONオブジェクトを出力します。各行にはkindフィールドがあります。
kind: "status"— 進捗状況の更新です(リファクタリング中はpercentageDoneを含みます)。ユーザーには簡潔な1行のメッセージを伝えてください。heartbeat: trueの行は、長時間動きがない間に定期的に動作状況を示すものです。行ごとに説明する必要はありません。ハートビートの間に出力がなくても、処理が止まったわけではありません。kind: "result"— 正常終了です。リファクタリング後のコードは、作業ツリーに未コミットの状態です。ペイロードにはdirtyFiles(以降の編集前に再読み込みしてください)、filesSubmitted、変更ごとの説明を含むCommand Centerのセッションを示すsessionIdが含まれます。処理が完了したことを伝え、git diffで確認するよう提案してください。kind: "error"— 異常終了です。codeフィールドとmessageフィールドを使って、何が問題だったのかを伝えてください。コードは変更されない列挙値です(not-installed、not-running、not-logged-in、no-model、no-agent、quota、no-workspace、no-files-matched、no-eligible-files、backend-too-old、refactoring-failed、refactoring-cancelledなど)。messageはすでにユーザーの言語で書かれています。kind: "action-required"— 再実行する前に、ユーザーによる操作が必要です(例:アプリのインストール、サインイン、モデルまたはコーディングエージェントの設定)。messageを伝え、urlがあれば併せて伝えてください。
ランナーのmessageは必ずそのまま伝えてください。言い換えないでください。ランナーが生成するユーザー向けの文字列は英語です。バックエンド由来の文字列はすでにローカライズされています。
リファクタリングはAIによって生成されるため、利用する前に確認する必要があります。Command Centerでは、各変更に説明が付いています。結果が気に入らない場合は、何もコミットされていないため、git checkout -- <files>(またはgit stash)で元に戻せます。
キャンセル
ランナーを終了すると(SIGINT/SIGTERM)、Command Centerにベストエフォートでキャンセル要求が送信されるため、作業を離れた後もリファクタリングによってファイルの編集が続くことはありません。リファクタリングはCommand Centerアプリからキャンセルすることもできます。
0以外の終了コード
ランナーは、成功時に0を、失敗時に失敗の種類ごとに割り当てられた小さな固定整数を返します。終了コードは解析しないでください。上記の構造化されたkind/codeフィールドに基づいて分岐してください。