Windows Subsystem for Linuxは使えるか

自分の作業環境のメインは現在は macOS をベースにしてる。プロプラなソフトが使えて、かつベースがUnix。とてもありがたかった。

昨年から手持ちのMacBook Pro 15″(early 2011)の調子がどうにもならず、いい加減システムの更新をしたいと考えてる。

しかし現在のAppleの方向性としては、iOS的な方向へ開発リソースがさかれていて、自分的にはあまりうれしくない。

セキュリティのことも絡んで、カーネル系にちょっかいだす機能拡張が使いにくくなったり、/usr/localの件みたいに段々不自由な感じがひたひたと迫ってきてる。

ハードウェアも今のMacBook Proのキーボードの限度を越えたなげかわしさや、電源ライトの明滅の廃止。Mac mini系列の放置のされ具合。全体的な相対価格の上昇。どっちを見ても嬉しくない。

そんなこんなで、アップル以外の環境に一度戻そうかと思って、WindowsとLinuxへの可否を年末から本格的に検証中。

方針案

  1. 完全にLinuxでWindowsはさっさと消す
  2. Windows 10 + Windows Subsystem for Linux
  3. Windows 10 + 仮想環境(VirtualBox, VMware, HyperVなど)

一応、使ってる大体のソフトは今はLinuxでも使えるので、昔やってたように領域の無駄とWindowsを全消去してLinuxに一本化するのがある意味一番すっきり。

ただ、今回はデスクトップの更新をして同時にメインの作業環境を移そうかと思ってる。手持ちのデスクトップはゲームと会計にも使っていて、これらのソフトはWindowsでないと動かない。

で、1はやや利用状況的に厳しい。

3の方が利用例は多いと思うのだけど、可能ならば2の方がスジはいいと感じてるので、今回どの位使えるんだろうか。と色々試してる次第。

ただDocker for Windowsとか考えるとVirtualboxとの共存が出来ないとか考えちゃうんだよねぇ…

あとは、Virtualboxはオラクルだからなぁ。可能なら使いたくない。まあMySQLもオラクルだけど…Javaも……

結論

現時点では、人類にはWSL(Windows Subsystem for Linux)はまだ早かった(ぉ

自分の用途的にはまだ困難が多く、2のWindows 10 + WSLで開発環境を作るのは困難そう…というのが現時点の感想です。

到達目標

a) Windows側でOneDrive, Dropboxを同期し、これらをLinux側から利用する

b) RubyMineを使っているので、Linux側でRubyMineを使いたい

c) macOSのKeychainのように、秘密鍵の共有を出来るだけしたい

d) railsをはじめとする各種コマンドはLinux側で動けばいい

課題

a) Windows側でOneDrive, Dropboxを同期し、これらをLinux側から利用する

ネットワークストレージとしてOneDriveとDropboxを使っていて、これらに直接Linux側からアクセスしたい。

この目的には、WSLの場合、Linux内で /mnt/<drive letter>/でファイルへのアクセスができるので、問題ない。

Virtualboxの場合でも、共有フォルダが設定できるので、基本は問題ない。

ただし、バグだと思うけど、Virtualboxの共有フォルダのパスに、半角スペースと漢字が混ってるフォルダへは共有が家の環境では出来ない模様…

OneDriveが複数アカウント使ってるんだけど、メインに使ってるアカウントがどうやってもスペースと漢字を含んでしまう。場所の移動ができるんで切り替えても、指定したパスがOneDriveが決めた文字列を含まないと指定ディレクトリの中に漢字を含むディレクトリを作ってしまう。なんでこんなクズな仕様なんだろう…

とりあえずは、おおむねいけそう。

b) RubyMineを使っているので、Linux側でRubyMineを使いたい

RubyMineはrbenvとかの設定も読んで、bundleで指定してるライブラリのソースを検索したり表示したりもしてくれるので、可能な限りLinux側で実行させたい。

Windowsでrubyのバージョンの仕分けやbundlerの指定をしっかり区別できる環境が構築できるならそれでもいいんだけど、まあ無理でしょう。

そう考えると、RubyMineはLinux側で実行する以外ない。

これが今回最大の課題だった。

WSLは、現時点ではバックグラウンドのプロセスが実行できない。

デーモンは無理だし、シェルで&を付けても許可されないと表示されてバックグラウンドに落せない。

RibyMineを動かすにはX Windowを経由する必要があるが、この時の日本語の入力が出来ないという結論。

ibus無理そうだし、uimにしてみたんだけど uim-fep とかbgで動かないし。

一応emacsがWindows側のX Server(VcXsrv)で動くのは確認できたのだけど、日本語が扱えない。上手く設定すれば使えるのだろうか… 自分が試した範囲は無理でした。

自分はソースのコメントとgitのコメントは日本語を使ってるので、これが無理だと実用は不可という所です。

c) macOSのKeychainのように、秘密鍵の共有を出来るだけしたい

macOSだとssh-addで鍵を一旦登録すると、セッションを終えるまではターミナルからのsshでパスフレーズを聞かれることはない。

またGUIアプリでも、大体のソフトはssh-agentを経由(Keychain?)してやっぱりパスフレーズを聞かれない。毎回聞かれるのは苦痛なのでなんとかしたい。

一応、PuTTYに付属?の Pageantとweasel-pageantを使うと出来そうな記事を見付けた。

ただbがダメだったので試さず。あとPuTTY形式に鍵を変更する必要があるというので、もうそういうのも考えるのも嫌。

d) railsをはじめとする各種コマンドはLinux側で動けばいい

これは問題なかった。

rbenvでの切り分け、bundleで必要なgemのインストール。

railsの実行など、基本操作には問題はみつからなかった。

感想

WSL側でGUIアプリを動かし、日本語の入力が必要、という条件がなければ、ある程度使えそう。

I/Oが遅い印象はあります。ddで5GBを書き出すと、自分の環境ではWSLは毎秒45MB位。Virtualboxだと毎秒210MB位。

ちょっとふにおちない気もするが、全体的な操作感もWSLは遅い。ビルドとかしてると覿面に遅い。

その辺に目を瞑れば、WSLでもある程度は使えそうな雰囲気はありました。

コンソールで閉じれる開発環境ならなぁ…

あと、次のアップデート時にはWSLでデーモンが動くという話があるようです。バックグラウンドプロセスが動くなら、また少し状況が変る可能性はあります。

WSLでは、Linux側のコマンドとWindows側のコマンドをパイプで繋いで実行できたりするようなので、結構、それは凄いと思うんだよね。そういう所も「夢」はある。

OS Xも出てからメジャーバージョンがいくつか更新されるまで、クズ扱いだった。今の便利な環境は時間をかけて整ってきたと思う。WSLはまだはじまったばっかりなので、今後に期待という所かなぁ。最近はMicrosoftが割と攻めというか結構いい感じな雰囲気もある。それにUnix系以外といえばもうWindowsしか存在してない世界軸だからなぁ。がんばって貰うしかないのかな。

Plan9とかInfernoとか、どこいってしまったんだ…

あと、シャクだけど、こう苦労するとやっぱり macOSかなぁという挫折にも似た思いが…

資料