VSCode パフォーマンス最適化で快適な開発環境を実現する

Visual Studio Code(VSCode)は軽量で高機能なエディタですが、大規模プロジェクトや多数の拡張機能を導入すると動作が重くなることがあります。本記事では、VSCode パフォーマンス最適化の観点から、起動時間の短縮、メモリ使用量の削減、検索・インデックス処理の高速化など、重い動作を根本から解消するための設定とテクニックを解説します。

トラブルシューティングの手順から具体的な設定値まで、実践的な内容を網羅しています。

この記事で得られること

  • VSCodeの起動時間やパフォーマンスを計測・分析する方法
  • 拡張機能のパフォーマンス影響を特定し改善する手順
  • files.exclude・search.exclude・files.watcherExcludeによる最適化
  • 大規模リポジトリ向けの推奨設定
  • メモリ使用量を削減する具体的なテクニック

前提条件と実行環境

VSCode パフォーマンス最適化を実施するための前提条件を確認します。

項目 要件
VSCode バージョン1.85以上を推奨
OS Windows 10/11、macOS 11以上、Linux
権限 設定ファイルへの書き込み権限
コマンドライン ターミナルからのcodeコマンド実行が可能

パフォーマンス問題の主な原因

VSCodeが重くなる原因は大きく以下のカテゴリに分類されます。

flowchart TD
    A[VSCodeが重い] --> B[起動が遅い]
    A --> C[編集時にラグがある]
    A --> D[検索が遅い]
    A --> E[メモリ使用量が多い]
    
    B --> B1[拡張機能の読み込み]
    B --> B2[ワークスペースの初期化]
    
    C --> C1[重い拡張機能]
    C --> C2[大きなファイル]
    
    D --> D1[監視対象ファイルが多い]
    D --> D2[除外設定の不足]
    
    E --> E1[多数のタブ]
    E --> E2[拡張機能のリーク]
    
    style A fill:#ffcdd2
    style B1,C1,D1,E1 fill:#fff9c4

起動パフォーマンスの計測と分析

VSCode パフォーマンス最適化の第一歩は、現状を正確に把握することです。VSCodeには起動時間を詳細に計測するための機能が組み込まれています。

–statusオプションによる起動時間の計測

ターミナルから--statusオプションを使用すると、VSCodeの各種情報を確認できます。

1
2
# VSCodeのステータス情報を表示
code --status

出力には以下の情報が含まれます。

項目 説明
Version VSCodeのバージョン情報
OS Version 実行環境のOS情報
CPUs CPU情報
Memory (System) システム全体のメモリ使用状況
VM (Heap) VSCodeのヒープメモリ使用量
Process Argv 起動時の引数

Developer: Startup Performanceコマンド

より詳細な起動パフォーマンス情報を取得するには、コマンドパレットを使用します。

  1. Ctrl+Shift+P(Mac: Cmd+Shift+P)でコマンドパレットを開く
  2. 「Developer: Startup Performance」と入力して実行
  3. 起動時間の詳細レポートが新しいタブに表示される

レポートには以下の情報が含まれます。

計測項目 説明 目安
ellapsed 総起動時間 3秒以内が理想
code/timeOrigin → code/didStartMain メインプロセス起動 500ms以内
main → willLoadExtensions 拡張機能読み込み前 1秒以内
willLoadExtensions → didLoadExtensions 拡張機能読み込み 拡張機能数に依存

プロセスエクスプローラーの活用

リアルタイムでのリソース使用状況を監視するには、プロセスエクスプローラーが有効です。

  1. Ctrl+Shift+Pでコマンドパレットを開く
  2. 「Developer: Open Process Explorer」と入力して実行
  3. 各プロセスのCPU・メモリ使用率が表示される
┌──────────────────────────────────────────────────────┐
│ Process Explorer                                      │
├──────────────────────────────────────────────────────┤
│ Process          PID    CPU %   Memory (MB)          │
├──────────────────────────────────────────────────────┤
│ code main        1234   0.5     150                  │
│ extensionHost    1235   15.2    450                  │
│ ptyHost          1236   0.1     30                   │
│ window           1237   2.3     200                  │
└──────────────────────────────────────────────────────┘

extensionHostのCPU使用率が高い場合、特定の拡張機能がパフォーマンスに影響を与えている可能性があります。

拡張機能のパフォーマンス分析

拡張機能はVSCodeの機能を拡張する一方で、パフォーマンス低下の主要因となることがあります。定期的な分析と最適化が重要です。

拡張機能の起動時間を確認する

