🛠️
npm install時の「ENOTEMPTY: directory not empty」エラーの解決方法
はじめに
npmでグローバルパッケージをインストールまたは更新しようとした際に、以下のようなエラーに遭遇したことはありませんか?
npm error code ENOTEMPTY
npm error syscall rename
npm error path /Users/username/.npm-global/lib/node_modules/package-name
npm error dest /Users/username/.npm-global/lib/node_modules/.package-name-xxxxxxxx
npm error errno -66
npm error ENOTEMPTY: directory not empty, rename '...' -> '...'
この記事では、このエラーの原因と具体的な解決方法を4つのステップで解説します。
エラーの原因
ENOTEMPTYエラーは、npmがパッケージのインストールや更新時に既存のディレクトリをリネーム(退避)しようとした際に発生します。
主な原因
- 不完全なインストール: 前回のインストールが中断されて、中途半端な状態でファイルが残っている
- ロックファイルの残存: プロセスの異常終了により、ロックファイルが残っている
- 権限の問題: ディレクトリへのアクセス権限が不適切
- ファイルシステムの問題: まれにファイルシステム側の問題で発生することも
解決方法
以下の4つの方法を順番に試してみてください。多くの場合、方法1または方法2で解決します。
方法1: アンインストールしてから再インストール
最もシンプルで推奨される方法です。
# パッケージをアンインストール
npm uninstall -g <package-name>
# 再インストール
npm install -g <package-name>
例:
npm uninstall -g @anthropic-ai/claude-code
npm install -g @anthropic-ai/claude-code
方法2: 手動でディレクトリを削除して再インストール
方法1で解決しない場合は、問題のあるディレクトリを直接削除します。
# 既存のディレクトリを削除(エラーメッセージに表示されているパスを使用)
rm -rf /path/to/node_modules/<package-name>
# 再インストール
npm install -g <package-name>
例:
rm -rf /Users/username/.nodebrew/node/v20.18.1/lib/node_modules/@anthropic-ai/claude-code
npm install -g @anthropic-ai/claude-code
方法3: npmキャッシュをクリアして再試行
npmのキャッシュが破損している可能性がある場合に有効です。
# npmキャッシュをクリア
npm cache clean --force
# 再インストール
npm install -g <package-name>
方法4: 権限の確認と修正
権限の問題が疑われる場合は、まず権限を確認してから修正します。
# ディレクトリの権限を確認
ls -la /path/to/node_modules/
# 必要に応じて権限を修正(macOS/Linuxの場合)
sudo chown -R $(whoami) /path/to/node_modules/
# Windowsの場合は、管理者権限でコマンドプロンプトを開いて実行
予防策
このエラーを未然に防ぐために、以下の点に注意しましょう。
-
インストール中の中断を避ける:
Ctrl+Cなどでプロセスを強制終了しない - 安定したネットワーク環境: インストール中にネットワークが切断されないようにする
-
定期的なクリーンアップ: 不要なグローバルパッケージは削除する
npm list -g --depth=0 # インストール済みパッケージの確認 npm uninstall -g <不要なパッケージ>
まとめ
ENOTEMPTYエラーは、npmパッケージのインストールや更新時に既存ディレクトリの処理に失敗した際に発生します。多くの場合、以下の手順で解決できます:
- まず
npm uninstallしてから再インストール - それでも解決しない場合は、手動でディレクトリを削除
- npmキャッシュのクリアを試す
- 権限の問題を確認・修正
ほとんどのケースでは方法1または方法2で解決するはずです。この記事が同じ問題で困っている方の助けになれば幸いです。
Discussion