STORES 予約 でエンジニアをしている水野です。VSCode Dev Containerを利用すると開発環境のセットアップが迅速化されたり必要なライブラリ、ツールをコード化できたりとメリットが多いため導入している現場も多いかと思います。
STORES 予約 でもVSCode Dev Containerを利用しています。しかし今後モノレポな環境に携わる機会が見えたとき、そういえばモノレポでもVSCode Dev Containerって使えるんだっけ?となったので調べてみました。
Multiple containers
モノレポの場合は公式で紹介されているMultiple containersの方法で構築するのが良さそうです。
VSCode Dev Containerで接続できるコンテナは1つのみです。ですがMultiple containersを使えば複数起動する事ができます。
設定ファイルの用意
モノレポの様に接続したいコンテナが複数ある場合はその数だけdevcontainer.json
を用意することで接続するコンテナを切り替えることが可能となります。
例えばbackend
とfrontend
が1つになったモノレポ環境を想定してみましょう。この場合は.devcontainer
の中でそれぞれのディレクトリ事にdevcontainer.json
を作成します。
. ├── .devcontainer │ ├── backend │ │ └── devcontainer.json │ └── frontend │ └── devcontainer.json ├── backend ├── frontend └── docker-compose.yml
docker-compose.yml
の内容は以下の通りです。
version: "3" services: db: image: postgres:latest container_name: db ... backend: image: golang:latest container_name: backend working_dir: /go/src/github.com/hoge/fuga/backend volumes: - ./backend:/go/src/github.com/hoge/fuga/backend depends_on: - db ... frontend: image: node:latest working_dir: /app volumes: - ./frontend:/app ...
それぞれの devcontainer.json
のservice
とworkspaceFolder
をdocker-compose.ymlの内容にあわせて設定します。
// backend container { "name": "backend", "dockerComposeFile": ["../../docker-compose.yml"], "service": "backend", "workspaceFolder": "/go/src/github.com/hoge/fuga/backend" }
// frontend container { "name": "frontend", "dockerComposeFile": ["../../docker-compose.yml"], "service": "frontend", "workspaceFolder": "/app" }
Dev Containerへ接続
devcontainer.json
が用意できたらプロジェクトのルートでコマンドパレットからDev Containers: Reopen in Container
を実行します。
次に接続したいコンテナを選択します。
これで接続が完了しました。あとはいつも通り開発に入るだけです。
接続するコンテナを切り替えたい場合はコマンドパレットから Dev Containers: Switch Container
を実行しましょう。これを利用するとウインドウを増やす必要なくコンテナの切り替が可能となるため非常に便利です。
runServices オプションで不要なコンテナを起動させないようにする
今のままだと例えばbackend
に接続すると本来必要ないfrontend
のコンテナまで立ち上がります。これはDev Container
の起動に時間がかかる原因になるので runServices
オプションで不要なコンテナが立ち上がらないように制御してあげましょう
// backend container { "name": "backend", "dockerComposeFile": ["../../docker-compose.yml"], "service": "backend", "runServices": ["backend", "db"], // 必要なサービス名のみ列挙する "workspaceFolder": "/workspace/backend" }
これで必要最小限のコンテナのみで利用できるようになります。
最後に
以上、モノレポ環境でのVSCode Dev Containerの利用方法でした。モノレポな環境でVSCode Dev Containerの利用を検討している方の参考になれば幸いです。
またSTORES では一緒に働くメンバーも募集しております。ご興味のある方はぜひこちらをご覧ください。