各拡張機能の起動にかかった時間を確認できます。

  1. Ctrl+Shift+Pでコマンドパレットを開く
  2. 「Developer: Show Running Extensions」と入力して実行
  3. アクティベーション時間順にソートして確認

表示される情報は以下の通りです。

列 説明
Name 拡張機能名
Activation Time 起動にかかった時間(ms)
Activation Event 起動トリガー

期待される結果: 各拡張機能の起動時間は500ms以内が理想です。1秒を超える拡張機能は見直しを検討してください。

パフォーマンスに影響する拡張機能の特定

以下の特徴を持つ拡張機能は、パフォーマンスに影響しやすい傾向があります。

特徴 影響 対策
起動時に有効化(*アクティベーション) 起動時間の増加 遅延読み込み対応の拡張機能を選ぶ
ファイル監視機能 CPU・メモリ消費 必要なワークスペースでのみ有効化
Language Server Protocol使用 メモリ消費増加 使用頻度の低い言語は無効化
リアルタイムリント CPU負荷 保存時のみ実行に変更

拡張機能の選択的有効化

ワークスペースごとに必要な拡張機能のみを有効化することで、パフォーマンスを改善できます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
// .vscode/extensions.json(プロジェクトごとの推奨拡張機能)
{
  "recommendations": [
    "esbenp.prettier-vscode",
    "dbaeumer.vscode-eslint"
  ],
  "unwantedRecommendations": [
    "ms-python.python"  // このプロジェクトでは不要
  ]
}

拡張機能プロファイルの活用

VSCodeのプロファイル機能を使用すると、用途別に拡張機能セットを切り替えられます。

  1. 左下のギアアイコン → 「Profiles」を選択
  2. 「Create Profile」で新しいプロファイルを作成
  3. 用途に応じた拡張機能のみをインストール
プロファイル例 用途 拡張機能数の目安
Minimal ドキュメント編集 5個以下
Frontend フロントエンド開発 15個程度
Backend バックエンド開発 15個程度
Full フルスタック開発 25個以下

ファイル除外設定による最適化

VSCode パフォーマンス最適化において、ファイル除外設定は最も効果的な施策の一つです。不要なファイルを監視・検索対象から除外することで、大幅なパフォーマンス改善が期待できます。

files.excludeの設定

files.excludeはエクスプローラーパネルからファイルを非表示にします。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
{
  "files.exclude": {
    // バージョン管理システム
    "**/.git": true,
    "**/.svn": true,
    "**/.hg": true,
    "**/CVS": true,

    // OS生成ファイル
    "**/.DS_Store": true,
    "**/Thumbs.db": true,
    "**/desktop.ini": true,

    // 依存関係(表示不要な場合)
    "**/node_modules": true,
    "**/vendor": true,
    "**/.venv": true,
    "**/venv": true,

    // ビルド成果物
    "**/dist": true,
    "**/build": true,
    "**/out": true,
    "**/.next": true,
    "**/.nuxt": true,

    // キャッシュ
    "**/.cache": true,
    "**/__pycache__": true,
    "**/.pytest_cache": true,
    "**/.mypy_cache": true,
    "**/.tox": true
  }
}

search.excludeの設定

search.excludeは検索機能の対象からファイルを除外します。files.excludeに加えて追加の除外を設定できます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
{
  "search.exclude": {
    // files.excludeに加えて検索から除外
    "**/node_modules": true,
    "**/bower_components": true,

    // ロックファイル(内容検索は不要)
    "**/package-lock.json": true,
    "**/yarn.lock": true,
    "**/pnpm-lock.yaml": true,
    "**/composer.lock": true,
    "**/Gemfile.lock": true,

    // 生成・コンパイル済みファイル
    "**/*.min.js": true,
    "**/*.min.css": true,
    "**/*.map": true,
    "**/coverage/**": true,
    "**/.nyc_output/**": true,

    // ログファイル
    "**/logs/**": true,
    "**/*.log": true,

    // 一時ファイル
    "**/tmp/**": true,
    "**/temp/**": true
  }
}

files.watcherExcludeの設定

files.watcherExcludeはファイル監視の対象からディレクトリを除外します。大規模プロジェクトでは特に重要な設定です。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
{
  "files.watcherExclude": {
    // Git内部ファイル
    "**/.git/objects/**": true,
    "**/.git/subtree-cache/**": true,

    // 依存関係(ファイル数が膨大)
    "**/node_modules/**": true,
    "**/vendor/**": true,
    "**/.venv/**": true,
    "**/venv/**": true,

    // ビルド成果物
    "**/dist/**": true,
    "**/build/**": true,
    "**/out/**": true,
    "**/.next/**": true,
    "**/.nuxt/**": true,

    // テスト関連
    "**/coverage/**": true,
    "**/.nyc_output/**": true,

    // その他キャッシュ
    "**/.cache/**": true,
    "**/tmp/**": true,
    "**/.hg/store/**": true
  }
}

