コードベース全体で関数をリファクタリングし、破損を避ける方法
使うタイミング: 関数を名前変更するか署名を変更するか、ヘルパーをインライン化する必要があり、それが repo 全体の 30 ファイル以上で使用されている場合です。
前提条件
- クリーンな git ワーキングツリー —
git statusで何もステージされていないことを確認し、git diffでレビューして、必要に応じてgit restoreできるようにします - ファイルシステムルートを repo にスコープ —
npx -y @modelcontextprotocol/server-filesystem /abs/path/to/repoで起動
フロー
-
すべての呼び出しサイトを検索コードベースで
getUserProfile(の使用方法をすべて検索します。マッチをファイル別にグループ化して、ファイルごとのマッチ数を教えてください。✓ コピーしました→ ファイルリストとマッチ数(テスト vs ソースの区別なし) -
1 つのファイルでドライラン編集src/api/users.ts 内の編集がどのように見えるかを示してください — 完全なファイルではなく diff を示します。まだ書き込まないでください。✓ コピーしました→ 最小限の diff パッチ(フルファイル書き換えではない)
-
すべてのファイルに適用してレポートステップ 1 のすべてのファイルに同じ変換を適用してください。write_file(上書き)ではなく edit_file(行単位)を使用してください。パターンがきれいにマッチしなかったファイルがあれば教えてください。✓ コピーしました→ ファイルごとの成功/スキップログ
結果: レビュー可能でテストを実行できるフォーカスされた git diff — 予期しないフルファイル書き換えなしです。
注意点
- Claude が
write_fileを使用し、複雑な編集時にサイレントでファイルの半分をドロップ — インプレース変更には明確にedit_fileが必要です。write_fileは新規作成ファイルのみを許可 - マッチが無関係なコード(例:
getUserProfileAvatar)にヒット — 検索をアンカー:getUserProfile((末尾の括弧)、またはワード境界の正規表現を使用