ViteからNext.jsに移行した際に発生したGitの警告

Viteで構築したプロジェクトをNext.jsに移行した際、 Git でファイルをステージングしようとしたところ次のような警告が表示された。

Git: The following paths are ignored by one of your .gitignore files:

原因は .gitignore の設定変更によって、add対象の中に無視されるファイルが混在したためである。

なぜこの警告が表示されたのか?

Next.js では .next/ を無視する必要がある

Vite使用時の .gitignore には、当然ながらNext.jsのビルド成果物である .next/ の記述は存在しない。

dist
dist-ssr
*.local

Next.jsに移行すると .next/ が生成されるため、これをGit管理対象から除外する必要がある。

そこで、修正後の .gitignore では次のように .next/ を追加した。

/.next/
/out/
/.vercel/

.gitignore を修正後、警告が出た理由

.gitignore を修正して .next/ を無視する設定を追加したあと、 git add . を実行したところ次の警告が表示された。

The following paths are ignored by one of your .gitignore files:

これはエラーではなく通知であり、Gitが次のように知らせている状態である。

add 対象の中に、.gitignoreによって無視されるファイルが含まれています。

なぜこの通知が出たのか?

今回のケースでは、次の2つが重なっていたことが原因と考えられる。

  1. .next/ が差分に表示されていた

移行前に .next/ を誤って Git に追加していたため、 .gitignore を修正しても 既存の追跡対象として差分に残り続けていた。

  1. .gitignore を修正して .next/ を無視対象にした

新たに .next/ が「無視されるべきファイル」として扱われるようになった。

  1. git add . の対象に .next/ が含まれていた

git add . はディレクトリ配下をすべてチェックするため、 その中にある .next/ のファイルが**「無視されるパス」として検出**された。

この結果、Gitは以下のように確認メッセージを出した。

「add 対象の中に.gitignoreで無視されるファイルが含まれています。意図どおりですか?」

解決方法

今回の警告は「.gitignore の設定変更」と「.next/ が追跡済みだったこと」が重なって発生したものだった。 そのため、根本的な解決には Gitの追跡対象から .next/ を正しく除外することが必要となる。

1. .next/ を Git の追跡から外す

過去に .next/ を誤って追加していた場合、.gitignore を修正しても差分に表示され続ける。

そのため、まず追跡を解除する。

git rm -r --cached .next

その後、変更をコミットする。

git commit -m "Remove .next/ from tracking"

これで .next/ は Git の追跡対象から外れ、.gitignore の設定が正しく反映されるようになる。

2. 念のため無視ルールが適用されているか確認する

以下のコマンドで .next/ が無視対象であることを確認できる。

git check-ignore -v .next

出力例:

> .gitignore:38:/.next/   .next

また、無視されているファイル全体を確認したい場合は次のコマンドを使う。

git status --ignored

出力例:

On branch main
Your branch is up to date with 'origin/main'.
 
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
  new file:   .next/

まとめ