• #Windows
  • #開発環境
  • #トラブルシューティング

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 で実行されると:

  1. ツールが > /dev/null を使おうとする
  2. Windows では /dev/null は存在しない
  3. 代わりにカレントディレクトリに nul という名前のファイルが作成されてしまう

よくある発生タイミング

  • pnpm devpnpm 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
  • これらの名前はファイル名として使用できない(はずだが、一部の環境では作成されてしまう)