Impact-Site-Verification: 578d421e-1081-463d-918b-ec5e29c5b9db
<戻る

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のビルド失敗を予防した.

  1. AI CLI: Claude Code(公式インストーラ)/ Google Gemini CLI(`@google/gemini-cli`)
  2. シェル: Zsh + Oh My Zsh + `zsh-syntax-highlighting` + fzf + git-delta
  3. 言語・ツール: Node.js 24.13.0 / uv 0.9.28 / GitHub CLI / tmux / jq / tree / emacs-nox
  4. VS Code拡張を13種自動インストール(Claude Code,Gemini Companion,Cursor Pyright,Prettier / ESLint / Black,GitLens,Markdown All in One,Mermaid Chart 等)
  5. 履歴の永続化: `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時間と保管容量を抑えている.

使用技術

DockerDev ContainersUbuntu 24.04Claude CodeGoogle Gemini CLIuvPython 3.12Node.js 24ZshOh My Zshfzfgit-deltaGitHub CLIrsyncVS Code Remote-SSHOSS