`next-env.d.ts` を `.gitignore` に戻す
Next.js プロジェクトでルートに生成される next-env.d.ts、npx create-next-app で作成したときはデフォルトで .gitignore に含まれますが、今まで理由があって git 管理していました。
Next.js 15.5 から導入された next typegen を利用することで、git 管理する必要がなくなり、.gitignore に戻すことにしました。
git 管理したかった理由
Next.js の開発サーバーを起動するとこのようなファイルが生成されます。
/// <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 dev で import "./.next/dev/types/routes.d.ts";、next build で import "./.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