🛠️

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の場合は、管理者権限でコマンドプロンプトを開いて実行

予防策

このエラーを未然に防ぐために、以下の点に注意しましょう。

  1. インストール中の中断を避ける: Ctrl+Cなどでプロセスを強制終了しない
  2. 安定したネットワーク環境: インストール中にネットワークが切断されないようにする
  3. 定期的なクリーンアップ: 不要なグローバルパッケージは削除する
    npm list -g --depth=0  # インストール済みパッケージの確認
    npm uninstall -g <不要なパッケージ>
    

まとめ

ENOTEMPTYエラーは、npmパッケージのインストールや更新時に既存ディレクトリの処理に失敗した際に発生します。多くの場合、以下の手順で解決できます:

  1. まずnpm uninstallしてから再インストール
  2. それでも解決しない場合は、手動でディレクトリを削除
  3. npmキャッシュのクリアを試す
  4. 権限の問題を確認・修正

ほとんどのケースでは方法1または方法2で解決するはずです。この記事が同じ問題で困っている方の助けになれば幸いです。

参考情報

GitHubで編集を提案

Discussion