さめたコーヒー

kbaba1001's blog.

WSL2時代のWindows開発環境

WSL2の公式リリースが近づいてまいりました。僕はpreview版のwindowsを入れて先にWSL2を使ってます。

現状でのWSL2のインストール方法は下記を参照してください。

docs.microsoft.com

構成の概要

僕の環境の構成を図にしました。

f:id:kbaba1001:20200430063711p:plain

主に使っているのは次です。

  • Docker for windows
  • VS Code
  • git bash
  • WSL2
  • VcXsrv

次の二通りの開発パターンがあります。

  • Docker for windows + VS Code + git bash で WSL2 を使用せずに開発する
  • WSL2 + VS Code (+ Docker for windows) で開発する

Docker for windows + VS Code + git bash で WSL2 を使用せずに開発する

WSL2の説明と言いながら WSL2 を使わない場合です 。 昨今の開発では実行環境を Docker で用意することも増えてきたので Docker だけで十分開発できる場合も増えてきました。 そのため WSL2 を使わずに Docker for windows だけで事足りる場合があります。

この場合、 Docker for windows + VS Code + git bash で開発を行います。 (もちろん他のエディタやPowerShellを使ってもいいです。)

git bash はインストールするだけで基本的なLinuxコマンドが使えるようになるターミナルです。 git bash は意外と優秀です。使い始めた頃はtmuxがなかったりして役不足かと思いましたが、すでに1年以上使い続けているのでcygwin のような本格的なLinux環境がなくてもこれで十分でした。 VS Code のデフォルトのターミナルを git bash に設定しておけば、 VS Code 上で気楽に git bash を使うことができます。

defaultのターミナルは「Terminal: Select Default Shell」で変更できます。git bash がインストールされている状態であれば候補に出てくるはずです。

f:id:kbaba1001:20200430064622p:plain

↓VS Code のターミナルで gitbash を使用する例 f:id:kbaba1001:20200430064931p:plain

説明が遅くなりましたが、上記のように VS Code のターミナル機能を使って開発を行います。 メリットは複数のターミナルを立ち上げて切り替えながら作業できることです。

f:id:kbaba1001:20200430065017p:plain

それ以外は特にないので VS Code のターミナルが嫌な人は普通に git bash を立ち上げるとか、複数タブ表示できる別のターミナルを使うとかで工夫してみてください。

WSL2 を Docker の engine として使う

WSL2 を使わない開発方法と言いましたが、実際のところ裏の部分で WSL2 を使っています。 Docker for windows 2.2 以降にはHyper-Vの代わりに WSL2 で Linux 環境を動かす機能がついています。

詳しくは次の記事を参照してください。 www.publickey1.jp

設定の次の部分にチェックを入れることで有効になります。

f:id:kbaba1001:20200430064236p:plain

WSL2 + VS Code (+ Docker for windows) で開発する

WSL2 を利用して開発したいケースも多々あります。VS Code Remote WSL を使って、VS Code から WSL の環境にアクセスして開発を行います。

marketplace.visualstudio.com

これにより WSL2 上に VS Code をインストールすることなく開発を行うことができます。

WSL2 における注意点: リポジトリをWindowsの領域に置かない

WSL2 の欠点は Windows のディレクトリをマウントしている部分での処理が WSL より遅いことです。 WSL/WSL2から Windows のファイルを見るときは /mnt/c ディレクトリ以下にアクセスします。このディレクトリは Windows のディレクトリをマウントしていますが、この部分が WSL2 では非常に遅いです。 ファイルシステムの都合によるもののようですが、 普通に git を使うこともできないほど遅いので正直開発では使い物になりません。

f:id:kbaba1001:20200430065952p:plain

そのため、 WSL2 で開発を行うときはリポジトリを /home/ユーザー名/ 以下などに置くことをおすすめします。 そしてそのディレクトリを VS Code Remote WSL でマウントすることで開発を行います。

WSL2からDocker for windows にアクセスする

WSL2ではWSLと異なりdockerデーモンを動かすことができます。しかし僕は Docker for windows に寄せたほうが何かと作業しやすいので WSL2 から Docker for windows にアクセスして使っています。 WSL では ~/.bashrcDOCKER_HOST を設定することで Docker for windows にアクセスしていましたが、 WSL2 ではこの設定は不要になりました (むしろ DOCKER_HOST の設定は消す必要があります)。 WSL2 を docker for windows の engine として設定しておけばResourceのところに下記の設定が表示されるようになるので、チェックを入れるだけでアクセスできるようになります。

f:id:kbaba1001:20200430070733p:plain

これにより WSL2 上でも docker for windows にアクセスして開発できるようになるので、windows 側から同時に docker にアクセスして開発することが可能になります。

WSL2 で Linux の GUI 環境で開発する

あまりユースケースがないかもしれませんが WSL2 の GUI を立ち上げることができるので下記に詳しくまとめました。

www.kbaba1001.com

僕としては WSL2 上で動いている clojure で Quil (processing の clojure ラッパー) で画像を生成する際にこの仕組を使っています。

f:id:kbaba1001:20200430071207p:plain

上の画像では右側に見えている VS Code は Windows で動いている VS Code で Remote WSL により WSL2 にアクセスしています。 左側は VcXsrc です。ここに WSL2 で立ち上げた X11 を表示しており、そのうえで VS Code で書いたプログラムの実行結果である画像(丸が描かれたウインドウ)を表示しています。 これにより画像や音楽などのプログラムを Linux 環境上で構築することができます。

Linuxbrew をインストールする

WSL2/WSLでもLinuxbrewを使うことができます。まれに homebrew しか対応していないソフトウェアをインストールしたい時があるので、 linuxbrew も入れておいたほうが何かと楽です。