
【Windows】パスが長すぎると言われたときの対処法
はじめに
Windowsでフォルダやファイルのコピーを行う際、「パスが長すぎる」と表示されエラーになることがあります。
この現象について原因と対処法を調べました。
前提
- Windows 11
- Git 2.56.0.windows.1
事象
長いパスを持つファイルを含むフォルダをコピーすると、以下のようにダイアログが表示されコピーできません。

node_modulesなどのパッケージや、アプリのキャッシュなど、階層が深いフォルダを含む場合に発生しやすいです。
また、Git操作をする際も、以下のようにエラーとなる場合があります。
$ git add .
warning: could not open directory 'long/long/path': Filename too long
原因
Windows上の多くのアプリは、ファイル操作にWindows API(Win32 API)を使用しています。このAPIには、パスの最大長としてMAX_PATHが260という制限があります。この文字数はドライブ文字、コロン、バックスラッシュ、終端のnullも含むため、C:\以降のパスに使用できる文字数は256文字となります。
エクスプローラやGitはこのAPI経由でファイルの操作を行っているため、この制限に引っかかってエラーとなります。
パスの最大長の制限 - Win32 apps | Microsoft Learn
しかし、ファイルシステム自体の最大パス長はもっと長く、32,760文字となっています。
ファイル システムの機能の比較 - Win32 apps | Microsoft Learn
このエラーは、ファイルシステムの制約ではなく、Windows APIの制約によって発生しているものです。
Windows 10バージョン1607以降では、OSの設定でこの制限を解除できます。ただし、解除したとしても実際に長いパスの操作ができるのは、アプリ側が長いパスに対応している場合のみです。このため、設定を変えても解決しないケースがあります。
対処法
パスを短くする
最も確実な対処法はパスを短くすることです。フォルダ名を短くしたり、階層の浅い場所に移動してから操作を行います。
ただし、パス構造ごと保持しておく必要がある場合にはこの手段は使えません。
長いパスに対応したツールを使う
エクスプローラの代わりに、長いパスに対応したツールで操作を行います。
Windows標準のrobocopyは、最大パス長を超えるファイルの操作ができました。
robocopy "C:\_work\999_test\long-path" "C:\_work\999_test\long-path2" /E
/Eオプションを指定することでサブフォルダも含めてコピーされます。
また、Git Bashでcpコマンドを使用してもコピーできました。
cp "C:\_work\999_test\long-path" "C:\_work\999_test\long-path2" -r
長いパスを含む圧縮フォルダの解凍は、エクスプローラの「すべて展開」ではエラーになったものの、7-Zipを使用したら解凍することができました。
OSの設定で長いパスを有効にする
Microsoftの公式ドキュメントには、レジストリのLongPathsEnabled値を変更することで長いパスに対応できるようにする方法が紹介されています。
Windows 10 バージョン 1607 以降で長いパスを有効にする
ただし、この方法を使用しても、アプリケーション側が長いパスに対応していなければ操作できるようにはなりません。アプリケーションが長いパスに対応するには、上記ドキュメントにあるlongPathAwareがアプリケーションマニフェストに含まれている必要があります。
自分がファイル操作を含むアプリケーションを作成する際に、長いパスに対応したい場合はこのlongPathAwareをアプリケーションマニフェストに含める必要があります。
Gitの場合
git configでcore.longpathsをtrueに設定します。
# リポジトリ内でだけ有効にする場合
git config core.longpaths true
# グローバルで有効にする場合
git config --global core.longpaths true
注意点
- 大前提ですが、パスを設計する場合はこれらの対処法を使わなくて済むよう、できるだけ階層が深くならないようにすることを推奨します
- レジストリやポリシーの設定変更は、会社用PCでは制限されている場合があります
- コマンドやレジストリ操作は操作ミスに注意してください
以下のような記事もありました。robocopyに限りませんが、コマンドの実行は一瞬で致命的な結果を招きかねないため怖いですね。
おわりに
長いパスの操作が失敗したらとりあえずrobocopyを使っていましたが、調べていたらOSの設定とアプリの設定があることなどもわかり、興味深かったです。
この記事がどなたかの参考になれば幸いです。




