🚫

`next-env.d.ts` を `.gitignore` に戻す

に公開

Next.js プロジェクトでルートに生成される next-env.d.tsnpx create-next-app で作成したときはデフォルトで .gitignore に含まれますが、今まで理由があって git 管理していました。
Next.js 15.5 から導入された next typegen を利用することで、git 管理する必要がなくなり、.gitignore に戻すことにしました。

git 管理したかった理由

Next.js の開発サーバーを起動するとこのようなファイルが生成されます。

next-env.d.ts
/// <reference types="next" />
/// <reference types="next/image-types/global" />
import "./.next/types/routes.d.ts";

// NOTE: This file should not be edited
// see https://nextjs.org/docs/app/api-reference/config/typescript for more information.

参照している node_modules/next/image-types/global.d.ts では declare module '*.jpg' など、画像ファイルを import した際の型が追加され、next/image での利用が便利になるようになっています。

逆に next-env.d.ts を削除すると、type-check tsc --noEmit で以下のようなエラーが出るようになります。

error TS2307: Cannot find module './logo.jpg' or its corresponding type declarations.

ローカルで開発しているときは next-env.d.ts が消えることはないので問題ありません。
GitHub Actions などの CI ツールに渡す際、type-check、lint-check などを実行する前に next-env.d.ts を生成する必要があります。
ただ next-env.d.ts を生成するためだけに、CI の前ステップで next build するのは余計な時間がかかります。
そのため、next-env.d.ts も git 管理することで、CI を効率化していました。

git 管理しなくてよくなった理由

Next.js 15.5 から next typegen が導入されました。
これを叩くと、next-env.d.ts.next/types/routes.d.ts などが一瞬(2秒程度)で生成されます。
CI の前ステップで next typegen を追加すればよくなったので、git 管理しなくてよくなりました。

git 管理したくなくなった理由

next-env.d.ts は最近は自動で書き換わることはほとんどありませんでした。
Next.js 16 からの実験的な機能 isolatedDevBuild によって、頻繁に書き換わるようになりました。
具体的には next devimport "./.next/dev/types/routes.d.ts";next buildimport "./.next/types/routes.d.ts"; と書き換わります。
余計な変更をコミットしてしまいたくないので、git 管理したくなくなりました。

また関わっているプロジェクトでは、AppRoutes 型を利用するために .next/types/routes.d.ts も git 管理していますが、ページの並行開発の際にコンフリクトの原因になり、これも git 管理したくなくなりました。

まとめ

Next.js 15.5 から next-env.d.ts を管理するメリットがなくなり、16 からはデメリットのほうが増えます。
何らかの事情で next-env.d.ts を git 管理していた場合は .gitignore に戻し、生成が必要な場面で next typegen で生成させるようにしましょう.

Discussion