本文へスキップ
hdknr blog

Brownfield リファクタリング

改修を重ねた既存コード(brownfield)を、振る舞いを固定してから安全に作り替えるための原則・ワークフロー・パターン。greenfield との対比で捉える。

概要

brownfield(ブラウンフィールド) は、すでに動いていて改修を重ねてきた既存コードベースを指す。更地から作る新規開発 greenfield(グリーンフィールド) の対義語で、工事現場での「更地への新築」対「既存建物の改修」の比喩に由来する。brownfield のリファクタリングでは、最大のリスクは過剰実装ではなく 「正しさの後退」(間違った項目名・ID、データ不整合、意図しない挙動変化)にある。したがって鉄則は一つ——振る舞いを固定してから、内部を動かす

大原則:安全網を先に張る

リファクタリングの定義は「外部から見た振る舞いを変えずに内部構造を改善する」こと。振る舞いを固定する手段を最初に用意することが出発点になる。

ワークフロー(6 ステップ)

順序に意味がある。安全網(②凍結)より前に大きく動かさず、削除(⑥)を最後に回す。

  1. 計測 — 「変更頻度 × 複雑度」の高いホットスポットから着手する。
  2. 凍結 — 現状挙動を特性テストで記録する(安全網の要)。
  3. 継ぎ目(Seam) — 依存を差し込めるテスト可能な接合点を作る。
  4. 変換 — 振る舞い不変の小さな変更を IDE と codemod で積む。
  5. 段階置換 — 新旧を並行稼働させ機能単位で差し替える。
  6. 削除 — 旧経路とデッドコードを消す。

⑥から①へ戻り、ホットスポットを潰し切るまで反復する。

段階置換のパターン

スタック別ツールの勘所

AI エージェントとの組み合わせ

主要リスクが「正しさ」である以上、AI に丸投げせず「凍結 → 小変換 → 検証」の小刻みループに乗せる。まず特性テストを書かせて現状を固定し、範囲を絞った変換だけ依頼し、テストが緑のままかを確認する。AST を理解する codemod(ts-morph / libcst)と組み合わせると、AI は「変換の設計」に集中でき機械的置換はツールが担う。過剰実装を抑える Ponytail が greenfield の武器なら、brownfield ではこの規律が武器になる。

関連ページ

ソース記事