0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

生成AIにファイル分割を任せると便利です。

たとえば、1つのファイルにまとまっていた処理を、受付側とワーカー側に分けるような作業です。

しかし、少し気になることがあります。

「ファイルを分けるだけのつもりだったのに、余計な変更まで入っていないか?」

この記事では、削除済みの元ファイルを Git から取り出し、新しく作られたファイルと diff する小技を紹介します。

今回の例

もともと、次の1ファイルに処理がまとまっていたとします。

lib/webhook.ts

これを、次の2ファイルに分割しました。

lib/webhook-receiver.ts
lib/webhook-worker.ts

元の lib/webhook.ts は不要になったので削除済みです。

削除済みファイルと diff する

lib/webhook.ts は削除済みです。

しかし、Git の履歴には残っています。

たとえば、削除前のファイルが1つ前のコミットにあるなら、次のように比較できます。

git diff -w HEAD~1:lib/webhook.ts lib/webhook-worker.ts
git diff -w HEAD~1:lib/webhook.ts lib/webhook-receiver.ts

HEAD~1:lib/webhook.ts は、「1つ前のコミットにあった lib/webhook.ts」という意味です。

-w は空白の変更を無視するオプションです。
ファイル分割ではインデントが変わりやすいため、ロジックの差分を見たいときに便利です。

VS Code で見る

ターミナルの diff だけでは追いにくい場合は、VS Code で開けます。

git show HEAD~1:lib/webhook.ts | code --diff - lib/webhook-worker.ts
git show HEAD~1:lib/webhook.ts | code --diff - lib/webhook-receiver.ts

git show HEAD~1:lib/webhook.ts で、削除前のファイル内容を取り出します。

それを code --diff - 現在のファイル に渡すことで、VS Code の diff 画面で比較できます。

何を見るか

見るポイントは、次の4つです。

特に見たいのは、最後の「余計な変更」です。

ファイル分割のつもりなのに、条件分岐、戻り値、エラーハンドリングなどが変わっていたら注意します。

まとめ

削除済みのファイルでも、Git の履歴に残っていれば diff できます。

git diff -w HEAD~1:lib/webhook.ts lib/webhook-worker.ts
git diff -w HEAD~1:lib/webhook.ts lib/webhook-receiver.ts

VS Code で見たい場合はこちらです。

git show HEAD~1:lib/webhook.ts | code --diff - lib/webhook-worker.ts
git show HEAD~1:lib/webhook.ts | code --diff - lib/webhook-receiver.ts

生成AIに任せると、作業は速くなります。

しかし、最後に差分を読むのは自分です。

「分割しただけ」のつもりが、意図しない仕様変更になっていないか。
その確認に、削除済みファイルとの diff が役立つことがあります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?