🚀 VS Code で で入手しましょう!

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 であり、extensionKindui に設定されている場合、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 とメモリを消費しないようにします。