CTS-KB

DevContainer

でぶこんてな

Dev Container Development Container .devcontainer
#Docker #VS Code #開発環境 #コンテナ #DevOps

VS Code(および互換ツール)が定義する Development Container 仕様。リポジトリ内に .devcontainer/devcontainer.json を置くと、言語ランタイム・VS Code 拡張・ホスト OS の認証情報マウントまでを宣言的にコンテナで再現できる。

概要

開発者ごとにバラつく「ローカル環境」をコンテナに閉じ込め、**「リポジトリを clone して Reopen in Container するだけで、誰のマシンでも同じ開発環境が立ち上がる」**状態を実現する。Microsoft 公式仕様で、VS Code / GitHub Codespaces / JetBrains Gateway 等が対応する。

標準構成

.devcontainer/
├── devcontainer.json        # Features・mounts・customizations
├── docker-compose.yml       # サービス定義(DB やキャッシュも一緒に立てる)
└── post-create.sh           # コンテナ生成後に走る初期化スクリプト

主要な設定項目

キー役割
dockerComposeFile / servicedocker-compose ベースの起動
featuresdotnet / node / python / docker-outside-of-docker などを宣言的に追加
mountsホスト OS から認証情報を bind mount(~/.aws ~/.ssh ~/.gitconfig 等)
containerEnvコンテナ環境変数(CLI 起動経路で効く)
customizations.vscodeVS Code 拡張・settings(VS Code 経由で効く)
postCreateCommandコンテナ生成直後に走るコマンド(post-create.sh 呼び出し等)

認証情報の標準的な持ち込み方

ホスト側に実体を置いたまま、bind mount で readonly 共有するのが標準パターン。

ホスト側mode用途
~/.awsbind, readonlyAWS CLI
~/.config/gcloudbind, readonlygcloud CLI
~/.config/glab-clibind, readonlyGitLab CLI
~/.gitconfigbind, readonlyGit
~/.sshbind, readonlySSH
~/.microsoft/usersecretsbind, readonly.NET User Secrets
~/.claudebind(書き込み可)Claude Code 設定・OAuth

bypassPermissions の安全装置として

Claude Code の bypassPermissions(破壊的操作の無確認実行)は、ホスト OS で動かすと事故時の被害が制御不能になる。DevContainer に閉じ込めると、docker compose down -v でコンテナ破棄するだけで復旧でき、安全装置として桁違いに効く。詳細は Ubuntu 開発環境構築 を参照。

ホスト OS との関係

ホスト OSDevContainer の Docker性能
Linux(Ubuntu 等)ネイティブ Docker Engineカーネル直結。最速
macOSDocker Desktop(VM 経由)中速
WindowsWSL2 + Docker Desktop二重仮想化で遅め

Linux ホストでは network_mode: host でホスト側 localhost のサービスにそのままアクセスできる利点もある。

関連記事

関連用語

  • Docker — DevContainer のランタイム
  • Claude Code — bypassPermissions の安全装置として DevContainer を必要とする
  • Agent Teams — DevContainer 内で動かす実験的機能