期待される効果: node_modulesを監視対象から除外するだけで、監視対象ファイル数が数万〜数十万ファイル削減され、CPU使用率とメモリ使用量が大幅に改善します。

除外設定の効果測定

除外設定の効果を確認するには、以下の手順を実行します。

  1. 除外設定前にプロセスエクスプローラーでメモリ使用量を記録
  2. 除外設定を適用してVSCodeを再起動
  3. 同じプロジェクトを開いてメモリ使用量を比較
graph LR
    A[除外設定なし] -->|node_modules含む| B[監視ファイル: 50,000]
    C[除外設定あり] -->|node_modules除外| D[監視ファイル: 2,000]
    
    B --> E[メモリ: 800MB]
    D --> F[メモリ: 300MB]
    
    style A fill:#ffcdd2
    style C fill:#c8e6c9
    style E fill:#ffcdd2
    style F fill:#c8e6c9

大規模リポジトリ向けの設定

数万ファイル以上を含む大規模リポジトリでは、デフォルト設定のままだとパフォーマンスが著しく低下します。専用の最適化設定が必要です。

Git関連の設定

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
{
  // Gitの自動フェッチを無効化
  "git.autoFetch": false,

  // Gitリポジトリの自動検出を制限
  "git.autoRepositoryDetection": "openEditors",

  // サブモジュールの自動スキャンを無効化
  "git.detectSubmodules": false,

  // 大規模リポジトリの警告しきい値
  "git.repositoryScanMaxDepth": 1,

  // 装飾(変更マーカー)の更新を制限
  "git.decorations.enabled": true,

  // Gitステータスの取得を遅延
  "git.statusLimit": 5000
}

検索設定の最適化

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
{
  // 検索結果の最大数を制限
  "search.maxResults": 10000,

  // シンボル検索のデフォルトを除外に
  "search.searchOnType": false,

  // 検索時のファイルを開く動作
  "search.searchEditor.singleClickBehaviour": "peekDefinition",

  // 正規表現検索のデフォルト無効化
  "search.useReplacePreview": true,

  // 検索のフォローシンボリックリンク
  "search.followSymlinks": false,

  // 検索の並列処理数
  "search.ripgrep.maxThreads": 4
}

ファイル関連の設定

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
{
  // 大きなファイルの警告しきい値(MB)
  "workbench.largeFileWarning": 10,

  // 最大同時監視ファイル数
  "files.maxMemoryForLargeFilesMB": 4096,

  // ファイルエンコーディングの自動検出
  "files.autoGuessEncoding": false,

  // ホットエグジット(未保存ファイルの復元)
  "files.hotExit": "onExitAndWindowClose",

  // 参加者の制限(リアルタイムコラボ)
  "files.participants.timeout": 5000
}

ワークスペーストラストの設定

信頼できるリポジトリでは、トラスト確認をスキップしてパフォーマンスを改善できます。

1
2
3
4
5
6
7
{
  // 特定フォルダを信頼済みとして登録
  "security.workspace.trust.untrustedFiles": "prompt",

  // 信頼されたフォルダのリスト
  "security.workspace.trust.enabled": true
}

大規模リポジトリ向け推奨設定一式

以下は、大規模リポジトリ(10万ファイル以上)向けの推奨設定をまとめたものです。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
{
  // ファイル除外設定
  "files.exclude": {
    "**/.git": true,
    "**/node_modules": true,
    "**/dist": true,
    "**/build": true
  },

  "search.exclude": {
    "**/node_modules": true,
    "**/dist": true,
    "**/*.min.js": true,
    "**/package-lock.json": true
  },

  "files.watcherExclude": {
    "**/.git/objects/**": true,
    "**/node_modules/**": true,
    "**/dist/**": true,
    "**/build/**": true
  },

  // Git設定
  "git.autoFetch": false,
  "git.autoRepositoryDetection": "openEditors",
  "git.detectSubmodules": false,

  // 検索設定
  "search.maxResults": 5000,
  "search.followSymlinks": false,

  // エディタ設定
  "editor.minimap.enabled": false,
  "editor.renderWhitespace": "selection",
  "editor.occurrencesHighlight": "off",

  // その他
  "workbench.largeFileWarning": 5
}

メモリ使用量の削減テクニック

VSCodeのメモリ使用量を削減することで、システム全体のパフォーマンスが向上し、他のアプリケーションとの共存も容易になります。

