Extension Host
**Extension Host** は拡張機能の実行を担当します。
Extension Host の構成
VS Code の構成によっては、異なるランタイムと異なる場所で実行されている複数の Extension Host が存在します。
- local – ローカルで、ユーザーインターフェースと同じマシン上で実行されている Node.js Extension Host。
- web – ブラウザーまたはローカルで、ユーザーインターフェースと同じマシン上で実行されている Web Extension Host。
- remote – コンテナーまたはリモートロケーションでリモートで実行されている Node.js Extension Host。
次の表は、VS Code のさまざまな構成で使用可能な Extension Host を示しています。
構成 | ローカル Extension Host | Web Extension Host | リモート Extension Host |
---|---|---|---|
デスクトップ版 VS Code | ✔️ | ✔️ | |
リモート環境の VS Code (Container, SSH, WSL, GitHub Codespace, Tunnel) | ✔️ | ✔️ | ✔️ |
VS Code for the Web (vscode.dev, github.dev) | ✔️ | ||
Codespaces を使用した VS Code for the Web | ✔️ | ✔️ |
Extension Host のランタイム
- Node.js - 拡張機能は Node.js ランタイムで実行されています。ローカルおよびリモート Extension Host で使用されます。拡張機能を実行するには、
main
エントリーファイルが必要です。 - Browser - 拡張機能は Browser WebWorker ランタイムで実行されています。Web Extension Host で使用されます。拡張機能を実行するには、
browser
エントリーファイルが必要です。詳細については、Web 拡張機能ガイドを参照してください。
優先される拡張機能の場所
拡張機能がロードされる Extension Host は、以下に依存します。
- VS Code の構成によって提供される利用可能な Extension Host。
- 拡張機能の機能: Node.js や Web で実行できるか、または示されていない場合は、どのようなコントリビューションを提供するか。
- 拡張機能がインストールされている場所: ローカルマシン、リモートマシン、または両方。
- 拡張機能が優先する場所:
extensionKind
プロパティ。
extensionKind
は 拡張機能マニフェストのプロパティです。拡張機能は、優先される実行場所を指定できます。それは、ワークスペース (workspace
) またはユーザーインターフェース (ui
) を持つマシンである可能性があります。拡張機能が両方で実行できる場合、優先順位を指定できます。
"extensionKind": ["workspace"]
— 拡張機能がワークスペースの内容へのアクセスを必要とし、したがってワークスペースが配置されている場所で実行する必要があることを示します。それは、ローカルマシン上、リモートマシン上、または Codespace 上である可能性があります。ほとんどの拡張機能がこのカテゴリに分類されます。"extensionKind": ["ui", "workspace"]
— 拡張機能が UI 拡張機能として実行されることを優先しますが、ローカルアセット、デバイス、または機能にハードウェア要件がないことを示します。VS Code を使用する場合、拡張機能がローカルに存在する場合は VS Code のローカル Extension Host で実行され、ユーザーはリモートに拡張機能をインストールする必要はありません。それ以外の場合、拡張機能が存在する場合は VS Code のワークスペース Extension Host で実行されます。Codespaces を使用した VS Code for the Web を使用する場合、常にリモート Extension Host で実行されます (ローカル Extension Host は利用できないため)。"extensionKind": ["workspace", "ui"]
— 拡張機能がワークスペース拡張機能として実行されることを優先しますが、ワークスペースの内容へのアクセスにハードウェア要件がないことを示します。VS Code を使用する場合、拡張機能がリモートワークスペースに存在する場合は VS Code のワークスペース Extension Host で実行され、それ以外の場合はローカルに存在する場合は VS Code のローカル Extension Host で実行されます。Codespaces を使用した VS Code for the Web を使用する場合、常にリモート Extension Host で実行されます (ローカル Extension Host は利用できないため)。"extensionKind": ["ui"]
— 拡張機能がローカルアセット、デバイス、または機能へのアクセスが必要なため、または低レイテンシが要求されるため、UI の近くで実行する必要があることを示します。ローカル Extension Host が利用できない Codespaces を使用した VS Code for the Web の場合、そのような拡張機能は、Web 拡張機能でない限りロードできません。その後、Web Worker をインスタンス化できないという制限付きで Web Extension Host にロードされます。
**注:** 以前の VS Code リリース (<1.40) では、拡張機能は単一の場所を文字列として指定できましたが、これは非推奨となり、複数の場所を配列として指定することが推奨されています。
拡張機能が Node.js とブラウザーで実行できる場合、Node.js Extension Host が利用可能な場合は選択されます。ただし、例外が 1 つあります。構成が Codespaces を使用した VS Code for the Web であり、extensionKind
が ui
に設定されている場合、Web Extension Host がリモート Extension Host よりも優先されます。
拡張機能が Web 専用の場合、extensionKind
設定に関係なく、常に Web Extension Host で実行されます。その場合、extensionKind
を定義しないことをお勧めします。
安定性とパフォーマンス
VS Code は、安定した高性能なエディターをユーザーに提供することを目指しており、誤動作する拡張機能はユーザーエクスペリエンスに影響を与えるべきではありません。VS Code の Extension Host は、拡張機能が以下を行うのを防ぎます。
- 起動パフォーマンスへの影響
- UI 操作の遅延
- UI の変更
さらに、VS Code では、拡張機能は Activation Events を宣言し、遅延ロードできます。たとえば、Markdown 拡張機能は、ユーザーが Markdown ファイルを開いたときにのみロードされる必要があります。これにより、拡張機能が不要な CPU とメモリを消費しないようにします。