$cd ../troubleshooting/
High💻 Platform
Windows EACCES / EPERM — npmがProgram Filesに書き込めない
// Windowsでユーザー級prefixなしにnpm install -g openclawを実行すると、C:\Program Files\nodejs\node_modulesへの書き込みを試みます — 保護されたディレクトリです。昇格PowerShellでもEACCES、EPERM、またはoperation not permittedが発生します。グローバルパッケージを%APPDATA%\npmにリダイレクトし、PATHでシステムNodeより前に置くのが修正です。
diagnose.sh
🔍 これがあなたの問題ですか?
?npm install -g openclawがEACCES/EPERMで失敗しC:\Program Files\nodejsを参照
?npm config get prefixがC:\Program Files\nodejsを返す(%APPDATA%\npmではない)
?where openclawが複数パスまたはProgram Files\nodejsのみを表示
npm_prefix.ps1
✅ 修正1 — npm prefixを%APPDATA%\npmに設定
prefix変更後は管理者不要
# PowerShell — ユーザー級prefix npm config set prefix "$env:APPDATA\npm" # 確認 npm config get prefix # 期待: C:\Users\<you>\AppData\Roaming\npm npm install -g openclaw
user_path.env
✅ 修正2 — ユーザーPATHを更新(順序が重要)
ユーザーPATHはシステムNodeパスより前に
# ユーザーPATHに追加(設定 → システム → バージョン情報 → 詳細 → 環境変数)
# ユーザー環境変数 → Path → 新規:
%APPDATA%\npm
%APPDATA%\npm\node_modules\.bin
# またはPowerShell(現在のユーザー):
[Environment]::SetEnvironmentVariable(
"Path",
"$env:APPDATA\npm;$env:APPDATA\npm\node_modules\.bin;" + [Environment]::GetEnvironmentVariable("Path","User"),
"User"
)nvm_setup.ps1
✅ 修正3 — nvm-windowsまたはfnmを使用(長期的に推奨)
バージョン管理でProgram Filesを完全回避
# nvm-windows (https://github.com/coreybutler/nvm-windows) nvm install lts nvm use lts npm config set prefix "$env:APPDATA\npm" npm install -g openclaw # fnm代替(scoop/choco) fnm install --lts fnm use lts npm install -g openclaw
💡 プロのヒント:管理者としてグローバルnpmを実行しない
「管理者として実行」でグローバルインストールするとprefix問題が隠れ、Program Files下に2つ目のコピーができユーザーインストールをシャドウします。prefix+PATHを修正してから、昇格なしでインストールしてください。
🛡️ 予防チェックリスト
- • Node再インストールのたびにnpm config get prefix — 一部インストーラーでリセットされる
- • %APPDATA%\npmと%APPDATA%\npm\node_modules\.binをユーザーPATHの先頭に
- • nvm-windowsまたはfnmを優先 — NodeアップグレードがProgram Files権限に触れない
- • prefixをdotfileメモに記録 — 企業イメージはログイン時にPATHを戻すことがある
- • where openclawで確認 — 最初のヒットはAppData下でProgram Filesではないこと
❓ FAQ
Q1. WindowsでnpmがProgram Filesに書き込もうとする理由は?
公式Node.js MSIはnode.exeとグローバルnode_modulesをC:\Program Files\nodejsに配置します。prefix未設定時npmはそのディレクトリをデフォルトにします。UACがProgram Filesを非昇格書き込みから保護 — 通常ユーザーでEACCES/EPERMになります。
Q2. npm prefixをProgram Filesから変更しても安全ですか?
はい — Microsoft推奨のユーザー別グローバルツールパターンです。npm公式ドocsもWindowsでprefix=%APPDATA%\npmを説明。Node自体はProgram Filesに残り、グローバルCLI(openclaw等)のみプロファイルに入ります。
Q3. 管理者でnpmを実行して「成功」した — 修正1はまだ必要?
openclawが2つある可能性:Program Files(Admin)とAppData(ユーザー)。PATH順序が実行バイナリを決めます。cmdでwhere openclaw — Program Filesが勝つならAdminコピーをアンインストールしユーザーprefixに統一。
Q4. PATH変更後に再起動が必要ですか?
PowerShell、cmd、Windows Terminalを閉じて開き直してください — 既存セッションはPATHをキャッシュ。VS Code/Cursor統合ターミナルもウィンドウ全体の再起動が必要。新しいターミナルでopenclaw --versionで確認。
Q5. WSLやGit Bashは動作が異なりますか?
WSLはLinuxパス — 本ガイドはネイティブWindows npm向け。Git BashはWindows PATHを継承しますが%APPDATA%展開を壊すことがあります — prefix設定はPowerShell推奨。WSL内ではLinux npmでOpenClawをインストール。
Q6. 企業ポリシーでユーザーPATH編集がブロックされている場合は?
ITにGPOで%APPDATA%\npmを追加してもらうか、プロファイルにnvm-windows(Admin不要)。最終手段:npxでグローバルインストールなし — 起動は遅いがProgram Files書き込みなし。