エラーの内容
コーディング中にVS Codeがフリーズし、次のダイアログが表示されます:
Extension host is unresponsive. Do you want to restart it?
「再起動」をクリックすると数分は動きますが、またフリーズします。ダイアログが表示されないこともあります。VS Codeがハングし、IntelliSenseが応答しなくなり、ステータスバーのスピナーが永遠に回り続けます。
拡張機能ホストは、インストールされているすべての拡張機能を実行する独立したNode.jsプロセスです。デッドロックが発生すると、VS Codeのコアエディタは動き続けますが、拡張機能に依存するすべての機能が停止します。IntelliSense、リント、Gitの装飾、スニペット——すべてが使えなくなります。
ステップ1:問題のある拡張機能を特定する
闇雲に拡張機能を無効にするのは禁物です。まず、何がハングしているかを特定しましょう。組み込みのプロセスエクスプローラーを開きます:
Help → Open Process Explorer
CPUが30〜50%以上で高止まりしているか、メモリが500MBを超えて増加し続けている拡張機能プロセスを探します。プロセス名には拡張機能のIDが含まれています。
プロセスエクスプローラー自体が開かない場合は、OSのタスクマネージャーを使いましょう。WindowsではCode.exeまたはnode.exeプロセスをフィルタリングし、CPU使用率が最も高いものが通常は拡張機能ホストです。macOS/Linuxではtopを実行してnodeを探します。
最も手軽な確認方法:
code --disable-extensions
VS Codeが正常に動作すれば、拡張機能が原因です。
ステップ2:バイセクトで問題の拡張機能を絞り込む
手動の試行錯誤よりバイナリサーチが効率的です。VS Codeにはこれが組み込まれています:
Ctrl+Shift+P → Extensions: Start Extension Bisect
VS Codeが拡張機能の半分を無効にして「問題はまだ発生しますか?」と尋ねます。答え続けると、インストール数に関わらず4〜6ステップで1つの拡張機能に絞り込まれます。
手動で行いたい場合は、半分を無効にして再起動し確認します。無効にしたグループを再度有効にし、もう半分を無効にします。特定できるまで繰り返します。
ステップ3:問題の拡張機能を修正または置き換える
特定できました。次の順番で試してみましょう:
- 更新する — 拡張機能(
Ctrl+Shift+X)を開き、該当の拡張機能を見つけて「更新」をクリックします。驚くほど多くの拡張機能ホストのハングは、最新リリースですでに修正されています。 - 再インストールする — 通常の更新では残ってしまう破損した状態をクリアします:
# コマンドラインから実行
code --uninstall-extension publisher.extension-name
code --install-extension publisher.extension-name
- このワークスペースのみ無効にする — 右クリック → 「無効にする(ワークスペース)」。調査中も他のプロジェクトでは引き続き使用できます。
- バグを報告する — 拡張機能のGitHub Issuesを検索してみましょう。他の誰かがすでに同じ問題に遭遇していて、コメントに回避策が埋もれている可能性があります。
ステップ4:問題を引き起こしやすい拡張機能
以下のカテゴリが頻繁に問題を起こします:
- 言語サーバー(Pylance、ESLint、Java Language Support)——大規模プロジェクトでデッドロックを起こします。Pylanceは
excludeパスを設定していない2,000ファイル以上のPythonリポジトリでCPU使用率が100%に達することがあります。 - GitLens ——コミット数が10,000以上、または大きなバイナリ履歴を持つリポジトリで動作が重くなります。
- リモート開発拡張機能(SSH、WSL、Dev Containers)——接続が遅くなったり切れたりすると、拡張機能ホストが応答待ちでタイムアウトします。
- PrettierとESLintの併用 ——保存時にそれぞれがもう一方をトリガーし続けるフォーマットループが発生することがあります。
- GitHub Copilot / IntelliCode ——モデルの推論はCPU負荷が高く、RAMが8GB未満のマシンでは拡張機能ホスト全体が停止することがあります。
ステップ5:拡張機能ホストの設定を調整する
特定の拡張機能が原因でない断続的なフリーズは、設定変更で解消できることが多いです。settings.json(Ctrl+Shift+P → Open User Settings (JSON))を開いて以下を追加します:
// 特定の拡張機能を専用のホストプロセスに分離する
// — 1つの問題のある拡張機能が他の拡張機能を道連れにするのを防ぐ
"extensions.experimental.affinity": {
"publisher.extension-name": 1
},
// 補完のトリガーを減らして拡張機能ホストの負荷を下げる
"editor.quickSuggestions": {
"other": "off",
"comments": "off",
"strings": "off"
},
// MicrosoftのA/B実験とテレメトリを無効にする
"workbench.enableExperiments": false,
"telemetry.telemetryLevel": "off"
言語サーバー専用に、スキャン範囲を制限します:
// ESLint — 実際に使用するファイルタイプのみ対象にする
"eslint.probe": ["javascript", "javascriptreact", "typescript", "typescriptreact"],
// Pylance — ファイル数が多いフォルダを除外する
"python.analysis.exclude": ["**/node_modules", "**/.venv", "**/dist", "**/__pycache__"]
ステップ6:拡張機能キャッシュをクリアする
破損した拡張機能のストレージは、再インストールしても解消されないハングを引き起こします。キャッシュを完全に削除します:
# Linux / macOS
rm -rf ~/.vscode/extensions/.obsolete
rm -rf ~/.config/Code/Cache
rm -rf ~/.config/Code/CachedData
# Windows (PowerShell)
Remove-Item -Recurse -Force "$env:USERPROFILE\.vscode\extensions\.obsolete"
Remove-Item -Recurse -Force "$env:APPDATA\Code\Cache"
Remove-Item -Recurse -Force "$env:APPDATA\Code\CachedData"
その後VS Codeを再起動します。初回起動時にキャッシュが再構築されるため、拡張機能が完全に有効になるまで30〜60秒ほどかかります。
ステップ7:システムレベルの問題を確認する
拡張機能ホストはNode.jsプロセスです。システムの制約が直接影響します:
- RAMの不足:空きRAMが4GB未満になると、OSがディスクへのスワップを開始します。拡張機能ホストはメモリの解放を待つ間、フリーズしているように見えます。他のアプリを閉じなければ、この問題は繰り返し発生します。
- ウイルス対策ソフトのリアルタイムスキャン:ファイルへの書き込みのたびに
.vscodeやワークスペースをスキャンするAVツールは、拡張機能が依存するI/Oをブロックします。ワークスペースのパスをAVの除外リストに追加してください。 - ネットワークドライブ:SMBおよびNFSマウントはファイルウォッチャーを確実にサポートしていません。ファイルの変更を監視する拡張機能がタイムアウトします。プロジェクトファイルはローカルに置き、同期は別途行ってください。
- WindowsのWSL:クロスファイルシステムアクセス(Windows ↔ WSL)は低速です。ファイルが
/mnt/c/Users/...にある場合は、WSL内の~/projects/に移動してください——拡張機能ホストの応答時間が数秒からミリ秒単位に改善されることがよくあります。
修正の確認
フリーズが発生していたプロジェクトを開きます。次のチェックリストを確認します:
- ファイルを開いた状態で2〜3分待つ——通常はこのタイミングでハングが発生していました
Help → Open Process Explorerを確認——拡張機能ホストのCPUが10%以下でアイドル状態になっているはずです- IntelliSenseをトリガーする(
Ctrl+Space)——最初の応答が1〜2秒以内に返ってくるはずです - ファイルを保存する——スピナーなし、ステータスバーに「読み込み中...」が残らないこと
- Gitの装飾を確認——ファイルを変更してから3〜5秒以内に更新されるはずです
ダイアログは表示されず、IntelliSenseも応答しています。修正は成功です。
クイックリファレンス
- 拡張機能なしでテスト:
code --disable-extensions - 自動バイセクト:
Ctrl+Shift+P → Extensions: Start Extension Bisect - VS Codeを再起動せずに拡張機能ホストを再読み込み:
Ctrl+Shift+P → Developer: Restart Extension Host - 拡張機能ログを表示:
Ctrl+Shift+P → Developer: Show Logs → Extension Host - 遅い拡張機能をプロファイリング:
Ctrl+Shift+P → Developer: Show Running Extensions(拡張機能ごとの起動時間を表示)

