🙄
Cursor の Shadow Workspace 機能を使ったらメモリが大変なことになった
あまり良く考えずにCursorのShadow Workspace機能を有効化したらメモリ消費がかなり大変なことになってしまったのでShadow Workspaceの機能メモをまとめました。現時点ではメモリをクリアにする方法はなさそうなので再起動しかなさそうです。
1. 概要
Cursor には、AI がコードを生成・改善する際に実際の開発環境を壊さないように「Shadow Workspace」という仕組みがあります。
この機能を有効にすると、AI がバックグラウンドでコードを編集し、リントエラーなどを確認できるようになります。
ユーザーが書いているコードやファイルには直接影響せず、別の"影"の環境(Shadow Workspace)で静かに動作するイメージです。
2. 目的とメリット
独立性 (Independence)
- ユーザーの作業スペースを汚染しない
- AI は Shadow Workspace 内で自由に実験できるため、ユーザーは普段どおりコーディングが可能
LSP の利用 (LSP-usability)
- AI が言語サーバープロトコル (LSP) を活用し、編集したコードに対してリントや定義へのジャンプなどを取得できる
非同期実行・並列性 (Concurrency)
- ひとつの Shadow Workspace に複数の AI が順番にリクエストを送り、交互にコードを編集・確認できる
- AI は待たされても問題がなく、ユーザーのように「待ち時間」に不満を感じない
プライバシー (Privacy)
- Shadow Workspace はローカル上で動作
- サーバーにコードベースが漏れる心配を減らせる(クラウド版での代替検討もあり)
メンテナビリティ (Maintainability)
- アーキテクチャが極力単純化されており、VS Code(Cursor)の拡張機構から大きく逸脱しない仕組み
3. 仕組み・動作イメージ
隠しウィンドウ (Hidden Electron Window)
- Shadow Workspace を有効にすると、Cursor はユーザーの操作ウィンドウとは別に「隠しウィンドウ」を起動
- AI がそこでコードを書き換えたり、リントの結果を取得したりする
メモリ使用量の増加
- ウィンドウをもうひとつ立ち上げる分、メモリ使用量は増える
- RAM に余裕があるときのみの利用を推奨
拡張機能を最小限に
- 隠しウィンドウでは一部の拡張のみを読み込み
- 15 分の非アクティブ時間が過ぎると自動で終了する仕組みなどでメモリ消費を抑えている
AI からのリクエスト → Shadow Workspace で実行
- たとえば AI が「lib.ts に関数を追加したい」とリクエストすると、Shadow Workspace 側で書き換え、リントをかけて結果を返す
- ユーザーの本来のファイルは書き換わらない
4. 今後の発展: "Runnability" (コードの実行)
コードの実行(Runnability)
- AI が単にリントを取るだけでなく、実際にコードをコンパイル・実行して結果を確認したり、テストを回したりできるようにする構想がある
- ファイルシステムへの書き込みやビルドキャッシュ、ログなどの副作用が生じるため、ユーザーの作業スペースと完全に分離できる仕組みが必要
理想はカーネルレベルのプロキシ (Kernel-level folder proxy)
- AI 用に「影のフォルダ」を OS レベルで用意し、そこへの読み書きをメモリ上だけで行わせることで、元のフォルダを完全に保護する方法を検討中
- macOS や Windows は FUSE のネイティブサポートが薄く、カーネル拡張のインストールにも制約があるため、実現には課題が多い
代替案
- cp -r(フォルダ丸ごとコピー)では大規模プロジェクトで時間がかかりすぎる
- ハードリンクやシンボリックリンクは、元フォルダが書き換わるリスクや設定の煩雑さがある
- Docker やリモート環境を自動生成してしまう方法もあるが、ユーザーのプライバシーやセットアップの容易さなどのトレードオフがある
5. 注意点
- Rust など一部言語サーバー(rust-analyzer)は VS Code の仮想ファイルシステムを認識しないため、Shadow Workspace でのリントが正しく動作しない場合がある
- Shadow Workspace 機能を有効化すると、常に隠しウィンドウを起動してリントを取得するため、軽量マシンだとリソース不足になる可能性がある
6. まとめ
Shadow Workspace は「AI のための裏作業場」
- ユーザーの通常作業を邪魔せず、AI がコーディング・リントを繰り返せるスペースを提供
リソースに余裕があるユーザーに推奨
- メモリなどのリソースが潤沢なら、生成されるコード品質向上に役立つ
今後の展望
- コードの実行(Runnability)を視野に入れ、より高度なバックグラウンド動作を実現するため、OS レベルでフォルダをプロキシする仕組みやクラウド環境への自動展開などを検討中
Discussion