🔖 第4章:devcontainerを使った開発の流れ(after)

4.1 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