AIに任せたリファクタリングの差分を、いきなりマージせず画面で一行ずつ静かに確認している開発者

AIリファクタリングの差分レビュー|壊さず確認する手順

「ここ、読みづらいからきれいにしておいて」——AIにそう頼んだら、返ってきた差分が思ったより広い。 変数名が変わり、関数が分かれ、ついでに条件分岐の形まで変わっている。「整理はされたっぽいけど、これ、動きは前と同じなんだっけ?」——マージしようとした手が、最後にふっと止まる。そんな夕方、ありますよね。

リファクタリングは本来、外から見た振る舞いは変えずに、中身の構造だけを整える作業です。 ところがAIに任せると、整理のついでに「ちょっとした挙動の変化」がこっそり混じることがあります。しかも見た目がきれいになっているぶん、差分を読んでいても気づきにくい。きれいなコードほど、目が滑るのです。

この記事は、AIにリファクタを任せたあと、差分から「混じってしまった振る舞いの変化」を見抜く確認手順をまとめたものです。大がかりなレビュー体制の話ではありません。いまは Claude Code・Cursor・GitHub Copilot のようなエージェントが差分やプルリクを出し、テストまで自分で走らせてくれます。だからこそ人の仕事は、その差分ビューやPRの上で「振る舞いが保たれているか」を承認・指摘することに移っています。マージ前の数分〜十数分でできる、地に足のついた差分の読み方です。一度に全部やる必要はありません。まず効く所から、一緒に見ていきましょう。

結論:AIのリファクタ差分は「きれいになったか」ではなく「振る舞いが変わっていないか」を軸に確認します。順番は、①変える/変えない範囲を先に1行で決める → ②差分を小さく刻んでレビューできる単位にする → ③差分の中の“ロジックの変化”だけを拾って読む → ④リファクタ前後で同じテストが緑のままかで固定する → ⑤こわい所だけ実際に動かして突き合わせる。AIは「整理」と「仕様変更」を一緒にやってしまうことがあるので、その2つを差分の上で切り分けるのが人の仕事です。最後に「差分レビューメモ」のテンプレとチェックリストを置きました。

きれいにすることと、同じ動きを保つこと。 リファクタの差分レビューは、この2つが両立しているかを静かに確かめる作業です。

なぜAIのリファクタ差分は「読みにくい」のか

見た目を整えるリファクタリングの差分の中に、振る舞いを変えてしまう変更が紛れ込んでいることを示した概念図

AIにリファクタを頼んだときの差分が読みにくいのには、はっきりした理由があります。 それは、「整えるだけの変更」と「振る舞いが変わる変更」が、同じ差分の中に混ざって出てくるからです。

たとえば、こんな変更が一度に返ってきます。

前半の名前付け替えや分割は、基本的に安全な整理です。 こわいのは後半です。AIは「もっと良くしよう」と気を利かせて、頼んでいない挙動の変更まで一緒に入れてくることがあります。デフォルト値が変わる、null のときの扱いが変わる、丸めの方向が変わる、例外を握りつぶす形になる——どれも差分の上では一行の小さな違いで、きれいな見た目に紛れて目を通り抜けます。

だから差分レビューのコツは、全部を平等に読まないことです。 名前付け替えのような安全な変更はさっと流し、振る舞いが変わりうる所だけに目を集める。次の章から、その絞り込み方を手順にして見ていきます。

差分レビューの型:5つの手順

先に全体像を出します。上から順に、マージ前になぞれる流れです。

手順何をするかこれで防げること
①範囲を1行で決める変える所・変えない所を先に固定「ついでの仕様変更」の紛れ込み
②差分を小さく刻むレビューできる単位に分割大量diffで目が滑る
③ロジックの変化を拾う振る舞いが変わる行だけ読む条件・既定値・例外の静かな変化
④テストで固定する前後で同じテストが緑か仕様の取り違え・回帰
⑤こわい所を動かす実データで前後を突き合わせ読むだけでは拾えないズレ

ポイントは、5つ全部を毎回フルでやらないことです。 名前を整えるだけの小さなリファクタなら①②と④だけ、業務ロジックに踏み込むなら③⑤が要、というように、その変更で一番こわい所を選んでなぞれば十分です。全部やろうとすると続きません。続かない型は、型として失敗です。

締め切り直前の「3分版」最小セット:今日はとにかく時間がない、それでもマージしたい——そんな日は、これだけで構いません。①変える/変えない範囲を1行で決める + ③こわいロジックの行(条件・既定値・例外)だけ拾って読む + ⑤こわい1件を前後で突き合わせる。テストや刻みが間に合わなくても、この3つを通せば「振る舞いが変わっていないか」の芯は押さえられます。残りは余裕のある日に足せば十分です。

