開発環境元を考える

主にWindowsで開発を行う場合の話でWeb系がメインになるが、ちょっと別のアプリ開発の話も綴る。

どこにインストールするか

コンパイラのインストール先をどこにするかは結構悩みもの。仕事の場合は開発環境構築マニュアルを参考にすればよいが、個人的な開発の場合は自由にできるがゆえに悩む。

思いつく候補は3つ。

  • ホストマシン
  • WSL2
  • Docker

ホストマシン

ホストマシン。つまりはWindowsのCドライブがメインになることが多い。開発環境構築ドキュメントでもホストマイン上でのインストールが前提になっている場合が多い。 一つのプロジェクトのみに限定するならば、環境が競合することもないので構築は楽になる。逆に複数プロジェクトを同時に進めていく場合は、環境が競合することもあるので注意が必要。 開発環境のインストール・アンインストール等でホストマシンが汚れる。Windowsには謎が深いレジストリがあるので、アンインストールしたらインストール前に戻るとは限らないから。

デスクトップアプリやゲームアプリの場合は、ホストマシンにインストールすることが前提である場合もある。

WSL2

Web開発ならば、WSL2上にインストールすることが多い。WSL2上にインストールすることで、ホストマシンの環境を汚さずに済む。また、WSL2上で動作するアプリはホストマシンのアプリとは別のものになるので、環境が競合することもないのと、ホストマシンを汚すことがないのが良い。 複数のプロジェクトを同時に進める場合は、WSL2上のLinux環境を複数用意することで、環境が競合することもない。

ただし、デスクトップアプリの場合は起動の条件等によりWSL2上での開発は面倒なときがある。

Docker

Dockerはコンテナ型の仮想環境。コンテナ型の仮想環境は、ホストマシンの環境を汚さずに済む。また、コンテナ型の仮想環境は、ホストマシンのアプリとは別のものになるので、環境が競合することもない。 複数のプロジェクトを同時に進める場合は、コンテナを複数用意することで、環境が競合することもない。

ただし、WSL2同様にデスクトップアプリの場合は起動の条件等によりDocker上での開発は面倒なときがある。(と言うより無理の可能性が高い)

ソースコード等はvolumeでマウントすることで、ホストマシン上のソースコードをコンテナ上で使用できるが、WindowsのファイルフォーマットはNTFS、Linuxはextと異なるので注意が必要。 ソースコードディレクトリをvolumeでmountせずに、コンテナ内部で完結するようにした方が良い。ソースのバックアップはgithub等に任せれば良い。

ホストマシンとコンテナ内部にファイル移動が地味に面倒。わかりやすい例として画像ファイルをWebに載せたい場合時に、ブラウザで素材を落としてコンテナに渡したり、プロジェクトのログをホストOSでみたい場合などなど。 ファイル共有用の作業用ディレクトリ(/tmpのような役割)を作成して、そこに双方向に移動したいファイルを置いて作業するのが良いかもしれない。

また、Dockerはイメージを起動させた時点で使用できるポートが固定されてしまう。そのため、使用するポートを明確にしておかないとコンテナを作り直さないといけないが、Dockerfile+docker-composeを作っておけば再設計の手間は少なくて済む。

Dockerで良いのではないか?

基本的にはDockerに完全移行したい訳だが、そうもいかない場合があるのでなんとも言えない。