エディタ機能の最適化

視覚的な機能の一部を無効化することでメモリを節約できます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
{
  // ミニマップの無効化(メモリ節約効果: 中)
  "editor.minimap.enabled": false,

  // コードレンズの無効化
  "editor.codeLens": false,

  // パンくずリストの無効化
  "breadcrumbs.enabled": false,

  // 空白文字のレンダリング制限
  "editor.renderWhitespace": "selection",

  // インデントガイドのシンプル化
  "editor.guides.indentation": false,

  // 折りたたみの制御
  "editor.folding": true,
  "editor.foldingStrategy": "indentation",

  // スムーズスクロールの無効化
  "editor.smoothScrolling": false,

  // カーソルアニメーションの無効化
  "editor.cursorBlinking": "solid",
  "editor.cursorSmoothCaretAnimation": "off"
}

タブとエディタグループの管理

開いているタブ数はメモリ使用量に直結します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
{
  // 開くエディタの最大数を制限
  "workbench.editor.limit.enabled": true,
  "workbench.editor.limit.value": 10,

  // 制限超過時の動作
  "workbench.editor.limit.perEditorGroup": true,

  // 使用していないエディタを閉じる
  "workbench.editor.closeOnFileDelete": true,

  // プレビューモードの活用
  "workbench.editor.enablePreview": true,
  "workbench.editor.enablePreviewFromQuickOpen": true,

  // ピン留めされていないタブの自動クローズ
  "workbench.editor.closeEmptyGroups": true
}

期待される効果: エディタ上限を10に設定することで、無制限時と比較してメモリ使用量を30〜50%削減できます。

拡張機能ホストの最適化

拡張機能ホストプロセスのメモリ使用量を制限します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
{
  // 拡張機能の遅延ロード
  "extensions.autoUpdate": false,

  // 拡張機能の自動チェック無効化
  "extensions.autoCheckUpdates": false,

  // 使用していない拡張機能の推奨を無効化
  "extensions.ignoreRecommendations": true
}

ターミナルの最適化

統合ターミナルもメモリを消費します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
{
  // ターミナルのスクロールバック制限
  "terminal.integrated.scrollback": 1000,

  // GPUアクセラレーションの設定
  "terminal.integrated.gpuAcceleration": "auto",

  // 非アクティブなターミナルの動作
  "terminal.integrated.enablePersistentSessions": false
}

メモリ使用量の確認方法

現在のメモリ使用量を確認する手順です。

  1. Ctrl+Shift+Pで「Developer: Open Process Explorer」を実行
  2. 各プロセスのメモリ使用量を確認
  3. 高メモリプロセスの原因を特定
プロセス 標準的な使用量 異常の目安
code main 100-200MB 500MB以上
extensionHost 200-400MB 1GB以上
window 150-300MB 800MB以上
ptyHost 20-50MB 200MB以上

トラブルシューティング

VSCode パフォーマンス最適化を行っても問題が解決しない場合のトラブルシューティング手順です。

セーフモードでの起動

拡張機能を無効にした状態でVSCodeを起動します。

1
2
3
4
5
# 拡張機能を無効化して起動
code --disable-extensions

# 完全なセーフモード
code --disable-extensions --disable-gpu

セーフモードで問題が解決する場合、原因は拡張機能にあります。

問題のある拡張機能の特定

二分探索法で問題の拡張機能を特定します。

  1. 拡張機能の半分を無効化
  2. 問題が解決するか確認
  3. 解決した場合は無効化したグループをさらに半分に
  4. 解決しない場合は有効なグループを半分に
  5. 問題の拡張機能が特定されるまで繰り返す
flowchart TD
    A[全拡張機能有効] --> B{問題発生?}
    B -->|Yes| C[半分を無効化]
    C --> D{問題発生?}
    D -->|Yes| E[有効な半分をさらに半分に]
    D -->|No| F[無効な半分を有効にして半分に]
    E --> G{特定完了?}
    F --> G
    G -->|No| D
    G -->|Yes| H[問題の拡張機能を特定]
    
    style H fill:#c8e6c9

設定のリセット

設定に問題がある場合は、デフォルトにリセットします。

1
2
3
4
5
6
7
8
9
# ユーザー設定のバックアップ
# Windows
copy %APPDATA%\Code\User\settings.json settings.backup.json

# macOS/Linux
cp ~/.config/Code/User/settings.json settings.backup.json

# 設定ファイルを空にしてリセット
echo {} > settings.json

キャッシュのクリア

