VS CodeでNASやネットワーク共有フォルダのファイルを直接ドラッグ&ドロップできない原因と回避策

この記事は約4分で読めます。
この記事が役立ったらブックマーク! あとで読み返したり、環境構築時のリファレンスに活用できます
B! はてなブックマークに追加

Windows環境で開発やサイト運用をしている際、「エクスプローラーで開いているNASや共有フォルダ内のファイルを、VS Codeのファイルツリーやエディタ画面に直接ドラッグ&ドロップしても追加できない(進入禁止アイコンが出る、または無反応になる)」という現象に遭遇することがあります。

ローカルドライブ(CドライブやDドライブ)上のファイルなら問題なくドロップできるため、「VS Codeのバグか?」と疑われがちですが、実際には Windowsのセキュリティ境界とElectronフレームワークの仕様 に起因する問題です。

本記事では、この現象が発生する技術的な背景と、実務でスムーズに回避するための3つの手順を解説します。

発生する現象

  • エクスプローラー上で開いている \\192.168.x.x\... などのUNCパス、またはネットワークドライブ(Z:\ など)に割り当てられたファイルを掴む。
  • VS Codeのサイドバー(エクスプローラーツリー)またはエディタ領域へドラッグする。
  • マウスポインタが「進入禁止マーク」になる、もしくはドロップしてもファイルがプロジェクトへコピー・インポートされない。

なぜ起きるのか?(技術的背景)

1. Windowsのセキュリティ境界(OLE/ドラッグ&ドロップ分離)

Windowsには、ネットワークパス上のファイルを「イントラネット」または「信頼されていないゾーン」として扱うセキュリティ機構(ゾーン識別子 / ZoneId)が存在します。

特に、VS Codeが管理者権限(管理者として実行)で立ち上がっている場合や、権限レベルの異なるプロセス間でドラッグ&ドロップ(OLEドラッグ&ドロップ)を行おうとすると、UIPI(User Interface Privilege Isolation)によってイベント自体がOSレベルで遮断されます。

2. Electron / Chromium のファイルパス解決制限

VS CodeはElectron基盤で動作しています。ローカルの絶対パス(C:\...)であればファイルシステムAPIが即座にハンドルを取得できますが、UNCパス(\\server\share\...)やSAMBA経由のファイルディスクリプタをWeb標準のDrag & Drop APIで受け取る際、パスのパースに失敗したり、セキュリティサンドボックスによってドロップイベントが破棄される場合があります。

回避策

回避策1:Windowsエクスプローラー側で操作する(最も確実・手軽)

VS Codeのウィンドウ上へ直接落とすのではなく、エクスプローラー同士でコピーします。

  1. VS Codeのサイドバーで、インポート先のフォルダを右クリックします。
  2. 「エクスプローラーで表示(Reveal in File Explorer)」 を選択します。
  3. 開いたWindowsエクスプローラーのウィンドウへ、NAS側のファイルをドラッグ&ドロップ(または Ctrl+C / Ctrl+V)します。
  4. ファイルが配置されると、VS Code側のファイルツリーにも即座に自動反映されます。

回避策2:一度ローカルストレージを経由させる

一時的にデスクトップや作業用ローカルフォルダ(C:\temp など)にファイルをコピーし、そこからVS Codeへドラッグ&ドロップします。ローカルに落ちた時点でOSのネットワーク境界制約が外れるため、正常に受け入れられます。

回避策3:VS Code内ターミナルからコマンドで同期する

マウス操作を挟まず、VS Codeに内蔵されているPowerShellターミナルから直接コピーコマンドを実行します。

PowerShell
# 共有フォルダから作業フォルダへ直接コピー
Copy-Item -Path "\\192.168.1.xxx\shared_folder\target_file.csv" -Destination ".\assets\"

ネットワークドライブが割り当てられている場合:

PowerShell
Copy-Item -Path "Z:\target_file.csv" -Destination ".\assets\"

おわりに

「エディタへの直接ドラッグ&ドロップ」は日常的によく使う操作ですが、リモートストレージやNASを跨ぐ場合はOSやフレームワークのセキュリティ制限を受けやすいポイントです。

VS Code側の不具合を疑って設定を弄るよりも、「エクスプローラーで表示」からOS標準のファイルコピーへ回すか、ターミナルから一発で取得する運用に切り替えるのが最も手戻りがありません。

コメント

タイトルとURLをコピーしました