「ローカル環境を汚さない開発環境作り」や「チームメンバー間での開発環境の配布を簡単にする」ために、Visual Studio CodeのDev Containersを使った開発環境作りを試行錯誤しています。
5月末くらいから本格的に社内の小さい開発プロジェクトで導入し始めてから、あれこれ試行錯誤していく中で得た知見をまとめてみました。
今回は、リポジトリ運用の観点でフロントエンドやバックエンド、インフラなどのソースコードが同じリポジトリに混在している場合に、それぞれの用途ごとにdevcontainer.jsonを使い分ける方法を紹介します。
1つのdevcontainer.jsonで全ての用途をカバーすることも可能ですが、それぞれの用途ごとにdevcontainer.jsonを使い分けることで、開発環境の構築時間を短縮したり、開発環境の構築に分割することで保守性を高めたりすることができます。
一箇所にまとめすぎてしまうと、ローカルマシン上からリモートマシン上に単純に場所が変わっただけになってしまうので、コンテナ技術のメリットを活かしていくためにも、用途ごとにdevcontainer.jsonを使い分けることをおすすめします。
構築方法
通常は、リポジトリのルートディレクトリに.devcontainerディレクトリを作成し、その中にdevcontainer.jsonを配置します。
複数環境向けに使うために別名をつけたdevcontainer-infra.jsonのようなファイルを作成して配置しても上手く認識されなかったのですが、最終的にたどり着いたGitHub Codespacesのドキュメントでヒントを得てやり方がわかりました。
これあくまでGitHub Codespacesとしての機能であるため、Visual Studio Codeのリモート開発機能で使おうとすると部分的にしかサポートされていないようです。
ローカルマシンのDocker上でDev Containersを使用して起動する場合にはダイアログが表示されて選択できそうでした。完全なリモート環境上での開発を想定している場合にはまだサポートされていなさそうなので、今後のアップデートに期待したいところです。
使い方
例えばappとinfra用の2種類のdevcontainer.jsonを用意する場合は、.devcontainerディレクトリの中にappとinfraの2つのサブディレクトリを作成し、その中にdevcontainer.jsonを配置します。
これだけ済むので、特に難しいことはありませんでした。
.devcontainer
├── app
│ ├── Dockerfile
│ ├── devcontainer.json
│ ├── docker-compose.yml
│ └── setup.sh
└── infra
└── devcontainer.json
おわりに
Visual Studio Codeの公式ドキュメントには明記されていないものの使えたりする機能はあるので、触ってみないと分からないこともあるな。と日々感じています。
今後も継続して開発プロジェクトにはDev Containersを使用し続ける予定なので、また何か分かったことがあれば記事にしていきたいと思います。