VSCodeのキャッシュをクリアして再起動します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# Windows
rmdir /s /q "%APPDATA%\Code\Cache"
rmdir /s /q "%APPDATA%\Code\CachedData"
rmdir /s /q "%APPDATA%\Code\CachedExtensionVSIXs"

# macOS
rm -rf "$HOME/Library/Application Support/Code/Cache"
rm -rf "$HOME/Library/Application Support/Code/CachedData"
rm -rf "$HOME/Library/Application Support/Code/CachedExtensionVSIXs"

# Linux
rm -rf "$HOME/.config/Code/Cache"
rm -rf "$HOME/.config/Code/CachedData"
rm -rf "$HOME/.config/Code/CachedExtensionVSIXs"

ログの確認

VSCodeのログから詳細な情報を取得します。

  1. Ctrl+Shift+Pで「Developer: Open Logs Folder」を実行
  2. renderer*.logやexthost*.logを確認
  3. エラーメッセージや警告を特定

Issue Reporterの活用

解決できない問題は、診断情報を含むレポートを作成できます。

  1. Ctrl+Shift+Pで「Help: Report Issue」を実行
  2. 問題の種類を選択
  3. 自動収集された診断情報を確認
  4. 必要に応じてGitHub Issueとして報告

パフォーマンス最適化のチェックリスト

VSCode パフォーマンス最適化を実施する際のチェックリストです。

カテゴリ チェック項目 優先度
起動時間 Startup Performanceで3秒以内か 高
拡張機能 不要な拡張機能を無効化したか 高
拡張機能 起動時間1秒超の拡張機能を確認したか 中
ファイル除外 files.excludeを設定したか 高
ファイル除外 search.excludeを設定したか 高
ファイル除外 files.watcherExcludeを設定したか 高
Git autoFetchを無効化したか(大規模リポジトリ) 中
エディタ ミニマップの要否を検討したか 低
タブ エディタ数制限を設定したか 中
メモリ 定期的にProcess Explorerで確認しているか 低

推奨設定のまとめ

VSCode パフォーマンス最適化の推奨設定をまとめたsettings.jsonの例です。プロジェクトの規模に応じて調整してください。

軽量プロジェクト向け(1,000ファイル未満)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
{
  "files.exclude": {
    "**/.git": true,
    "**/node_modules": true,
    "**/.DS_Store": true
  },

  "search.exclude": {
    "**/node_modules": true,
    "**/package-lock.json": true
  },

  "files.watcherExclude": {
    "**/node_modules/**": true
  }
}

中規模プロジェクト向け(1,000〜10,000ファイル)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
{
  "files.exclude": {
    "**/.git": true,
    "**/node_modules": true,
    "**/dist": true,
    "**/build": true,
    "**/.DS_Store": true,
    "**/__pycache__": true
  },

  "search.exclude": {
    "**/node_modules": true,
    "**/dist": true,
    "**/package-lock.json": true,
    "**/yarn.lock": true,
    "**/*.min.js": true
  },

  "files.watcherExclude": {
    "**/.git/objects/**": true,
    "**/node_modules/**": true,
    "**/dist/**": true
  },

  "editor.minimap.enabled": true,
  "workbench.editor.limit.enabled": true,
  "workbench.editor.limit.value": 15
}

大規模プロジェクト向け(10,000ファイル以上)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
{
  "files.exclude": {
    "**/.git": true,
    "**/node_modules": true,
    "**/dist": true,
    "**/build": true,
    "**/out": true,
    "**/.next": true,
    "**/.nuxt": true,
    "**/.DS_Store": true,
    "**/__pycache__": true,
    "**/.cache": true
  },

  "search.exclude": {
    "**/node_modules": true,
    "**/dist": true,
    "**/build": true,
    "**/package-lock.json": true,
    "**/yarn.lock": true,
    "**/pnpm-lock.yaml": true,
    "**/*.min.js": true,
    "**/*.min.css": true,
    "**/coverage": true
  },

  "files.watcherExclude": {
    "**/.git/objects/**": true,
    "**/.git/subtree-cache/**": true,
    "**/node_modules/**": true,
    "**/dist/**": true,
    "**/build/**": true,
    "**/coverage/**": true,
    "**/.cache/**": true
  },

  "git.autoFetch": false,
  "git.autoRepositoryDetection": "openEditors",
  "git.detectSubmodules": false,

  "search.maxResults": 5000,
  "search.followSymlinks": false,

  "editor.minimap.enabled": false,
  "editor.codeLens": false,
  "editor.renderWhitespace": "selection",

  "workbench.editor.limit.enabled": true,
  "workbench.editor.limit.value": 10,

  "terminal.integrated.scrollback": 1000
}

参考リンク