2019-09-25 (2019-09-25更新)

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

Windows
WSL

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

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

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

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

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

計測してみよう

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

execution time

なんか、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 をインストールできない、という場合があります。
というか、SI やってたらほとんどの場合 WSL 導入はできないでしょう。

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

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

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

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


猫派 / 基本インドア / ガジェット大好き / RDP推進派
コロナ禍の趣味はPC+VRでゲーム。
最近のゲーム:Factorio / BeatSaber / にゃんこ大戦争

→ Policy