エラーの内容
VS Code で「WSL に接続」をクリックするか、WSL フォルダーを開こうとすると、次のエラーが表示されます:
VS Code Server for WSL closed unexpectedly. Check the WSL terminal for more details.
ウィンドウが 10〜30 秒間フリーズした後、接続が切れて何も開きません。Windows のアップデート後、VS Code のアップデート後、または WSL の調子が悪い日に発生しやすい傾向があります。
原因
VS Code は接続時に WSL ディストリビューション内の ~/.vscode-server/ にサーバーバイナリをインストールし、接続のたびにそれを起動します。このプロセスがクラッシュしたり起動を拒否したりすると、このエラーが発生します。主な原因は次のとおりです:
- 古い VS Code バージョンから残った古いまたは破損したサーバーファイル
- WSL2 のネットワーク問題 — DNS の障害、サーバーバイナリ取得のためのインターネット接続不可
~/.vscode-serverのパーミッション不正- Windows 側の VS Code は更新済みだが、古いサーバーバイナリが WSL 内にキャッシュされたまま
- WSL 自体のクラッシュまたは状態の破損
- アンチウイルス(主に Windows Defender)によるサーバーバイナリの隔離
手順ごとの修正方法
ステップ 1:残留サーバープロセスを終了する
VS Code を経由せず、スタートメニューで「Ubuntu」(またはお使いのディストリビューション名)を検索して WSL ターミナルを直接開きます。その後、残留しているサーバープロセスを終了します:
pkill -f vscode-server
pkill -f node
残存プロセスがないことを確認します:
ps aux | grep vscode
ステップ 2:VS Code サーバーキャッシュを削除する
このコマンド一つで 80% のケースが解決します。VS Code の更新後、キャッシュされたサーバーバイナリが古くなるため、削除することで次回の再接続時にクリーンなダウンロードが強制されます:
rm -rf ~/.vscode-server
VS Code Insiders を使用している場合は、以下も実行します:
rm -rf ~/.vscode-server-insiders
この後、再接続を試みてください。VS Code が正しいバージョンのサーバーを自動的にダウンロードします。
ステップ 3:WSL からインターネットに接続できるか確認する
初回接続時、VS Code は Microsoft のサーバーからサーバーバイナリをダウンロードします。WSL のネットワークが壊れていると、このステップがサイレントに失敗します。
curl -I https://update.code.visualstudio.com
ハングしたりエラーになる場合は、WSL の DNS が原因です。次のように上書きします:
# 現在の内容を確認
cat /etc/resolv.conf
# 動作するネームサーバーに置き換える
sudo tee /etc/resolv.conf <<EOF
nameserver 8.8.8.8
nameserver 1.1.1.1
EOF
この動作を無効にしない限り、WSL は再起動のたびに resolv.conf を再生成します:
# /etc/wsl.conf に追記
sudo tee -a /etc/wsl.conf <<EOF
[network]
generateResolvConf = false
EOF
ステップ 4:WSL を完全に再起動する
WSL 内からではなく、PowerShell または CMD から実行します:
wsl --shutdown
約 5 秒待ってから、ディストリビューションを再度開きます。完全シャットダウンにより WSL2 の VM 状態が完全にリセットされ、ターミナルを閉じるだけでは解消されないネットワークの不具合、ゾンビプロセス、その他の問題が解決されます。
ステップ 5:ディスク容量とパーミッションを確認する
ディスクが満杯の場合、サーバーのインストールがサイレントに失敗します。まず確認します:
df -h ~
ls -la ~ | grep .vscode
再作成後に ~/.vscode-server のパーミッションが正しくない場合:
chmod 755 ~/.vscode-server
chown -R $USER:$USER ~/.vscode-server
ステップ 6:サーバーログを確認する
WSL に手動で接続し、サーバーの実際の出力を確認します:
ls ~/.vscode-server/
cat ~/.vscode-server/bin/*/server.log 2>/dev/null || echo "No log yet"
さらに効果的な方法として、バイナリを直接実行してエラーを標準出力に表示させます:
~/.vscode-server/bin/*/server.sh --port 0 --host 127.0.0.1
cannot execute binary file が表示される場合、ダウンロードが破損しています。ステップ 2 に戻ってください。
ステップ 7:Windows Defender を確認する
Defender が VS Code Server に必要な Node バイナリを隔離することがあります。Windows セキュリティ → ウイルスと脅威の防止 → 保護の履歴 を開き、\\wsl$\Ubuntu\home\...\vscode-server のようなパスからフラグが立てられたものがないか確認します。見つかった場合は、ファイルを復元してそのフォルダーを除外リストに追加してください。
ステップ 8:Remote WSL 拡張機能を再インストールする
問題が WSL 側ではなく Windows 側にある場合があります。拡張機能パネルを開き、WSL(ms-vscode-remote.remote-wsl)を見つけ、歯車アイコン →アンインストールをクリックします。VS Code を再起動して、再インストールします。これにより AppData フォルダー内に蓄積された拡張機能の破損状態がクリアされます。
ステップ 9:最終手段 — WSL ディストリビューションをリセットする
最終手段です。事前にデータをバックアップしてください:
# PowerShell で実行
wsl --export Ubuntu C:\backup\ubuntu-backup.tar
# 削除して再インポート
wsl --unregister Ubuntu
wsl --import Ubuntu C:\WSL\Ubuntu C:\backup\ubuntu-backup.tar
修正の確認
- Windows で VS Code を開く
Ctrl+Shift+Pを押して Remote-WSL: New Window と入力する- 左下隅に
WSL: Ubuntu(またはお使いのディストリビューション名)が表示されることを確認する - VS Code 内でターミナルを開き(
Ctrl+``)、uname -a` を実行する — Windows ではなく Linux の出力が表示されるはず - サーバープロセスが動作していることを確認する:
ps aux | grep vscode-server
アップデート後の再発を防ぐ
VS Code は Windows 上でサイレントに自動更新されます。古いサーバーバイナリは次回の接続時にクリーンアップされるはずですが、されないこともあります。ログイン時に古いバージョンを自動的に削除するために、次のスニペットを ~/.bashrc に追加してください:
# 最新の 2 バージョンの vscode-server のみ保持する
if [ -d ~/.vscode-server/bin ]; then
ls -t ~/.vscode-server/bin | tail -n +3 | xargs -I{} rm -rf ~/.vscode-server/bin/{}
fi
また、Windows 側の VS Code も常に最新の状態に保ちましょう:ヘルプ → 更新の確認。Windows クライアントと WSL サーバーバイナリのバージョン不一致は、このクラッシュを確実に引き起こす原因になります。

