コンテンツにスキップ

大規模コードベースのリファクタリング

大規模コードベースでコアサービスクラスを安全にリファクタリングします。OpenCode はインポートグラフをナビゲートし、型を更新し、破壊がないことを検証します。

このレシピを使う場面

  • 広く使われているクラス、関数、モジュールのリネームや移動が必要なとき。
  • 変更が多数のファイルにまたがり、手作業がエラーを生みやすいとき。
  • 各ステップをコミット可能にし、簡単にロールバックしたいとき。

前提条件

  • OpenCode をインストールし、十分な能力の LLM プロバイダーを設定済みであること。
  • クリーンな作業ツリー(現在の変更をコミットか stash 済み)。
  • 結果を検証するためのテストスイートまたはビルドコマンド。

手順

  1. クリーンなベースから始める

    現在の作業をコミットし、OpenCode が既知の状態で動くようにします。

    git status
    git add -A && git commit -m "wip: before refactor"
  2. リファクタリングの目標を説明する

    リネーム対象と望ましい最終状態を正確に伝えます。

    プロジェクト全体の OldService クラスを NewService にリネームしてください。すべてのインポート、型参照、使用箇所を更新し、公開挙動は変更しないでください。

  3. 影響範囲を OpenCode に評価させる

    OpenCode はインポートグラフを読み、編集前に影響を受ける全ファイルを一覧表示して、影響範囲を確認させます。

  4. 編集を確認して適用する

    提案された変更を確認します。論理的なグループにまとめてコミットするよう OpenCode に指示します。

    git commit -m "refactor: rename OldService to NewService"
  5. 検証する

    ビルドとテストを実行します。失敗があれば、その特定のエラーを修正するよう OpenCode に指示します。

    npm run build && npm test

主要なプロンプト

OldService へのすべての参照(インポート、型注釈、文字列使用を含む)を見つけてください。それらすべてを NewService にリネームしてください。まずファイル一覧を示し、その後グループ化してコミットしながら適用してください。

よくある落とし穴

  • 途中までのリネーム:途中で止めると、残った参照がビルドを壊します。必ず OpenCode に最後まで完了させ、それから検証してください。
  • 文字列参照:動的参照(例:container.get('OldService'))は手作業が必要な場合があります——明示的に OpenCode に指摘してください。
  • 生成ファイル:ビルド成果物を .gitignore に追加し、誤って編集されないようにします。

関連ドキュメント

  • ポリシー — OpenCode がプロジェクト全体で変更を適用する方法を制御する
  • 設定 — OpenCode の動作を管理する opencode.json ファイル

関連レシピ

関連ドキュメント

次のステップ