Cursorが重い・落ちる真犯人は「拡張機能」だ:AIとLSPが裏で殺し合わない極限の環境構築論
VS CodeからCursorへの移行は、単なるエディタの乗り換えではありません。それは「従来の静的コード解析(LSP)環境」から「常時コードベース全体をベクトライズし、AIエージェントがマルチスレッドで介入する動的環境」へのアーキテクチャのパラダイムシフトです。
多くのエンジニアが「VS Codeの設定や拡張機能をそのまま引き継ぐ」という罠に陥り、以下のような深刻な症状に悩まされています。
- タイピング中にカーソルがカクつく、インラインAI補完のディレイが1秒以上生じる
- Composer(Ctrl/Cmd + I)で複数ファイルを編集させると、Electronプロセスがメモリを数GB食いつぶしてクラッシュする
- CPUファンが爆音で回り続け、`Code Helper (Plugin)` プロセスがCPU使用率300%超で貼り付く
これらの原因は、CursorのAIインデックスエンジン・内蔵AIスレッドと、VS Code由来のレガシーな拡張機能(特に重複するLSPやコード整形ツール、リアルタイムリンター)がファイル変更イベント(`onDidChangeTextDocument`)やAST(抽象構文木)の解析権限を巡って内部で物理的に衝突(競合状態)を起こしているからです。
本稿では、最高峰の開発環境アーキテクチャの視点から、Cursor内部で何が起きているのかを解剖し、開発環境を1ミリも遅延させない「AI共存型・完全最適化設定」を伝授します。
—
1. 内部アーキテクチャ解剖:なぜAIと拡張機能は競合するのか?
Cursorの裏側では、従来のVS Codeプロセスモデルの上に、独自の「C++ベースの高速インデックスエンジン」と「AIエージェントスレッド」がハイブリッドで動作しています。
[Cursor Process Architecture]
├── Electron Main Process
│ ├── Renderer Process (UI / Editor View)
│ ├── Extension Host (Node.js Process)
│ │ ├── Language Servers (TypeScript, Python LSP, etc.)
│ │ └── VS Code Extensions (GitLens, Prettier, etc.) <-- ★ここが衝突の戦場
│ └── Cursor Native AI Engine (C++ / Rust)
│ ├── Local Vector Indexer (Codebase Indexing) <-- ★ファイル変更を常時監視
│ └── Shadow Workspace (Composer Background Edits) <-- ★バックグラウンドでコード書き換え
衝突のハザードマップ(3大クラッシュ因子)
1. `onDidChangeTextDocument` イベントの過剰発火と無限フィードバックループ
CursorのComposerやAI補完がコードを自動生成した瞬間、PrettierやESLint等の自動フォーマッタが反応してコードを書き換えます。するとCursorのインデックスエンジンが「変更された」と検知して再ベクトライズを開始し、それに伴いLSPが再スキャンを実行……というリソース食いつぶしの無限ループが発生します。
2. 重複するAI補完プロセスの存在
GitHub Copilot, Tabnine, Codeiumなどの拡張機能が有効化されていると、Cursor独自のTab補完エンジンとソケット通信・AST解析のレベルでバッティングし、入力遅延(Input Latency)が最悪レベルまで跳ね上がります。
3. ファイルウォッチャー(`Chokidar` / `fs.watch`)の競合
`node_modules` や `.next` などの巨大ディレクトリスキャンが、LSP、GitLens、Cursorベクトライザーの3者で同時に走り、ディスクI/OとCPUスレッドを枯渇させます。
—
2. 拡張機能の「断捨離」と判定基準
チーム全体の生産性を守るため、テックリードとして以下の判定基準(Tier区分)で拡張機能を即座に整理してください。
【即刻アンインストール・無効化(Tier 0)】
AIエンジンと直接衝突、または機能が100%重複するもの。
- GitHub Copilot / Copilot Chat / Tabnine / Codeium
理由: Cursorの内部AI補完とモデル競合・キーバインド重複を起こし、パフォーマンスを破綻させます。
- Auto Rename Tag / Auto Close Tag
理由: CursorのAI補完がHTML/JSX構造を理解して補完するため、これらの拡張機能がDOM変更イベントをインターセプトすると二重挿入バグを引き起こします。
- Minify / Beautify 系のレガシーコード整形ツール
理由: AIの推論結果に対して予期せぬ不可視文字や改行コードの改変を行い、AIの文脈理解を狂わせます。
【AI最適化設定が必要(Tier 1)】
開発に必須だが、デフォルトのまま使うと危険なもの。
- ESLint / Biome / Stylelint
対策: 保存時の自動実行(`editor.codeActionsOnSave`)の適用範囲を限定し、AIの生成中(Composer実行中)の割り込みを抑制する。
- GitLens
対策: インラインのBlame表示(`gitlens.currentLine.enabled`)を無効化。AI補完のホバー表示と重なり、レンダリングスレッドを圧迫します。
—
3. 開発環境をクラッシュさせない「完全共存版 `settings.json`」
以下は、CursorのAIパフォーマンスを極限まで引き出しつつ、エディタのクラッシュを防ぐために吟味された `.vscode/settings.json`(またはグローバルの `settings.json`)の全構成例です。プロジェクト直下に配備することでチーム全体に強制適用できます。
{
// =========================================================================
// 1. Cursor AI機能の最適化とファイルインデックス排他設定
// =========================================================================
// AIインデックス作成から除外するディレクトリ(CPU/メモリ爆破の防止)
“cursor.cpp.disabledLanguages”: [
“plaintext”,
“markdown”,
“scminput”
],
// 大規模プロジェクトでのファイル監視(Watcher)の軽量化設定
“files.watcherExclude”: {
“/.git/objects/“: true,
“/.git/subtree-cache/“: true,
“/node_modules//“: true,
“/.next/“: true,
“/dist/“: true,
“/build/“: true,
“/coverage/“: true,
“/.cache/“: true
},
// 検索インデックス作成からの除外(AIのコンテキスト精度の向上にも寄与)
“search.exclude”: {
“/node_modules”: true,
“/bower_components”: true,
“/.code-search”: true,
“/dist”: true,
“/.next”: true
},
// =========================================================================
// 2. エディタレスポンス・レンダリングの超高速化
// =========================================================================
// スムーススクロールなどの視覚効果を切り、V8/Electronの描画負荷を最小化
“editor.smoothScrolling”: false,
“workbench.list.smoothScrolling”: false,
“editor.cursorBlinking”: “solid”,
“editor.cursorSmoothCaretAnimation”: “off”,
// レンダリングアクセラレーションの強化
“editor.hardwareAcceleration”: “on”,
// ミニマップの描画によるメモリ消費をカット
“editor.minimap.enabled”: false,
// =========================================================================
// 3. AI補完(Cursor Tab)とLSP・フォーマッタの競合防止策
// =========================================================================
// タイピング中の不要な自動補完ポップアップを抑制(Cursor Tabと重ならないようにする)
“editor.quickSuggestions”: {
“other”: “on”,
“comments”: “off”,
“strings”: “off”
},
// 保存時のフォーマット動作の安全化(Composerの複数ファイル同時書き換え時のクラッシュ防止)
“editor.formatOnSave”: true,
“editor.formatOnSaveMode”: “modificationsIfAvailable”, // 変更箇所のみフォーマット(全体再構築を防止)
“editor.codeActionsOnSave”: {
“source.organizeImports”: “never”, // 保存時の自動インポート整理はAIの意図を破壊するため無効化
“source.fixAll.eslint”: “explicit” // 明示的な修正のみ許可
},
// =========================================================================
// 4. GitLensおよび重厚なLSP拡張のデチューン設定
// =========================================================================
// GitLensのインラインホバー表示をOFF(CursorのAIプロンプト表示とのバッティング回避)
“gitlens.currentLine.enabled”: false,
“gitlens.hovers.enabled”: false,
“gitlens.statusBar.enabled”: true, // ステータスバーのみに縮小
// TypeScript Serverのメモリ上限を増強(大規模プロジェクト向け:デフォルト2048MB -> 4096MB)
“typescript.tsserver.maxTsServerMemory”: 4096,
“typescript.tsserver.experimental.enableProjectDiagnostics”: false
}
—
4. チーム共有化の決定版:`.cursorrules` と設定の強制自動化
チーム開発において「Aさんの環境では快適だが、Bさんの環境ではCursorが落ちる」という事態を防ぐため、プロジェクトルートでルールと推奨拡張機能を厳格にコード化(Infrastructure as Code)します。
`.vscode/extensions.json` (不要・衝突拡張の無効化推奨)
プロジェクトを開いた際、不要な拡張機能がインストールされている場合に警告を出し、必須のプラグインのみを導入させます。
{
// チーム全員が導入すべき神拡張機能
“recommendations”: [
“biomejs.biome”, // Rust製の超高速フォーマッタ(ESLint+Prettierの代替でCPU激減)
“eamodio.gitlens”, // 設定チューニング前提で導入
“eamodio.gitlens”
],
// Cursor環境下で【絶対に入れてはいけない】拡張機能リスト
“unwantedRecommendations”: [
“github.copilot”,
“github.copilot-chat”,
“tabnine.tabnine-vscode”,
“codeium.codeium”,
“esbenp.prettier-vscode”, // Biomeに移行を推奨(LSP競合回避のため)
“formulahendry.auto-rename-tag”
]
}
`.cursorrules` (AIのコンテキスト制御と無駄な推論ループの遮断)
Cursor専用のメタ指示ファイル `.cursorrules` をルートに設置し、AIがコードを書き換える際の「制約事項」を明記します。これにより、AIがフォーマット違反のコードを生成し、LSPが怒り、AIが再修正する無限ループを根絶できます。
Project Architectural Rules & AI Behaviors
Code Generation Principles
- Formatting: Always follow Biome/Prettier configuration. Do not generate trailing semicolons if not required.
- Imports: Use TypeScript path aliases (`@/components/…`). Do not use relative path traversal (`../../`).
- No Heavy Scans: Do not modify files inside `vendor/`, `dist/`, or generated GraphQL/Prisma client folders.
Performance Constraints for AI
- When answering or generating code via Composer, only modify the target functions instead of rewriting the entire file.
- Keep comments concise and in Japanese.
—
5. 爆速化を実現する隠れたショートカット & 神プラグイン
環境調整が完了した Cursor の真価を発揮させるための、実務直撃テクニックです。
思考を中断させない「隠れたキーボードショートカット」
| ショートカット (Mac / Win) | 機能 | 現場での活用ユースケース |
| :— | :— | :— |
| `Cmd + K` / `Ctrl + K` | In-line Edit | 選択範囲のコードだけをAIにピンポイント修正・リファクタリングさせる(全ファイル操作より遥かに高速) |
| `Cmd + Shift + L` / `Ctrl + Shift + L` | Add Selection to AI Context | 選択したシンボルやエラー文を即座にChatコンテキストに追加し、プロンプト入力の手間をゼロにする |
| `Cmd + I` / `Ctrl + I` | Composer (Multi-file) | プロジェクト横断の機能実装。※前述の`settings.json`で最適化していないと重くなる |
| `Cmd + .` / `Ctrl + .` | Quick Fix (AI Assist) | LSPのエラー赤線上で叩くことで、AIが即座にエラーを修正する差分を提示 |
開発環境アーキテクトが厳選する「AI共存型」神プラグイン3選
1. Biome (`biomejs.biome`)
- 理由: ESLint + Prettier の組み合わせは Node.js プロセスを著しく消費し、Cursor のインデックス作成と衝突します。Rust 製の Biome にリプレイスすることで、フォーマット速度が10〜100倍になり、CPUのスパイクをゼロに抑えられます。
2. Error Lens (`usernamehw.errorlens`)
- 理由: インラインで型エラーや構文エラーを表示するツール。Cursor の AI (`Cmd + K`) との相性が非常に良く、エラー文をコピーすることなく即座に視認して AI に修正指示を出せます。
3. Todo Tree (`Gruntfugutt.todo-tree`)
- 理由: コード内の `TODO:`, `FIXME:` を可視化。Cursor の Composer に対し、「`TODO:` を検索してすべて実装して」という超強力なプロンプト駆動開発が可能になります。
—
まとめ:プロフェッショナルが構築すべき「静と動」の調和
Cursorは従来の「エディタ」ではなく、「開発者+AIマルチエージェント」が稼働するコンテナ環境に近い存在です。
1. レガシーな重複AI拡張機能および不要な自動化ツールを排除する
2. `files.watcherExclude` や `search.exclude` でAIとLSPの視界から不要な巨大ファイルを排除する
3. `.cursorrules` と `.vscode/settings.json` をコード化してチーム全体へ波及させる
この3点が揃ったとき、Cursorは一度もカクつくことなく、あなたの思考スピードをそのままコードへと変換する最強の相棒へと進化します。チームのテックリードとして、今すぐリポジトリの設定ファイルを見直し、極限のパフォーマンスを手に入れてください。