- Node.js
npm EACCES: permission deniedの直し方
npm error code EACCES は、npm がファイルやフォルダーを作ろうとして、OS に権限が無いと断られたときのエラーです。 いちばん多いのは、一般ユーザーで npm install -g(グローバルにインストール)して、root が持っているフォルダーに書き込もうとしたときです。
エラー文の path を見ると、どこに書き込めなかったかが分かります。
path の場所 |
原因 | 直し方 |
|---|---|---|
/usr/local/lib/node_modules/...(など Node.js を入れた場所) |
-g の入れ先が root のフォルダー |
npm の入れ先(prefix)を自分のフォルダーに変える。または npx |
~/.npm/_cacache/...(自分のホームの .npm) |
以前 sudo npm を実行して、キャッシュが root のものになった |
sudo chown -R で自分のものに戻す |
プロジェクトの node_modules/... |
sudo npm install で node_modules が root のものになった |
node_modules を消して、sudo なしで入れ直す |
sudo npm install -g で済ませると、あとで別の EACCES の原因になります(下で再現します)。
確認環境:Node.js 22.22.2、npm 10.9.7、Linux(一般ユーザー dev)(確認日 2026年10月11日)。
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「npm EACCES: permission deniedの直し方」
再現:一般ユーザーで npm install -g
$ npm config get prefix
/opt/node22 ← Node.js を入れた場所(root のフォルダー)
$ npm install -g cowsay
npm error code EACCES
npm error syscall mkdir
npm error path /opt/node22/lib/node_modules/cowsay
npm error errno -13
npm error Error: EACCES: permission denied, mkdir '/opt/node22/lib/node_modules/cowsay'
...
npm error The operation was rejected by your operating system.
npm error It is likely you do not have the permissions to access this file as the current user
npm error
npm error If you believe this might be a permissions issue, please double-check the
npm error permissions of the file and its containing directories, or try running
npm error the command again as root/Administrator.
npm install -g は、npm config get prefix のフォルダーの下(lib/node_modules)にインストールします。 Node.js を root で入れた環境(/usr/local など)では、そこに一般ユーザーは書き込めません。エラー文は「root で実行し直す」ことも案内していますが、次の方法のほうが安全です。
直し方1:npm の入れ先を自分のフォルダーにする
npm 公式ドキュメントの手順です(Linux・Mac)。
npm config set prefix ~/.local # -g の入れ先を自分のホームに
echo 'PATH=~/.local/bin:$PATH' >> ~/.profile
source ~/.profile # 今のシェルにも反映
npm install -g cowsay # sudo なしで入る
確認環境でも、prefix を自分のホームのフォルダーに変えると、sudo なしで npm install -g が成功し、which cowsay が自分のフォルダーのコマンドを指しました。
$ npm config get prefix
/home/dev/.npm-global
$ npm install -g cowsay
added ... packages
$ which cowsay
/home/dev/.npm-global/bin/cowsay
PATH に prefix/bin を足すのを忘れると、入ったのにコマンドが見つかりません(command not found)。zsh を使っているなら、~/.zprofile に source ~/.profile も足します(npm 公式ドキュメント)。
直し方2:npx で、入れずに実行する
一度だけ使うツールなら、グローバルに入れずに実行できます。
$ npx --yes cowsay@1.6.0 npx
_____
< npx >
-----
npx は、パッケージを一時的に取得して実行します。 版を指定して実行できるので、プロジェクトごとに版が違うツール(create-xxx など)にも向いています。プロジェクトで使うツールは、npm install --save-dev でプロジェクトに入れ、npx ツール名 か npm scripts から実行するのが基本です。
直し方3:Node.js をバージョン管理ツールで入れ直す
npm 公式ドキュメントでは、権限の問題を避ける一番の方法として、Node.js のバージョン管理ツール(nvm など)で Node.js を入れ直すことが勧められています。バージョン管理ツールは、Node.js 自体を自分のホームに入れるため、npm install -g も自分のフォルダーに入ります。複数の Node.js の版を切り替える必要があるなら、この方法が向いています。
sudo で入れたあとに出る EACCES
sudo npm install -g で一度通しても、あとで別の EACCES が出ることがあります。 確認環境で、root の権限で npm を実行したときに、npm のキャッシュ(~/.npm)に root のファイルが作られた状態を作りました。
$ ls -ld ~/.npm/_cacache
drwxr-xr-x 5 root root ... /home/dev/.npm/_cacache ← 自分のホームなのに root のもの
$ npm install ms ← 普通のプロジェクトでの install
npm error code EACCES
npm error syscall open
npm error path /home/dev/.npm/_cacache/tmp/46f7d9cf
npm error errno EACCES
npm error
npm error Your cache folder contains root-owned files, due to a bug in
npm error previous versions of npm which has since been addressed.
npm error
npm error To permanently fix this problem, please run:
npm error sudo chown -R 1001:1002 "/home/dev/.npm"
エラー文に、直すコマンドがそのまま書かれています(数字は自分のユーザー ID とグループ ID)。
sudo chown -R "$(id -u)":"$(id -g)" ~/.npm
確認環境でも、所有者を戻すと npm install ms が成功しました(added 1 package)。プロジェクトの node_modules が root のものになっているときも、同じように所有者を戻すか、node_modules を消して sudo なしで入れ直します。
確認の手順(チェックリスト)
| 順番 | 確認すること | 方法 |
|---|---|---|
| 1 | 書き込めなかった場所 | エラー文の path |
| 2 | -g の入れ先 |
npm config get prefix と、そのフォルダーの所有者(ls -ld) |
| 3 | -g で入れる必要があるか |
一度だけなら npx、プロジェクトのツールなら --save-dev |
| 4 | 入れ先を変える | npm config set prefix ~/.local と PATH の追加 |
| 5 | キャッシュの所有者 | ls -ld ~/.npm/_cacache。root なら sudo chown -R |
| 6 | sudo を使っていないか | sudo npm は使わない |
よくある質問
Q. sudo npm install -g で入れたものは、どうすればよいですか。 A. 動いているならそのままでも使えますが、更新や削除のたびに sudo が必要になり、今回のようなキャッシュの問題も起きます。入れ先を自分のフォルダーに変えたあと、自分の権限で入れ直すと管理が楽になります。
Q. Windows でも出ますか。 A. 出ることがあります。npm 公式ドキュメントでは、入れ先を変える手順は Windows には当てはまらないとされており、Windows では、もう1つの方法(Node.js のバージョン管理ツールで入れ直す)を使います。
まとめ
- root のフォルダーに書き込もうとして OS に断られたエラー。エラー文の
pathで場所を見る npm install -gの入れ先はnpm config get prefix。root のフォルダーなら自分のフォルダーに変える- 一度だけのツールは npx、プロジェクトのツールは
--save-dev sudo npmは使わない。キャッシュが root のものになり、あとで別の EACCES が出るcache folder contains root-owned filesは、エラー文のsudo chown -Rで直る
参考・出典
確認日はいずれも 2026年10月11日です。
- npm Docs「Resolving EACCES permissions errors when installing packages globally」:https://docs.npmjs.com/resolving-eacces-permissions-errors-when-installing-packages-globally
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「npm EACCES: permission deniedの直し方」
株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。
WE ARE HIRING
RJCで一緒に開発しながら、
成長を楽しみませんか?
RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!
- 127日年間休日
- 12時間平均残業時間
- 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!
ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。