拡張機能ホスト
拡張機能ホストは、拡張機能の実行を担当します。
拡張機能ホストの構成
VS Code の構成に応じて、異なるランタイムで、異なる場所に複数の拡張機能ホストが実行されます。
- ローカル – ユーザーインターフェースと同じマシンでローカルに実行される Node.js 拡張機能ホスト。
- ウェブ – ブラウザ内またはユーザーインターフェースと同じマシンでローカルに実行されるウェブ拡張機能ホスト。
- リモート – コンテナまたはリモートの場所でリモートに実行される Node.js 拡張機能ホスト。
次の表は、VS Code のさまざまな構成で利用可能な拡張機能ホストを示しています。
設定 | ローカル拡張機能ホスト | ウェブ拡張機能ホスト | リモート拡張機能ホスト |
---|---|---|---|
デスクトップ上の 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 とメモリを消費しないことが保証されます。