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