🔖 第4章:devcontainerを使った開発の流れ(after)
4.1 authのソースコードを直接マウントしながら編集
✅ 要点まとめ
- devcontainerを使うと、authのソースコードを リアルタイムでappに反映させながら編集できる
- イメージのビルドやpushなしに、その場で編集→その場で挙動確認が可能
- これは authコンテナにvolumeとしてソースコードをマウントすることで実現される
- appはそのauthディレクトリをあたかも通常のコンテナ内コードのように実行する
📘 前提:何をするのか?
あなたの開発構成:
- appはb上でdocker-composeにより起動中(authはHarborのimageを使う)
- authリポジトリをbの別ディレクトリにcloneし、そこに.devcontainerがある
- VSCode (a) から b にRemote SSHして、authのdevcontainerを開く
- devcontainerが /workspace を app/auth としてマウント
→ devcontainer上の修正がappのauthコンテナにリアルタイムで反映される
📁 ディレクトリ構成の一例(b上)
/home/dev/
├── app/ ← docker-composeで起動する本体
│ ├── docker-compose.yml
│ └── auth/ ← 中身は空、もしくはvolumeで上書きされる
└── auth/ ← authの本物のソースコードがある場所(git clone)
└── .devcontainer/
└── devcontainer.json
🧪 devcontainer.json の一部(コメント付き)
// .devcontainer/devcontainer.json
{
// コンテナの名前(VSCodeタブ名などに表示される)
"name": "auth-dev",
// 使用するDockerfile(開発用のRuby + Rails環境を定義)
"dockerFile": "Dockerfile",
// Docker buildのcontext(この例ではauthの親ディレクトリ)
"context": "..",
// コンテナ内の作業ディレクトリ(VSCodeのrootになる)
"workspaceFolder": "/workspace",
// Railsの開発サーバなどで使うポート(コンテナ→ホストへ転送)
"forwardPorts": [3000],
// appのauthディレクトリをマウントして同期(ここがキモ!)
"mounts": [
"source=${localWorkspaceFolder},target=/workspace,type=bind"
],
// 初回コンテナ作成時に実行されるコマンド(gem installとDB初期化)
"postCreateCommand": "bundle install && rails db:setup",
// 開発者用ユーザー(rootでなく "vscode" ユーザーで動作)
"remoteUser": "vscode"
}
🧪 app 側の docker-compose.override.yml の例(コメント付き)
# app/docker-compose.override.yml
version: '3.8'
services:
auth:
volumes:
# devcontainerのauthコードをapp/authとしてマウント
- ../auth:/app:cached
environment:
- RAILS_ENV=development