Windows10でウェブのローカル開発環境を作る方針の整理

どうしたらいいんだ?とMacからWindowsに移行した当初少し混乱したので整理。

Windows10でローカル開発環境を作るにはざっくり以下の選択肢がある。

  • Windowsの上に直に環境を作る
  • WSLのLinux上に環境を作る
  • VirtualBoxなどの仮想マシンを利用する
  • Dockerを利用する

生Windows、WSL、仮想マシン、Dockerをそれぞれ土台とする。
これらの何を利用して環境を構築するかの検討がまず必要となる。

Windowsの上に直に環境を作る

純粋なWindows上でもApacheやPHP、Ruby、MySQLなどは動くので仮想マシンやWSLなどの仕組みを介さず環境を作ることは可能である。

ただWindowsに特化した構築ノウハウが必要とされる&自分はそのノウハウを持っていないということで、この方法は採らない。

一応VSCode上でのLintやコードフォーマットに対象の言語やライブラリが必要な場合があるので、その要求に応じて各種プログラミング言語はWindows上に直にインストールする。

今のWindows10にはPackageManagementと言う仕組みが標準で入っていて、これにパッケージを提供するパッケージプロバイダを登録するとコマンドラインからサクッと色々とインストールすることもできる。パッケージマネージャ万歳。

またはChocolateyScoopといったサードパーティのパッケージマネージャを使っても可。
自分は環境をあまり汚さないScoopを使っているが、GUIのあるものはPackageManagement&Chocolateyの方がいいみたい。

参考

WSLのLinux上に環境を作る

Windows Subsystem for LinuxはWindows内でLinuxをエミュレーションしてサブシステムとして動かす仕組みで、コントロールパネルから有効化し、Microsoft Storeから利用したいUbuntsuなどのディストリビューションをインストールすることで簡単に利用できる。

完全に独立した仮想マシンとは違いサブシステムなので、Windows環境とWSLはユーザーが特別なことをしなくてもそれぞれのファイルに相互アクセスできるしプログラムも実行することができる。なんかスゴイ。

WSL環境はインポートやエクスポートもできるとのことで意外とポータビリティもあるようだ。が、複数の開発を並行して行っているときに環境がごっちゃになるのは好ましくないので、WSL上に環境を作ることはしない。

ただ簡単なプログラムの動作環境としてすぐに使えるものはあった方がいいので、各種プログラミング言語はWSL上にインストールする。
これはWSL上で普通にapt-getとかする。

VirtualBoxなどの仮想マシンを利用する

VirtualBoxなどの仮想マシンを使えばWindows上に完全なLinux環境を得ることができる。
ただしリソースを余計に必要とし、起動にも時間がかかるなどやや重い仕組みでもある。

WSLやDockerを使った方が気軽なので好みの問題により仮想マシンは使わない。

Dockerを利用する

現時点ではWSL上でDockerデーモンを動かすことはできない(WSL2待ち)のでWindowsにDockerをインストールする必要がある。

Windows10 HomeならばDocker Tookbox、Windows10 ProならばDocker Desktopを使う。
Docker ToolboxはVirtualBoxの仮想マシンを介してDockerを使うもの、Docker DesktopはHyper-Vという仮想化技術を利用してDockerを使うもの。Hyper-Vの方がオーバーヘッドが少なくて速いはず・・・(あまり調べてない)

Windows上のDockerはまだ発展途上の感はあるものの、とりあえずMac使ってた時にDockerで構築した既存の開発環境(RailsやWordPress)はすべて動かすことができたのでヨシ。
ボリュームのパーミッションでひっかかったりとかなんだかちょっとハマったけど、Docker Desktopを一回消して再インストールしたらなんだか直った。
設定画面のUIが変わったので最新版になったのかな?トラブってる間も最新版にしてたつもりだったが・・・

あとはターミナル環境ではWSLをデフォルトにしていることもあり、dockerコマンドやdocker-composeの実行はWSL上から行えるようにしておく。

alias docker='/mnt/c/Program\ Files/Docker/Docker/resources/bin/docker.exe'
alias docker-compose='/mnt/c/Program\ Files/Docker/Docker/resources/bin/docker-compose.exe'

こんなことできるとかなんかスゴイ。使い始めたばっかだからもしかすると何かうまく動かなかったりするかもしらんけど。

今後も開発環境としてはDockerを主に使っていく。

以上、そんなかんじで。