1
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?

【備忘録】ローカルでは通るのにVercelでビルドエラー? Gitの大文字・小文字変更の罠

Posted at

はじめに

Next.js × TypeScript で開発中のアプリを Vercel にデプロイしようとしたところ、ローカル(Windows)ではビルド成功、Vercel では失敗という現象に遭遇しました。

結論から言うと、エラーの原因は Git が大文字・小文字だけのファイル名の変更を検出してくれなかったことでした。

発生したエラー

Vercel のデプロイログに以下のようなエラーが出力されていました。

bash
Module not found: Can't resolve '@/components/header'

確認したこと

✅  ファイル名を間違えていないか(大文字・小文字の違いはないか)
✅   import のパスを間違えていないか
✅  ローカル環境ではビルドできている

「合っているはず...」と思いつつ、思い当たることが一つ。
直前にファイル名を大文字から小文字に変更していたことを思い出し、そこが怪しいと考えました。

背景と原因

✅ ファイル名を変更したつもりだった

  • コンポーネントファイル名 Header.tsxheader.tsx に変更

  • import 文も @/components/header に統一

    しかし...

❌ Git は変更を検知していなかった

  • Windows はデフォルトで大文字・小文字を区別しないファイルシステム(NTFS など)
  • Git も「変更なし」と判断して差分を記録せず
      ⇒ Vercel(Linux・大文字小文字を区別する環境)では Header.tsx を読み込もうとしてビルドエラーに

解決方法

ちゃんとファイル名の変更を Git に認識させる

1. 一旦ファイル名を別名に変更(中間名)

bash
git mv src/components/Header.tsx src/components/Header_temp.tsx

2. 目的の小文字ファイル名に戻す

bash
git mv src/components/Header_temp.tsx src/components/header.tsx

3. コミットしてデプロイ

他の選択肢:core.ignorecase を false にする方法(おすすめしない)

Git には core.ignorecase という設定があり、これを false に設定すると
大文字・小文字の違いも厳密に追跡されるようになります。

bash
git config core.ignorecase false

この方法を使えば、Header.tsxheader.tsx のような変更も Git が認識できるようになりますが、以下の理由から今回は採用しませんでした。

おすすめしない理由

  • 既に大文字、小文字違いのファイルが存在する場合に競合が発生する可能性がある。
  • チーム開発環境で、他のメンバーの Git 設定や OS によって挙動が変わる可能性があり、「自分の環境では動く」状態が発生しやすい。
  • ローカルで設定を変更して作業を続けると、意図しない差分が発生する恐れがある。

ちなみに現在の設定は以下コマンドで確認できます。

bash
git config --get core.ignorecase

まとめ

  • Windows では大文字・小文字だけのファイル名変更は Git が無視することがある(ファイル名の変更だけで、内容が変わらなかった場合など)。
  • Vercel(Linux)では大文字・小文字を区別するため、ビルドエラーになる。
  • 対応策は git mv を使って変更を明示的に伝えること!
  • core.ignorecase の変更も一応の方法だが、副作用が多く安全性に欠けるため推奨しない。

オブジェクティブグループでは X の投稿も平日毎日行っています!
IT 関連の小ネタや便利技から、日常のアニメ・ゲーム布教なども幅広く投稿してるので、
ご興味のある方は是非フォロー・いいねをお願いします。

1
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
1
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?