Windows で nul ファイルが勝手に作成される問題
現象
Windows 環境で開発していると、プロジェクトルートに nul という 0 バイトの空ファイルが作成されることがある。
?? nul
原因
これは Unix/Linux と Windows のデバイスファイルの違い に起因する。
Unix/Linux の場合
出力を捨てる(破棄する)ために /dev/null という特殊なデバイスファイルを使用する:
# Unix/Linux
command > /dev/null 2>&1
Windows の場合
Windows では同等の機能を持つ NUL デバイスを使用する:
# Windows (CMD)
command > NUL 2>&1
# Windows (PowerShell)
command | Out-Null
問題が発生するケース
多くの npm パッケージや Node.js ツールは Unix/Linux 向けに書かれている。これらが Windows で実行されると:
- ツールが
> /dev/nullを使おうとする - Windows では
/dev/nullは存在しない - 代わりにカレントディレクトリに
nulという名前のファイルが作成されてしまう
よくある発生タイミング
pnpm devやpnpm build実行時- npm パッケージのインストール時(
pnpm install) - 一部の CLI ツール(lint、formatter など)実行時
- pre-commit フックやスクリプト実行時
対処法
1. ファイルを削除する
nul ファイルは空なので、安全に削除できる:
rm nul
2. .gitignore に追加する
再発しても git に追跡されないようにする:
# Windows NUL device file (created accidentally by some tools)
nul
根本的な解決は難しい
この問題は Windows で Unix 向けツールを使う以上、完全に防ぐことは難しい。原因となっているパッケージを特定して修正する必要があるが、多くの場合はサードパーティの依存関係内で発生しているため、実用的ではない。
.gitignore に追加しておき、たまに削除するのが現実的な対応。
参考
- Windows の予約デバイス名:
CON,PRN,AUX,NUL,COM1-COM9,LPT1-LPT9 - これらの名前はファイル名として使用できない(はずだが、一部の環境では作成されてしまう)