Use when adding new error messages to React, or seeing "unknown error code" warnings.
npx skills add haru01/order_skills_sample --skill "cga-tf-refactoring"
Install specific skill from multi-skill repository
# Description
Small, safe refactorings before feature work using Kent Beck's "Tidy First?" patterns (guard clauses, extract helper, move to model, etc.). Invoke as `/cga-tf-refactoring [file]` or use when preparing code for changes, like "tidy this file before adding feature", "refactor before implementing", "clean up structure before modifying", "整理してから機能追加", "リファクタリングしてから変更". NOT for large refactorings or code without tests.
# SKILL.md
name: cga-tf-refactoring
description: Small, safe refactorings before feature work using Kent Beck's "Tidy First?" patterns (guard clauses, extract helper, move to model, etc.). Invoke as /cga-tf-refactoring [file] or use when preparing code for changes, like "tidy this file before adding feature", "refactor before implementing", "clean up structure before modifying", "整理してから機能追加", "リファクタリングしてから変更". NOT for large refactorings or code without tests.
allowed-tools: Read Glob Grep Edit Write Bash AskUserQuestion
disable-model-invocation: true
いつ使うか
- 新機能を追加する前に、コードの構造を整理したいとき
- 既存コードに手を入れる前に、変更しやすくしたいとき
- 「このコード、もう少し整理してから機能追加したい」と感じたとき
いつ使わないか
- テストがなく安全に変更できないとき(先にテストを書く)
- 大規模な書き換えが必要なとき(別タスクとしてプランニングする)
- 今回の変更に関係ない箇所の整理(スコープ外)
何をするか
Tidy First = 機能変更の前に、小さな構造改善を先に行う
- 対象コードを分析し、変更を妨げる「構造の問題」を特定
- 機能変更に必要な最小限の整理(Tidying)を提案
- 整理を実施(テストが通ることを確認)
- その後、本来の機能変更に進む
Tidyingのパターン
| パターン | 説明 | 例 | 難易度 | 詳細 |
|---|---|---|---|---|
| Guard Clauses | ネストを減らす早期リターン | if-else の深いネスト → 早期return | ⭐ (1-2分) | 詳細 |
| Extract Helper | 重複コードを関数に抽出 | 同じ処理が3箇所 → 共通関数化 | ⭐⭐ (3-5分) | 詳細 |
| Normalize Symmetries | 似た処理を同じ形に統一 | 一方はfor、他方はmap → 両方mapに | ⭐ (2-3分) | 詳細 |
| Chunk Statements | 関連する処理をまとめる | バラバラの変数宣言 → 関連グループ化 | ⭐ (1-2分) | 詳細 |
| Rename | 意図が伝わる名前に変更 | data → orderDetails |
⭐ (1分) | 詳細 |
| Explicit Parameters | 暗黙の依存を引数に | グローバル参照 → 引数で渡す | ⭐⭐ (3-5分) | 詳細 |
| Delete Dead Code | 使われていないコードを削除 | 呼ばれない関数、到達しない分岐 | ⭐ (1-2分) | 詳細 |
| Move to Model | UseCaseの判定・状態遷移を集約モデルへ移動 | UseCase内のif判定 → モデルの純粋関数へ | ⭐⭐⭐ (10-20分) | 詳細 |
| Move to Service | 複数集約にまたがるロジックをサービスへ移動 | UseCase内の横断処理 → ドメインサービスへ | ⭐⭐⭐⭐ (20-30分) | 詳細 |
| Extract Validation to Controller | UseCaseのバリデーション処理をController層へ移動 | UseCase内のsafeParse() → Controller層のvalidate*CommandAndExecute() | ⭐⭐⭐ (10-20分) | 詳細 |
| Introduce Branded Type | プリミティブ型のIDをブランド型に変換 | id: string → id: OrderId (unique symbol) |
⭐⭐⭐⭐ (20-40分) | 詳細 |
中断条件
以下の場合は整理を中断し、開発者に状況を報告する:
- テスト失敗: 整理後にテストが通らない場合はrevertして報告
- スコープ超過: 整理対象が3ファイルを超える場合は停止して確認を求める
- 振る舞い変更の懸念: 整理がロジックの振る舞いに影響する可能性がある場合
使用例
/cga-tf-refactoring src/ordering/usecases/create-order.ts に商品バリデーション追加したいので整理して
/cga-tf-refactoring このファイルをキャンセル機能追加しやすくして
ワークフロー
全体フロー
/cga-explore-planning # 実装計画の作成
↓
/cga-tf-refactoring # コード整理(本スキル)
↓
/cga-programming # 機能実装
↓
/cga-review # レビュー
本スキル内のフロー
1. 変更対象のコードを読む
↓
2. 「このままプログラミングできるか?」を考える
↓
3-A. できる → そのまま /cga-programming へ
3-B. 整理したい → Tidyingを特定
↓
4. Tidyingを実施(テストが通ることを確認)
↓
5. Tidyingをコミット("tidy:" プレフィックス)
↓
6. /cga-programming でプログラミングを実施
成果物
- Tidyingコミット("tidy:"プレフィックス)
- テスト実行結果(すべてPASS)
- 次ステップの提案(/cga-programmingへ移行 or 追加Tidying必要性)
トラブルシューティング
テストが失敗した場合
- 変更を即座にrevert:
git checkout -- <file> - テストログを確認し、振る舞いが変わった箇所を特定
- より小さなTidyingに分解するか、今回は見送る
スコープが広がりすぎた場合
兆候: 3ファイル以上に変更が必要、または30分以上かかりそう
- 現在の変更をstash:
git stash - ユーザーに状況を報告し、分割案を提示
- 承認を得てから続行、または見送り
振る舞い変更の懸念がある場合
例: ロジックの条件式を変更、エラーハンドリングの追加など
- 変更を一時停止
- ユーザーに「これは振る舞いを変える可能性があります」と報告
- テストでカバーされているか確認し、承認を得る
Tidyingパターンが見つからない場合
- 無理に整理しない(過剰なTidyingを避ける)
- 「現状のまま機能追加可能」と判断し、/cga-programmingへ進む
詳細
guide.md を参照
# Supported AI Coding Agents
This skill is compatible with the SKILL.md standard and works with all major AI coding agents:
Learn more about the SKILL.md standard and how to use these skills with your preferred AI coding agent.