TL;DR — 素早い解決策
Windowsはファイルパスを260文字に制限しています(MAX_PATH制限)。以下のコマンド1つでシステム全体に適用できます — PowerShellを管理者として実行してください:
reg add "HKLM\SYSTEM\CurrentControlSet\Control\FileSystem" /v LongPathsEnabled /t REG_DWORD /d 1 /f
再起動後、Node.js/npmを使用している場合はさらに以下も実行してください:
npm config set long-paths true
グループポリシーによってレジストリ変更が上書きされる可能性がある企業マシンの場合は、修正方法2に進んでください。
原因の詳細
MAX_PATHはMS-DOSの遺産です。Windowsはこの260文字の制限をWindows 95から引き継ぎ、その数値をハードコードした古いソフトウェアの互換性を維持するために何十年もそのままにしてきました。
Windows 10バージョン1607では、より長いパスのサポートが密かに追加されました。ただし、デフォルトでは無効になっています。明示的に有効化する必要があります。
この問題が発生しやすい状況:
- 深い
node_modulesのネスト — npm v2/v3はパッケージを10階層以上ネストしており、パスが300文字を超えることがあった C:\Users\johndoe\Documents\Work\Clients\AcmeCorp\2024\frontend\のような深いパスにクローンされたリポジトリ(ファイル名なしですでに65文字)- すでに深いプロジェクトディレクトリ内にあるPythonの仮想環境
- webpackやViteなどのビルドツールが長いコンテンツハッシュ名の一時ファイルを生成する場合
- Windows上のDocker Desktop(WSL2のマウントパスがさらにパス長を増加させる)
修正方法1 — レジストリで長いパスを有効化(最速)
PowerShellを管理者として開き、以下を実行してください:
# 長いパスのサポートを有効化
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" -Name "LongPathsEnabled" -Value 1
# 設定を確認
Get-ItemPropertyValue -Path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" -Name "LongPathsEnabled"
# 出力されるはずの値: 1
この設定は次回起動時まで有効にならないため、実行後に再起動してください。
修正方法2 — グループポリシーで長いパスを有効化(管理対象マシン)
企業マシンでは次回ログイン時にレジストリ変更が上書きされることがよくあります。この場合はグループポリシーを使用するのが適切です:
Win + Rを押してgpedit.mscと入力し、Enterキーを押す- 次のパスに移動:
ローカルコンピューターポリシー → コンピューターの構成 → 管理用テンプレート → システム → ファイルシステム - Win32の長いパスを有効にするをダブルクリック
- 有効に設定してOKをクリック
- 再起動
注意:gpedit.mscはWindows ProおよびEnterpriseにのみ存在します。Windows Homeをお使いの場合は、修正方法1を使用してください。
修正方法3 — npm / Node.js 固有の設定
OSレベルの修正だけでは不十分な場合があります。npmには独自のフラグがあります:
# グローバルに設定
npm config set long-paths true
# 確認
npm config get long-paths
# 出力されるはずの値: true
管理者権限がない場合は、プロジェクトをドライブのルートに近い場所に移動してください。違いを比べてみましょう:
# src/ に到達する前で既に97文字:
# C:\Users\john\Documents\work\clients\acme-corp\projects\frontend\app
# 16文字 — 余裕十分:
# C:\dev\acme-frontend
この変更だけで、システム設定を一切変更せずにエラーが解消されることがよくあります。
修正方法4 — Git for Windows の長いパスのサポート
GitはWindowsとは独立した独自のパス長設定を持っています:
# グローバルに有効化
git config --global core.longpaths true
# または現在のリポジトリのみ
git config core.longpaths true
# 確認
git config --global --get core.longpaths
# 出力されるはずの値: true
これを設定しないと、OSの修正を適用した後でもモノレポのクローンが失敗し続けます。
修正方法5 — 長いパスをドライブレターにマップする
パス構造を変更できない場合は、短いパスに見せかける方法があります。substコマンドで任意のディレクトリをドライブレターにマップできます:
# 長いプロジェクトパスをドライブZ:にマップ
subst Z: "C:\Users\yourusername\Documents\Projects\company\repo"
# Z:\ から作業する
cd Z:\
npm install
このマッピングは再起動時に消えます。永続化するには、substコマンドをスタートアップスクリプトまたはログイン時に実行するスケジュールタスクに追加してください。
修正の確認
ビルドを再実行する前に、設定が実際に有効になっているか確認してください:
# レジストリの値を確認 (PowerShell)
(Get-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem").LongPathsEnabled
# 期待値: 1
# 250文字の名前でテストディレクトリを作成
$longPath = "C:\" + ("a" * 250)
New-Item -ItemType Directory -Path $longPath -ErrorAction SilentlyContinue
if (Test-Path $longPath) {
Write-Host "長いパスは正常に動作しています!"
Remove-Item $longPath
} else {
Write-Host "長いパスはまだ機能していません — 再起動しましたか?"
}
テストが成功したら、元の失敗したコマンド(npm install、git clone、ビルドスクリプトなど)を再実行してください。ENOENTエラーは解消されているはずです。
管理者権限がない場合の対処法
修正方法1と2には管理者権限が必要ですが、他にも選択肢があります:
- プロジェクトをより短いパスに移動する — 最も確実な方法で、権限不要
- WSL2を使用する — WSL内のLinuxファイルシステムには260文字の制限がありません。WSLからNode.js/npmコマンドを実行し、
/mnt/c/...経由でプロジェクトファイルにアクセスできます - npmの
--prefixフラグを使用して、より短いパスにパッケージをインストールする - IT部門に依頼する — 長いパスの有効化はレジストリの1行変更で済み、他に影響はなく、1分以内に説明できます
クイックリファレンス
# 1. 長いパスを有効化 (管理者PowerShell)
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" -Name "LongPathsEnabled" -Value 1
# 2. npmの長いパス設定
npm config set long-paths true
# 3. Gitの長いパス設定
git config --global core.longpaths true
# 4. 再起動

