WSL(Windows Subsystem for Linux)と開発環境

2019-03-30 12:12:32

 私の開発環境はGCP(GCE)上にテスト用のLinuxインスタンスを作って行っています。プログラムの作成はSambaでファイル共有し、Windows上のVSCodeから直接ソースコードを編集しています。テスト環境が本番環境とほぼ同一なので、作成したプログラムを本番に持って行っても、まず不具合は発生しません。直接ソースコードを編集している形なので、内容の変更がすぐにテスト環境に反映されます。


 しかしこの環境、一つ欠点があります。通信環境が安定していれば何の問題も無いのですが、出先で通信環境が悪化すると、けっこうストレスが溜まります。そもそも外でやらなければ良いだけの話なのですが、フリーランスと化した今はそのあたりを対策する方法を模索しています。

 通信環境に極力依存しないようにするためには、必要なサービスをローカルマシン内で動作させるのが最善です。開発マシンをLinuxにしてしまうのが一つの方法ですが、Windowsでしか動作しないプログラムに必要なものがいくつかあるのでそれは出来ません。

 ハイパーバイザ型の仮想環境を用意するという手もあります。ただしメモリとCPUリソースをそこそこ持って行かれます。他に手段が無ければこれを選ぶところですが、実は別の選択肢があります。

 それがWSL(Windows Subsystem for Linux)です。Windows内にLinuxのサブシステムを組み込んで、LinuxのプログラムをWindows上で直接動かすというものです。LinuxのプログラムがWindowsのプログラムと同等の扱いになるので、最小限のCPUとメモリしか使いません。しかも動作環境がコンテナ型なので、Windowsの環境を汚しません。さらにWindows側のファイルとのやりとりが簡単に可能です。

 ディレクトリはインストールしたディストリビューションと同様になるので、Ubuntuを入れればその環境に近い構成になります。その他、たとえばWSLに入れたwebサーバを起動しようと思ったら、Windows側から「wsl sudo service nginx start」とするだけでOKです。Windowsの起動=Linuxサブシステムの起動なので、仮想環境のように別にOSを立ち上げる必要はありません。ストレージは使いますが、不必要にCPUとメモリを消費し続けることもありません。

 ということで、無茶苦茶便利です。