では一つずつ見ていきます。

手順1:変える所・変えない所を、先に1行で決める

差分を読み始める前に、まず「今回のリファクタで、何を変えて、何を変えないか」を自分の言葉で1行に決めます。AIに頼む前でも、頼んだ後でも構いません。先に基準があると、差分の良し悪しを判断できます。

決めておきたいこと:

ここで効くのは、AIに頼むときに「振る舞いは変えずに、読みやすさだけ直して。仕様は変えないで」と一言添えることです。 それでも気を利かせて変えてくることはありますが、基準が先にあれば、差分を見て「これは頼んでいない変更だ」とすぐ気づけます。基準がないと、きれいになった差分を前に「まあ、良くなってるからいいか」で流してしまいます。何を守るかを先に決めておくのが、最初の安全装置です。

手順2:差分を小さく刻んで、レビューできる単位にする

範囲が決まったら、次は差分そのものを小さくします。一度に何百行もの差分を渡されると、人はどんなに気をつけても目が滑ります。AIのリファクタが危ういのは、まさにこの「大量diff」になりやすいからです。

やること:

ただ、AIは頼んでも素直に刻んでくれるとは限らず、現場では最初から大きな差分が届くこともよくあります。刻み直しを頼んでも間に合わないなら、無理に分け直さなくて構いません。大きなdiffが先に来てしまったら、自分でロジックを触る行だけを拾って読む手順3に飛んでしまってよいです。刻むのはあくまで読みやすくするための手段で、目的は危ない一行を見落とさないこと。手段が使えない日は、目的だけ直接取りにいけば十分です。

ここでの狙いは、安全な変更と危ない変更をコミットやPRの単位で分けてしまうことです。 名前の付け替えだけのコミットなら、差分ビューの目視はさっと流せます。ロジックを触るコミットだけに集中して時間を使える。混ざったままだと、安全な変更の山に危ない一行が埋もれて見えなくなります。「小さく刻む」は、レビューの質をいちばん安く上げる一手です。

手順3:差分の中の“ロジックの変化”だけを拾って読む

たくさんの差分の行の中から、条件分岐や既定値やエラー処理など振る舞いが変わる行だけを選び出して確認している様子の概念図

ここが差分レビューの中心です。 名前の付け替えのような安全な変更はさっと流し、「これは振る舞いが変わるかもしれない」という行だけに目を集めます。リファクタの事故は、たいていこの種類の行に潜んでいます。

特に目を止めたい変化:

読むときのコツは、「この一行で、同じ入力に対する出力が変わる可能性があるか?」と一行ずつ問うことです。 変わらないと言い切れる行(名前付け替えなど)はスキップ。少しでも「変わるかも」と思った行は、変更前と変更後を声に出して読み比べる。AIは「簡潔で良さそうな書き方」を選ぶので、簡潔さと引き換えに境界やエラー処理がずれることがあります。簡潔になった所ほど、よく見るくらいでちょうどいいです。

手順4:リファクタ前後で「同じテストが緑のまま」かで固定する

差分を目で読んだら、次はテストで裏を取ります。リファクタの確認に、テストはとても相性がいい道具です。 なぜなら、リファクタは「振る舞いを変えない」作業なので、リファクタの前に通っていたテストは、後でも全部そのまま緑であるはずだから。

先に免除ルートを置いておきます。 そもそもテストが無い・薄いレガシーが多い現場では、「前に緑にしておく」が一番の壁になります。テストが書けない/間に合わないときは、この手順をまるごと飛ばして、次の手順5の「前後の突き合わせ(同じ入力→同じ出力)」を1〜2件やれば代替として十分です。テストは確認の手段のひとつであって、それ自体が目的ではありません。手段が用意できない日は、突き合わせで同じところを守れば構いません。テストが書ける・あるなら、以下を続けてください。

やること:

ここで一番大事なのは、「リファクタに合わせてテストを直す」を安易にやらないことです。 テストが落ちたとき、コードを疑わずにテストを直してしまうと、振る舞いの変化を自分で承認してしまいます。テストが落ちたら、まず「これはバグか、それとも意図した変更か」を立ち止まって考える。意図した仕様変更なら、それはもうリファクタではなく別の作業——コミットを分けて、わかるように記録します。テストとAIが同じ思い込みを共有しないよう、テストはリファクタ前の振る舞いを基準にしておくのがコツです。

手順5:こわい所だけ、実際に動かして前後を突き合わせる

