Skip to content

docs: PLAN36 VS Code Server の永続化プランを追加する - #114

Open
takemi-ohama wants to merge 2 commits into
mainfrom
docs/plan36-vscode-server
Open

docs: PLAN36 VS Code Server の永続化プランを追加する#114
takemi-ohama wants to merge 2 commits into
mainfrom
docs/plan36-vscode-server

Conversation

@takemi-ohama

Copy link
Copy Markdown
Contributor

Summary

issues/PLAN36_vscode-server-persistence.md を追加します。実装はまだ行いません(プランのみ)。

解決したい問題

コンテナを作り直すたびに VS Code Server が再ダウンロードされています。

[21828 ms] Installing VS Code Server for commit 110a328...
[77165 ms] 214712320 bytes (215 MB) copied, 55.1196 s, 3.9 MB/s

~/.vscode-server はコンテナの書き込みレイヤ上にあり、永続化されているのは entrypoint の AI_SETTINGS.claude / .codex / .gemini / .serena / .ssh / .kiro)と share だけです。

実測(carmo-ai-dev-1 / VS Code 1.134.0 / arm64)

内訳サイズ
bin/<commit>644MB(再ダウンロードの本体)
data/agent-host303MB
extensions338MB
extensionsCache205MB
合計約 1.6GB

コストを払っているのは実際に attach したコンテナだけで、現在 14 コンテナ中 3 つです。

採用した設計

コンテナごとの named volumedevbase_vscode_<project>_<index>)を ~/.vscode-server へマウントします。

共有ボリューム案(devbase_home_ubuntu と同じ扱い)は不採用にしました。VS Code Server は data/Machine/.connection-token-<commit> や各種 marker、ログを「1 マシン 1 セット」の前提で書くため、複数コンテナが同時に書くと競合します。ベースイメージへ焼き込む案も、commit ハッシュがクライアント更新で変わるため不採用です。

プランには受け入れ条件(scale > 1 の独立性、プロジェクト間の独立性、空ボリュームの権限、既存プロジェクトの非破壊)、タスク分解、ディスク使用量と孤児ボリュームの扱い、切り戻し手順を含めています。

Test plan

  • 記載した実測値が実際のコンテナと一致すること(du -sh ~/.vscode-server/*
  • 現在の永続化対象(AI_SETTINGSshare)の記述が containers/base/entrypoint.sh と一致すること
  • 既存ボリューム構成(devbase_work_<index> の共有、devbase_home_ubuntu)の記述が lib/devbase/volume/manager.py と一致すること

takemi-ohamaand others added 2 commits August 23, 2026 13:10
コンテナを作り直すたびに VS Code Server (215MB / 約 55 秒) が再ダウンロード
される。~/.vscode-server はコンテナの書き込みレイヤ上にあり、永続化されて
いるのは AI 設定と share だけであるため。
コンテナごとの named volume をマウントする案を採用し、共有ボリューム案は
不採用とした (接続トークンや marker を複数コンテナが同時に書くため)。
実測サイズの内訳と、ディスク使用量・孤児ボリュームの扱いも記載している。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
devbase の up は docker compose down でコンテナを削除してから作り直すため、
Compose の匿名ボリューム引き継ぎ (再作成時のみ有効) が働かない。一時
プロジェクトで実測し、up の前後でボリューム ID が変わり旧ボリュームが
孤児として残ることを確認した。
あわせて、空ボリュームのマウント先が root 所有になる点も実測として前提に
加えた (Task 3 の chown が必須である裏付け)。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@takemi-ohama