Vibe Coding DevContainer
個人プロジェクト | OSS
概要
Python / Node.jsを横断する多言語開発環境をVS Code Dev Containersとして定義し,ローカルMacでもリモートSSHサーバでも同一構成を即座に再現.Claude CodeとGoogle Gemini CLIを標準同梱し,コンテナを開いた瞬間からターミナル上でAI支援開発(Vibe Coding)が始められる状態とした.OSSとしてGitHubに公開.
アーキテクチャ
ベースイメージは Ubuntu 24.04(Noble).uv公式のマルチステージビルドから uvバイナリのみを抽出し,Pythonランタイム管理をuvに完全委譲することでシステムPythonを汚さない構成とした.Node.jsは公式バイナリtarballを`dpkg --print-architecture`で`aarch64 / x86_64`に分岐ダウンロードし,Apple Silicon/Intel/ARMサーバの3者でそのまま動く.
非rootユーザー`devcontainer`で起動し,`/usr/local/share/npm-global`を事前作成・所有させ`NPM_CONFIG_PREFIX`を設定することで,sudoなしでグローバルnpmインストールができる状態を実現.非rootの安全性とnpmの利便性を両立させるための典型的な落とし穴を回避している.
`workspaceMount`は`delegated` consistencyで bind mountし,macOSでの大量ファイルI/O(`node_modules`,Git操作,ビルド生成物)を高速化.`NODE_OPTIONS=--max-old-space-size=4096`でNode側のヒープ上限もコンテナ環境変数として明示し,Next.jsや大規模TypeScriptのビルド失敗を予防した.
- AI CLI: Claude Code(公式インストーラ)/ Google Gemini CLI(`@google/gemini-cli`)
- シェル: Zsh + Oh My Zsh + `zsh-syntax-highlighting` + fzf + git-delta
- 言語・ツール: Node.js 24.13.0 / uv 0.9.28 / GitHub CLI / tmux / jq / tree / emacs-nox
- VS Code拡張を13種自動インストール(Claude Code,Gemini Companion,Cursor Pyright,Prettier / ESLint / Black,GitLens,Markdown All in One,Mermaid Chart 等)
- 履歴の永続化: `zsh_history`をnamed volume(`devcontainer-zsh-history-<id>`)へマウントしコンテナ再ビルドでも保全
ホスト連携とリモート展開
ホストの`~/.claude` / `~/.claude.json` / `~/.gemini`をbind mountすることで,AIツールの認証をコンテナ再ビルド後も維持.手動の再ログインが発生しない点がデイリーユースで効く.`.zshrc`はGit管理(共通設定),`.gitconfig`は`.gitignore`対象とし,付属の`sync-devcontainer.sh`がローカルの`~/.gitconfig`から生成する設計.個人情報をリポジトリに混入させずにチーム共通化を両立した.
`scripts/sync-devcontainer.sh`でMacの認証ファイル群を任意のリモートSSHサーバへrsyncで同期.リモート側で`git clone`後にDev Containers:Reopen in Container するだけで同一環境を起動できるため,VS Code Remote-SSHと組み合わせて「ノートPCからGPUサーバのdevcontainerで作業する」ワークフローが成立する.
ビルド引数(`NODE_VERSION`,`UV_VERSION`,`GEMINI_CLI_VERSION`,`GIT_DELTA_VERSION`,`ZSH_IN_DOCKER_VERSION`)で主要ツールの版を外部化し,更新を`devcontainer.json`の1行差分で追従可能にした.イメージ自体は`apt-get clean && rm -rf /var/lib/apt/lists/*`でスリム化し,pull時間と保管容量を抑えている.