記事一覧に戻る
開発

npm install permission deniedエラーの解決方法|Mac・Linux・Windowsで試すべき3つの対処法

2026年5月8日 約8分で読めます
この記事のポイント
  • 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を使ってインストールしたことがある:権限が混在した状態になり、以降のインストールが失敗しやすくなる
「sudo npm install -g」でとりあえず動かした経験がある人は要注意です。sudoで一度インストールすると所有権がrootになり、次回以降のnpmコマンドが連鎖的に失敗しやすくなります。今すぐnvmやVoltaに移行することを強くお勧めします。

解決方法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ユーザーを活用するのが最もシンプルな方法です。

Docker内のnpm permission errorは「コンテナを起動するユーザーとCOPYしたファイルの所有者が違う」というケースがほとんどです。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の解決方法もあわせてご覧ください。

「権限エラーが出るたびにsudo付けていた」という方は、今日nvmに移行するだけで開発環境が劇的にスッキリします。nvmのインストール自体は5分以内で完了します。
よくある質問
npm install -g でpermission deniedが出るのはなぜですか?
npmのグローバルインストール先がシステムディレクトリ(/usr/local/lib/node_modulesなど)に設定されており、そこへの書き込み権限がないためです。HombrewやOSの公式インストーラーでNode.jsを入れた場合によく起きます。根本解決にはnvmやVoltaを使ったNode.jsバージョン管理が推奨されます。
sudo npm install -g を使ってはいけないのはなぜですか?
sudoで実行するとインストールされたファイルの所有者がrootになり、次回以降の通常ユーザーでの実行が連鎖的に失敗しやすくなります。また、悪意あるパッケージのスクリプトがroot権限で実行されるセキュリティリスクもあります。npm公式もsudoの使用を非推奨としています。
nvmとVoltaはどちらを選べばよいですか?
Mac/LinuxのみならどちらでもOKです。チームでWindowsユーザーが混在する場合はVoltaが向いています。nvmはシェアが多く情報が豊富、VoltaはWindowsに対応しておりpackage.jsonでバージョン固定できる利点があります。どちらも無料で使えます。
Dockerコンテナ内でnpm installがpermission deniedになる場合は?
DockerfileでCOPY時に所有権を設定するのが最もシンプルな解決策です。`COPY --chown=node:node . .` のように所有権をnodeユーザーに設定し、`USER node` でnodeユーザーとして実行することで解決できます。
チーム全員でNode.jsのバージョンを統一するにはどうすればよいですか?
nvmを使っている場合はプロジェクトルートに`.nvmrc`ファイルを作成しバージョンを記載します。`echo "20.14.0" > .nvmrc` とするだけで、他のメンバーが`nvm use`を実行すれば同じバージョンを使えます。Voltaならpackage.jsonの"volta"フィールドでバージョンを固定できます。

この記事をシェア

開発環境の構築・Node.js活用のご相談

開発環境の整備から社内システム開発まで、FUNBREWが技術的な悩みをワンストップで解決します。

最新情報をお届けします

IT活用のヒントやお役立ち情報を定期的にお届けします。

関連記事

開発
2026年5月27日

システム保守契約の更新・見直しガイド|更新タイミング・比較チェックリスト・乗り換え手順

システム保守契約の更新時期に何を確認すべきか、乗り換えの判断基準と手順を発注者向けに解説。契約満了の3〜6ヶ月前から動くべき理由と、比較・交渉のポイントをチェックリスト付きで紹介します。

開発
2026年5月26日

システム保守の定期点検チェックリスト|月次・四半期・年次で確認すべき15項目

システム保守を外注している発注者が「本当に保守されているか」を自分で確認するための定期点検チェックリスト。月次・四半期・年次のタイミングで確認すべき15項目を実務担当者向けに解説します。

開発
2026年5月20日

システム障害が起きたら発注者はどう動く?保守委託先へのエスカレーション手順と確認ポイント

システム障害が発生したとき、発注者側の担当者は何をどの順番で確認すればよいのか。保守委託先へのエスカレーション手順・初動確認・SLA照合・経営層への報告まで、発注者目線の障害対応フローを解説します。

開発
2026年5月18日

保守委託後の品質確認方法|「本当に保守されているか」を発注者が確かめる5つのポイント

システム保守を外注した後、「本当に保守されているのか?」と不安になる発注者は少なくありません。月次レポートの見方・障害対応の速度・バージョン管理の状況など、発注者が実際に確認すべき5つのポイントを解説します。

相談のハードル、下げました

まずは気軽にご相談ください

「まだ具体的に決まっていない」「とりあえず話を聞きたい」でも大丈夫。プロトタイプを見ながら、一緒にアイデアを形にしていきましょう。

相談無料 オンライン対応 1週間でプロトタイプ