テストでも拾いきれない所は、最後に手を動かして確かめます。テストが薄い箇所や、外部とやり取りする箇所は、読むだけ・テストだけでは安心しきれません。

やること:

ここで効くのは、抽象的に「動いた」で済ませず、前後で同じ結果になることを具体的な値で確かめることです。 たとえば「2026-01-15 の集計が 1,200 円」という確定した1件を、前のコードと後のコードの両方に通して、ぴったり一致するかを見る。一致すれば、その経路の振る舞いは保たれています。実際に動かす確認の型は、AI生成コードの動作確認に詳しくまとめてあるので、あわせてどうぞ。読む確認と動かす確認は、別々の網で別々の穴を拾います。

ありがちな落とし穴と、その回避

差分レビューでつまずきやすい所を、先に潰しておきます。

落とし穴の多くは、「きれいになった=正しくなった」と感じてしまうことから来ます。 差分レビューは、AIの整理を疑う作業ではなく、自分が安心してマージするための作業です。最後の数分を、自分のために使いましょう。

明日からやること(小さく始める3つ)

全部を一度に習慣化しようとすると続きません。まずこの3つから。

  1. AIに頼むとき「振る舞いは変えずに、読みやすさだけ」と一言添える:手順1が片付き、ついでの仕様変更がぐっと減ります。
  2. 「名前の整理」と「ロジックの変更」をコミットで分ける:手順2の効果が大きく、危ない一行が安全な変更に埋もれなくなります。
  3. リファクタ前にテストを緑にしてから着手する:手順4の土台ができ、「前後で同じ緑か」だけで多くの回帰を拾えます(テストが無い・間に合わない現場は、代わりに手順5の前後突き合わせを1件だけでもどうぞ)。

この3つだけでも、「きれいになったから大丈夫」が「振る舞いを保てたから大丈夫」に変わります。 慣れてきたら、ロジックの変化を拾う読み方(手順3)や、こわい所の前後突き合わせ(手順5)も足していけば十分です。

コピーして使う「差分レビューメモ」

AIにリファクタを任せたら、関係する行だけ埋めて手元に置いてください。手元のメモとして使ってもいいですし、エージェントが出したPRの差分ビュー上で、そのまま「ここを見る観点リスト」としてなぞるのにも使えます。PRの説明欄やレビューコメントに貼って確認の足場にしても構いません。全部やる必要はなく、その変更でこわい所だけで十分です。

# 差分レビューメモ

## ①範囲
- 変えていい所(名前・分割・整理など):
- 変えてはいけない所(振る舞い):
- 今回は触らない所:

## ②刻み
- コミットは目的ごとに分かれているか:
- 名前整理とロジック変更は別か:

## ③ロジックの変化
- 条件分岐・境界(>と>=など)の変化:
- 既定値・null/空のときの扱いの変化:
- エラー処理・例外・ログの変化:
- まとめた重複に隠れた差はないか:

## ④テスト
- リファクタ前に緑にしたか:
- 後も同じテストが全部緑か:
- 書き換えが必要になったテスト(=要注意):

## ⑤前後の突き合わせ
- 同じ入力で前後の出力が一致したか(具体値):
- 副作用はコピー環境で比べたか:

差分レビューチェックリスト

マージやプルリクの前に、1項目ずつ「○/要確認」を付けながら使ってください。一度に全部でなく、今日はその変更に関係する所だけで十分です。各セクションの ★印は「これだけは外せない最低ライン」。忙しい日は★だけ、残りは任意——と読んでください。

①範囲を決める

②小さく刻む

③ロジックの変化を拾う

④テストで固定する(テストが無ければ前後突き合わせ=⑤で代替可)

⑤こわい所を動かす

最後に

AIにリファクタを任せて差分を読み直すのは、AIを信用していないからではありません。 最後にマージするのが自分だから、振る舞いが保たれているかを自分の目で一度確かめておく——それだけのことです。

きれいに整ったコードは、それだけで気持ちのいいものです。 そこに「動きも前と同じ」という確かさが加わると、リファクタはようやく安心して使える道具になります。読んで確かめるレビュー・検証チェックリストや、AIに任せる前に渡す前提と制約の伝え方とあわせて使うと、AIコーディングはぐっと落ち着きます。

差分の確認を終えて振る舞いが保たれていることを確かめ、安心してリファクタをマージし一息つく開発者

5つの手順のうち、今日できたのが1つでも、それはもう「きれいさだけで通さなかった」という確かな一歩です。 マージ前のあと数分を、未来の自分のために使っていきましょう。

関連用語