VSCodeの起動が遅いと感じたとき、原因を特定するための2つのコマンドがある。

Developer: Startup Performance

Developer: Startup Performance はVSCodeの起動にかかった時間を詳細に表示するコマンド。

コマンドパレット(Ctrl + Shift + P / Cmd + Shift + P)で Startup Performance と入力して実行する。

実行するとシステム情報と各処理フェーズの所要時間が表示される。

System Info

VSCodeのバージョンやOS、CPU、メモリなどの環境情報が確認できる。

## System Info

* Code: 1.124.2
* OS: darwin(25.2.0)
* CPUs: Apple M1 Max(10 x 2400)
* Memory(System): 32.00 GB(0.62GB free)
* VM(likelihood): 0%
* Initial Startup: false

Initial Startupfalse の場合は再起動、true の場合は初回起動を示す。初回起動はキャッシュが存在しないため、再起動より多くの時間を要する傾向がある。

Performance Marks

各処理フェーズの所要時間(ms)の一覧。

WhatDurationProcess
window.loadUrl() => begin to import(workbench.desktop.main.js)113[main->renderer]
import(workbench.desktop.main.js)178[renderer]
init storage (global & workspace)23[renderer]
init workspace service43[renderer]
register extensions & spawn extension host316[renderer]
restore & resolve visible editors166[renderer]
overall workbench load310[renderer]
workbench ready647[main->renderer]
extensions registered882[renderer]

注目すべき項目は以下のとおり。

  • register extensions & spawn extension host: 拡張機能の登録とExtension Hostの起動にかかった時間。この値が大きい場合、拡張機能が起動の遅延原因である可能性が高い
  • workbench ready: 起動開始からUIが操作可能になるまでの経過時間。ユーザーが体感するロード時間に最も近い指標
  • extensions registered: すべての拡張機能の登録が完了するまでの時間。workbench ready より大きい値になることが多く、バックグラウンドで拡張機能の読み込みが続いていることを示す

上記の例では register extensions & spawn extension host が316ms、extensions registered が882msとなっており、拡張機能の読み込みが起動時間の大半を占めていることがわかる。

Extension Activation Stats

拡張機能ごとの起動時間の一覧。

ExtensionEagerLoad CodeCall ActivateFinish ActivateEvent
vscode.gittrue303130*
vscode.npmtrue12118workspaceContains:package.json
GitHub.copilot-chatfalse531171681onStartupFinished
vscode.json-language-featuresfalse330509onLanguage:jsonc
vscode.markdown-language-featuresfalse496186onLanguage:markdown
vscodevim.vimfalse521147onStartupFinished
dbaeumer.vscode-eslintfalse1940onStartupFinished

各列の意味は以下のとおり。

  • Eager: true の場合は起動シーケンス中にアクティベーションされた拡張機能。false の場合は起動完了後に特定のイベントで遅延アクティベーションされた拡張機能。たとえば workspaceContains:package.json を持つ拡張機能も、起動時点でワークスペース内に package.json が存在すれば true になる
  • Load Code: 拡張機能のコードを読み込むのにかかった時間(ms)
  • Call Activate: activate 関数を呼び出すのにかかった時間(ms)
  • Finish Activate: activate 関数が完了するまでの時間(ms)
  • Event: アクティベーションのトリガーとなったイベント。* は常に読み込まれる、onStartupFinished は起動完了後に読み込まれる、onLanguage:xxx は対象言語のファイルを開いたときに読み込まれる

上記の例では GitHub.copilot-chatFinish Activate は1681msと突出して大きく、起動時間への影響が特に大きい。Finish Activate の値が大きい拡張機能は、activate() 関数内でネットワーク通信やインデックス構築などの非同期処理を行っているケースが多い。

Developer: Show Running Extensions

Developer: Show Running Extensions は現在アクティブな拡張機能とその起動時間を一覧表示するコマンド。

コマンドパレットで Show Running Extensions と入力して実行する。

起動時間でソートして表示されるため、どの拡張機能がボトルネックになっているかを視覚的に特定できる。Developer: Startup Performance のExtension Activation Statsと組み合わせると、より詳細な分析が可能である。

遅い拡張機能への対処

起動時間が長い拡張機能を特定したら、以下の方法で対処できる。

拡張機能を無効化する

使用頻度が低い拡張機能は無効化する。拡張機能の詳細画面から 無効にする を選択する。

ワークスペース単位での無効化も可能なため、不要なプロジェクトでは無効化しておくとよい。

拡張機能をアンインストールする

不要な拡張機能はアンインストールする。インストールしたまま放置した拡張機能が起動を遅くしているケースは多い。