とことんDevOps | 日本仮想化技術のDevOps技術情報メディア

DevOpsに関連する技術情報を幅広く提供していきます。

日本仮想化技術がお届けする「とことんDevOps」では、DevOpsに関する技術情報や、日々のDevOps業務の中での検証結果、TipsなどDevOpsのお役立ち情報をお届けします。
主なテーマ: DevOps、CI/CD、コンテナ開発、IaCなど

開催予定の勉強会

読者登録と各種SNSのフォローもよろしくお願いいたします。

Visual Studio CodeのDev Containersで用途ごとにdevcontainer.jsonファイルを使い分ける方法

「ローカル環境を汚さない開発環境作り」や「チームメンバー間での開発環境の配布を簡単にする」ために、Visual Studio CodeのDev Containersを使った開発環境作りを試行錯誤しています。
5月末くらいから本格的に社内の小さい開発プロジェクトで導入し始めてから、あれこれ試行錯誤していく中で得た知見をまとめてみました。

今回は、リポジトリ運用の観点でフロントエンドやバックエンド、インフラなどのソースコードが同じリポジトリに混在している場合に、それぞれの用途ごとにdevcontainer.jsonを使い分ける方法を紹介します。
1つのdevcontainer.jsonで全ての用途をカバーすることも可能ですが、それぞれの用途ごとにdevcontainer.jsonを使い分けることで、開発環境の構築時間を短縮したり、開発環境の構築に分割することで保守性を高めたりすることができます。
一箇所にまとめすぎてしまうと、ローカルマシン上からリモートマシン上に単純に場所が変わっただけになってしまうので、コンテナ技術のメリットを活かしていくためにも、用途ごとにdevcontainer.jsonを使い分けることをおすすめします。

構築方法

通常は、リポジトリのルートディレクトリに.devcontainerディレクトリを作成し、その中にdevcontainer.jsonを配置します。
複数環境向けに使うために別名をつけたdevcontainer-infra.jsonのようなファイルを作成して配置しても上手く認識されなかったのですが、最終的にたどり着いたGitHub Codespacesのドキュメントでヒントを得てやり方がわかりました。

docs.github.com

これあくまでGitHub Codespacesとしての機能であるため、Visual Studio Codeのリモート開発機能で使おうとすると部分的にしかサポートされていないようです。
ローカルマシンのDocker上でDev Containersを使用して起動する場合にはダイアログが表示されて選択できそうでした。完全なリモート環境上での開発を想定している場合にはまだサポートされていなさそうなので、今後のアップデートに期待したいところです。

使い方

例えばappinfra用の2種類のdevcontainer.jsonを用意する場合は、.devcontainerディレクトリの中にappinfraの2つのサブディレクトリを作成し、その中にdevcontainer.jsonを配置します。
これだけ済むので、特に難しいことはありませんでした。

.devcontainer
├── app
│   ├── Dockerfile
│   ├── devcontainer.json
│   ├── docker-compose.yml
│   └── setup.sh
└── infra
    └── devcontainer.json

おわりに

Visual Studio Codeの公式ドキュメントには明記されていないものの使えたりする機能はあるので、触ってみないと分からないこともあるな。と日々感じています。
今後も継続して開発プロジェクトにはDev Containersを使用し続ける予定なので、また何か分かったことがあれば記事にしていきたいと思います。