大規模コードベースのリファクタリング
大規模コードベースでコアサービスクラスを安全にリファクタリングします。OpenCode はインポートグラフをナビゲートし、型を更新し、破壊がないことを検証します。
このレシピを使う場面
- 広く使われているクラス、関数、モジュールのリネームや移動が必要なとき。
- 変更が多数のファイルにまたがり、手作業がエラーを生みやすいとき。
- 各ステップをコミット可能にし、簡単にロールバックしたいとき。
前提条件
- OpenCode をインストールし、十分な能力の LLM プロバイダーを設定済みであること。
- クリーンな作業ツリー(現在の変更をコミットか stash 済み)。
- 結果を検証するためのテストスイートまたはビルドコマンド。
手順
-
クリーンなベースから始める
現在の作業をコミットし、OpenCode が既知の状態で動くようにします。
git status git add -A && git commit -m "wip: before refactor" -
リファクタリングの目標を説明する
リネーム対象と望ましい最終状態を正確に伝えます。
プロジェクト全体の
OldServiceクラスをNewServiceにリネームしてください。すべてのインポート、型参照、使用箇所を更新し、公開挙動は変更しないでください。 -
影響範囲を OpenCode に評価させる
OpenCode はインポートグラフを読み、編集前に影響を受ける全ファイルを一覧表示して、影響範囲を確認させます。
-
編集を確認して適用する
提案された変更を確認します。論理的なグループにまとめてコミットするよう OpenCode に指示します。
git commit -m "refactor: rename OldService to NewService" -
検証する
ビルドとテストを実行します。失敗があれば、その特定のエラーを修正するよう OpenCode に指示します。
npm run build && npm test
主要なプロンプト
OldServiceへのすべての参照(インポート、型注釈、文字列使用を含む)を見つけてください。それらすべてをNewServiceにリネームしてください。まずファイル一覧を示し、その後グループ化してコミットしながら適用してください。
よくある落とし穴
- 途中までのリネーム:途中で止めると、残った参照がビルドを壊します。必ず OpenCode に最後まで完了させ、それから検証してください。
- 文字列参照:動的参照(例:
container.get('OldService'))は手作業が必要な場合があります——明示的に OpenCode に指摘してください。 - 生成ファイル:ビルド成果物を
.gitignoreに追加し、誤って編集されないようにします。
関連ドキュメント
関連レシピ
- bug-hunting —
reason.refactor.to-bug-hunting - mcp-server —
reason.refactor.to-mcp - git-commit-workflow —
reason.refactor.to-git
関連ドキュメント
次のステップ
- bug-hunting —
next.refactor.to-bug-hunting