- npm install で「permission denied」「EACCES」が出る根本原因がわかる
- sudo を使わない安全な解決方法(nvm・Volta推奨)を詳しく解説
- Mac・Linux・Windowsそれぞれの対処手順を具体的なコマンドで紹介
- チーム開発・Docker環境での対処法も網羅
npm で「permission denied」や「EACCES: permission denied」エラーが発生して困っていませんか?このエラーはNode.js開発者が非常によく遭遇するトラブルですが、原因と正しい対処法を知れば確実に解決できます。
この記事では、エラーが発生する仕組みから始め、Mac・Linux・Windowsそれぞれの環境に応じた具体的な解決手順を紹介します。
npm install permission deniedエラーとは?
このエラーは、npmがグローバルパッケージをインストールしようとするディレクトリへの書き込み権限がない場合に発生します。主に以下のコマンド実行時に遭遇します。
npm install -g パッケージ名
# または
npm install
エラーメッセージの例:
npm ERR! Error: EACCES: permission denied, mkdir '/usr/local/lib/node_modules/パッケージ名'
npm ERR! errno: -13
npm ERR! code: EACCES
なぜこのエラーが起きるのか?
原因は、npmのグローバルインストール先がOSの管理ディレクトリ(/usr/local/lib/node_modules など)に設定されているためです。
特に多いケース:
- Homebrewでnode.jsをインストールした(Mac):Homebrewがインストールした場所はrootが所有するため、一般ユーザーに書き込み権限がない
- 公式インストーラーでNode.jsをインストールした(Mac/Linux):同様にシステムディレクトリを使用するため権限エラーが起きやすい
- 過去にsudoを使ってインストールしたことがある:権限が混在した状態になり、以降のインストールが失敗しやすくなる
解決方法1:nvmを使う(最推奨・Mac/Linux)
npmの公式ドキュメントでも推奨されている、最も確実な解決方法です。nvm(Node Version Manager)を使うと、Node.jsがホームディレクトリ内にインストールされるため、権限エラーが根本的に解消されます。
nvmのインストール手順
# nvmをインストール(最新バージョンはGitHubで確認)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.4/install.sh | bash
# シェルを再起動するか、以下を実行
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
# nvmが動くか確認
nvm --version
Node.jsのインストール
# 最新のLTS版をインストール
nvm install --lts
# インストールしたバージョンを使用
nvm use --lts
# バージョン確認
node --version
npm --version
nvmでインストールした後は、npm install -g を実行しても permission denied は発生しません。
既存のHomebrewインストールとの切り替え
Homebrewで入れたNode.jsがある場合は、競合を避けるためにアンインストールしてからnvmを使うのが安全です。
# Homebrewで入れたNode.jsをアンインストール
brew uninstall node
brew uninstall node@xx # バージョン指定がある場合
# その後、nvmでNode.jsを再インストール
nvm install --lts
解決方法2:Voltaを使う(Mac/Linux/Windows対応)
Voltaはnvmの代替として近年人気が高まっているNode.jsバージョン管理ツールです。Windowsにも対応しており、インストールが非常にシンプルです。
Voltaのインストール
# Mac/Linux
curl https://get.volta.sh | bash
# Windowsの場合はインストーラーをダウンロード
# https://volta.sh/ から "Get Started" を選択
Node.jsのインストール
# 最新のLTS版をインストール
volta install node
# 特定バージョンを指定
volta install node@20
# バージョン確認
node --version
npm --version
Voltaでインストール後はnvmと同様に、グローバルnpmインストールでも権限エラーは発生しません。
解決方法3:npmのプレフィックスを変更する(手動設定)
nvmやVoltaを使わずに解決したい場合は、npmのグローバルパッケージインストール先をホームディレクトリ内に変更します。
# ホームディレクトリにnpm用のディレクトリを作成
mkdir ~/.npm-global
# npmのプレフィックスを変更
npm config set prefix '~/.npm-global'
# PATHを通す(~/.bashrc または ~/.zshrc に追記)
export PATH=~/.npm-global/bin:$PATH
# 設定を反映
source ~/.bashrc # または source ~/.zshrc
設定後、npm install -g パッケージ名 を実行すると、ホームディレクトリ内にインストールされるようになります。
解決方法4:chownでディレクトリの所有権を変更する
既にnpmを使用中で、なるべく設定を変えたくない場合は、npmが使用するディレクトリの所有権を現在のユーザーに変更する方法もあります。
# npmのグローバルディレクトリを確認
npm config get prefix
# 所有権を現在のユーザーに変更(macOSの例)
sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}
# Linuxの場合
sudo chown -R $USER $(npm config get prefix)
この方法はシステムへの影響が限定的ですが、Appleシリコン(M1/M2/M3)のMacや特定のLinuxディストリビューションでは追加の対応が必要な場合があります。長期的にはnvmやVoltaへの移行が推奨されます。
Docker環境でpermission deniedが起きる場合
Dockerコンテナ内での npm install でエラーが出るケースも増えています。原因と対処法は以下の通りです。
原因:Dockerfileでの実行ユーザー問題
# 問題があるDockerfileの例
FROM node:20
WORKDIR /app
COPY . .
RUN npm install # rootで実行されるが、ファイルの所有者が異なる場合にエラー
対処法:適切なユーザー設定
# 修正後のDockerfileの例
FROM node:20
WORKDIR /app
# ファイルのコピー前に所有権を設定
COPY --chown=node:node . .
USER node
RUN npm install
または、node公式イメージのnodeユーザーを活用するのが最もシンプルな方法です。
COPY --chown=node:node を忘れずに入れるのが定石です。Windows(WSL/PowerShell)での対処法
Windows環境でのエラーは、WSL(Windows Subsystem for Linux)を使っているか、ネイティブWindowsかで対処法が異なります。
WSL2を使っている場合
WSL2のUbuntu/Debian上ではLinuxと同じ対処法が適用できます。nvmをWSL環境内にインストールするのが最も安定した方法です。
# WSL2(Ubuntu)でのnvmインストール
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.4/install.sh | bash
nvm install --lts
PowerShell(ネイティブWindows)の場合
PowerShellでエラーが出る場合は、Voltaのインストーラーを使うのが最も簡単です。公式サイト(https://volta.sh)からWindows用インストーラーをダウンロードして実行してください。
よくある間違い:sudoを使ってはいけない理由
「sudo npm install -g」でとりあえず動かしている方も多いですが、これは推奨されません。
| 問題 | 内容 |
|---|---|
| 権限の混在 | sudo実行でroot所有のファイルが作られ、次回以降の通常実行が失敗しやすくなる |
| セキュリティリスク | 悪意あるパッケージスクリプトがroot権限で実行されてしまう |
| メンテナンス性の低下 | 権限状態が複雑になり、チーム開発での環境再現性が下がる |
チーム開発での推奨設定
チームでNode.jsバージョンを統一したい場合は、プロジェクトルートに .nvmrc または .node-version ファイルを配置するのが一般的です。
# .nvmrc ファイルの作成(プロジェクトルートに配置)
echo "20.14.0" > .nvmrc
# チームメンバーは以下のコマンドで指定バージョンを使用
nvm use # .nvmrcのバージョンを自動で参照
Voltaを使っている場合は package.json にバージョンを記載できます。
{
"volta": {
"node": "20.14.0",
"npm": "10.7.0"
}
}
まとめ:permission deniedを根本解決するには
npm installのpermission deniedエラーは、Node.jsをシステムにインストールしたことが根本原因です。最も確実な解決策はnvmまたはVoltaを使ってNode.jsをホームディレクトリ内で管理することです。
| 方法 | おすすめ度 | 特徴 |
|---|---|---|
| nvm(Mac/Linux) | ★★★★★ | 最もメジャー。公式推奨 |
| Volta(全OS対応) | ★★★★★ | Windows対応。設定が少ない |
| npmプレフィックス変更 | ★★★☆☆ | 既存環境を崩さず対処可能 |
| chownで所有権変更 | ★★☆☆☆ | 応急処置向け |
| sudo使用 | ☆☆☆☆☆ | 非推奨。使わないこと |
関連記事:VSCode SSH接続できない・使えなくなった時の解決方法・GmailのSMTP認証エラー535の解決方法もあわせてご覧ください。
この記事をシェア