💬

VS Code とDockerで開発環境を作る

2023/04/25に公開

前提

VS Code + Docker による環境の構築が前提です。

なぜ Docker 内に開発環境を作るのか

チーム開発をする場合にローカルの環境に影響を受けることなく開発が行える。

ローカル環境では少なからず環境依存が発生する。

また、新規プロジェクト参入時に環境構築する行程が発生する。

環境を Docker に内包することで新規開発者の開発体験を良くしたり、開発者毎の環境差異による動作の違いを抑え込むことができる。

デメリット

第1のデメリットとしては、少なからず Docker の実行環境によって動作に差異が発生することがある。(例えばホットリロードが効かないなど)

この実行環境は Windows では Docker Desktop、mac でも Docker Desktop や Lima など Linux 以外ではほぼ必ず発生する印象。

ただ、あくまでローカル環境構築そのもののコストや依存関係をコントロールし易くなるのでデメリットだが、いかなる場合でも発生するデメリットである。

第2のデメリットとしては、ローカル開発環境よりも動作が遅くなる場合があることがあげられる。

必ず遅くなるわけではないが、Docker とローカル間でのファイル共有によるオーバーヘッドや、Docker 実行環境で割り当て可能な仮想マシンスペック(ローカルと異なりすべて割り当てれるわけではない)が主な要因である。

Docker 依存関係

名称 開発環境 ソースコード node_modules 説明
Clone repository in container volume Docker 内 Clone
一部のファイルを volume mount × 動作に影響を与える可能性の高いファイルをマウント
通常の devcontainer × × ローカル環境とファイルを共有

※Docker 内部にのみ存在するものは ○

上ほど Docker 内部で開発することになるのでファイル共有によるオーバーヘッドが削減できる。

下ほどローカル環境と共有するファイルが多くなるので、エクスプローラー機能で確認しやすくコピー等も簡単である。

Clone repository in container volume

Docker 内 に Git からすべて Clone してくる方法。

ローカル環境からソースコードを確認することは困難となる。

仮に通常の開発時以外で Clone してきたファイル群にアクセスしたい場合は、 Docker 経由となる

Clone repository in container volume の参考

一部のファイルを volume mount

通常の devcontainer をカスタマイズする方法。

Docker 内部に volume を作成してローカル共有では動作に影響を与える可能性の高いファイル(node_modules など)を切り離す。

動作が高速化するのでよく用いられる印象。

一部のファイルを volume mount で作成したサンプルコード

ki0i0ro0/devcontainer

通常の devcontainer

いちばん通常と呼べる方法。

作業フォルダまるごと Docker と共有する。

Linux 環境(WSL2 含む)の場合は気軽に行えるが、mac や windows がベースの場合は Docker 内部からローカルファイルアクセスに対するオーバーヘッドが大きい場合が多く遅く感じることが多い印象。

起動方法

Dev Containers - Visual Studio Marketplaceがまだならインストール

左下の「><」をクリックしたら画像のように「New Dev Container」がでるのでクリックして簡単にセットアップが行えます。

Discussion