結局WSLを使わなくなった理由

今年、仕事の開発環境を Mac から Windows に変えました。
動機は、当時担当していたプロジェクトで MS Office が必須だったから。
Mac でも Office は利用できますが、いろいろと問題もあります。

それで、Mac と同様に Bash ターミナルから操作したかったので、WSL をインストールして使っていました。

ある日、気づいてしまった

Windows を使い始めてしばらくして気づいた。
なんだか遅い。。。

特に、ビルド系タスクが。
なにこれ Windows だから?

計測してみよう

業務で使っているビルド系タスクで比較。

なんか、WSL での実行が圧倒的に遅い。

Windows だけで比べる

同じマシンで、PowerShell6(PS6) と WSL1 の実行速度を比べてみると。。。

JOB WSL1 PS6
yarn install 125.05s 36.67s 83.38s 約 3.4 倍
nuxt build 30.50s 20.68s 9.82s 約 1.5 倍
mvn build 71.4s 41.86s 29.54s 約 1.7 倍

あ、これだめなやつ。

というわけで、PowerShell を使うことに

日常的に使うコマンドは WSL を使いたいんだけど、時間がもったいないので PowerShell も使うことにしました。
ビルドタスクの.sh化ができないので.ps1ファイルを追加で書くのは面倒だ。

なるべくシェルとかバッチとか書かなくてもいいようにタスクランナーに任せるのがいいと思います。
そういえば最近gulpとか書かなくなったなぁ。

WSL が遅いと、いうのは勘違いだった!

2020/5/28 追記

実はこれ、WSL 側から Windows のディレクトリを見ていたから。/mnt/c/develop/blog とかで yarn build してました。
WSL と Windows は異なるファイルシステムで動いているため、Windows 側へのアクセスにはエミュレートが必要になります。
上記の計測はハンディキャップマッチだったということです。
WSL さんごめんなさい。

フェアな条件で再計測

WSL2 環境での確認ですが、WSL ファイルシステム vs NTFS での比較は WSL の方がめっちゃ早かったです。
Nuxt.js で作っているこのブログのビルドにかかった時間で計測。

WSL2 PowerShell7
22.75s 54.17s -31.42 約 0.42 倍

なんと 2.4 倍位はやかったです。
WSL さん本当にごめんなさい。

でももう一つ、WSL を使わないほうが良い理由が

「使わないほうがいい」、というか「使うべきではない」。
「プロジェクトによっては」という注釈付きになりますが。
WSLは悪くない。

お客さんの環境にそもそも WSL をインストールできない、という場合があります。

それで受注している我々が WSL で開発を進めてしまうと、お客さんマシンでの作業手順を PowerShell 版なり cmd.exe 版なりを追加で作らなくてはいけません。
また問題が発生したときに WSL で再現しない場合など、調査のために開発リソースのロスとなってしまいます。
なので WSL を使う場合もお客さんが素の Windows を利用する場合は、一人はその環境を使って構築しておくと良いです。

イキって Mac を標準にしている会社が、Windows 標準のベンダーと SI やってるとあるある。

というかイキって Mac を標準にしている会社で、自分だけ Win10 なのでメンバーと手順の共有をしにくくてつらいです。
しかし自分が人柱になっているので、お客さん環境でのトラブルは少なくなりました。

早くみんなも Windows になあれ~

2022/5/10追記

それでもWSLで個人プロジェクトは進めていたんですが、メモリ枯渇問題があります。
これが厄介で、WSLがバンバンメモリを持っていってしまうという・・・
さらに、Docker on WSL2でもコンテナがメモリ持っていっちゃう。
メイン開発環境にするには厳しいですね。

以前は32GB積んでるマシンでもWSLに20GB持っていかれたりしていましたが、 PC搭載メモリの50%または8GBのうち、少ない方の値という制限が入ったらしいです。
でもそれが効いている気がしない。

色々試行錯誤した結果、WSLはやめてLinux専用マシンにリモートコンテナ接続して開発するようにしました。
これ、ほんとにサイコー。マシン2台要るけど。
リモートコンテナについては別記事で書こうと思います。

参考サイト

WSL2によるホストのメモリ枯渇を防ぐための暫定対処 - Qiita
https://qiita.com/yoichiwo7/items/e3e13b6fe2f32c4c6120

Subscribe to 猫好きが猫以外のことも書く

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.
jamie@example.com
Subscribe