mitamaeを使ってWSL2の環境構築をした話

Posted by jolantern on Saturday, March 14, 2020

最初に言っておくと、mitamae以外のことも結構やっている。

普段の開発は基本的にMacを使っていて(仕事でPowerShellを書かないといけない時はWindowsを使うこともあるが)、Windowsで開発環境を作ることはほぼなかった。しかし最近新しいノートPCを購入したのと、単なる技術的興味でWSL2を触ってみた。Docker for WindowsがWSL2から普通に接続できるようになり、まだそこまでがっつり触っていないけど普通のdockerを使うのと大差ないほど使えてしまう。ちょうどクロスプラットフォームなアプリをかけるライブラリなんかをいじくっていたので、Windows上にも開発環境を作ってみることにした。デスクトップマシンとノートPCの環境をそろえたいので、大変じゃないレベルでmitamaeも書いた。

WSL2をインストールする

Insider Previewをインストールして、Linux Subsystemを有効にしたらWSLが使えるようになる。Microsoft StoreからUbutnuをインストールして、 wsl --set-version Ubuntu 2 とするとWSL2に変換してくれる。

さあWSL2を有効にするぞとコマンドを打ち込むとこんなエラー。

powershell<br /> PS C:\WINDOWS\system32> wsl --set-version Ubuntu 2<br /> 変換中です。この処理には数分かかることがあります...<br /> WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください<br /> 仮想ディスク システムの制限により、要求された操作を完了できませんでした。仮想ハード ディスク ファイルの圧縮と暗号化が解 除されている必要があります。また、仮想ハード ディスク ファイルをスパースに設定することはできません。<br /> PS C:\WINDOWS\system32><br />

確かに、このマシンはHDDを数台束ねてストレージプールを構築していたのでそのせいかと思ったが

wsl2にする際に出るエラーについて - a

まとめている人がいた。なんかでディスク容量が足りなくなってディスク容量節約みたいなことをしたときに有効になったのかもしれない。

C:\Users\USER_NAME\AppData\Local\Packages\ を開いて、適用なところで右クリックして Packages フォルダのプロパティを開き、詳細設定を押すと下記のようなメニューが出るのでそこから圧縮を解除してやる。

15時間待った。でも無事に完了した後に、wslのバージョンを2に変更できた。

アプリとしてのWindows Terminal側の設定

Ubuntuとかセクションごとに設定が別れているので、そこを編集するとUbuntuを立ち上げたときに見た目が変わったりする。

{
    "hidden": false,
    "name": "Ubuntu",
    "source": "Windows.Terminal.Wsl",
    "colorScheme": "Molokai",
    "fontFace" : "Source Code Pro for Powerline"
},

colorSchemeは別途定義したやつ。

"schemes": [
    {
        "name": "Molokai",
        "black": "#121212",
        "red": "#fa2573",
        "green": "#98e123",
        "yellow": "#dfd460",
        "blue": "#1080d0",
        "purple": "#8700ff",
        "cyan": "#43a8d0",
        "white": "#bbbbbb",
        "brightBlack": "#555555",
        "brightRed": "#f6669d",
        "brightGreen": "#b1e05f",
        "brightYellow": "#fff26d",
        "brightBlue": "#00afff",
        "brightPurple": "#af87ff",
        "brightCyan": "#51ceff",
        "brightWhite": "#ffffff",
        "background": "#121212",
        "foreground": "#bbbbbb"
    }
],

カラースキームの設定の参考。

Windows Terminal設定メモ

参考というか、ここに転載されているMolokaiってやつ。あんまり最初にここにこだわりすぎると無限に時間がすぎるので、適当。

ホームディレクトリを変更

WSL2になって、Ubuntu上のファイルを見るには ¥¥wsl$¥Ubuntu¥{Ubuntuでのパス} にアクセスすればいいようになった。けど、そんな普段使わない雰囲気のところに git clone したのとか置かれても見づらい。全部Ubuntu上で解決するんならいいけど、僕はそうじゃないのでホームディレクトリを変えたかった。が、これは結局見送った。理由は下記の通り。

  • Visual Studio CodeがWSL2上から code . で起動できるようになり、わざわざWindowsのファイルシステム上に置く必要性が薄れた
  • なんかanyenvと相性が悪いらしく、ホームディレクトリをWindowsのファイルシステムに置くと重くなるらしい

ホームディレクトリをWindowsのファイルシステム上に置くと重くなると言うのは僕の環境では再現しなかったのだが、なんかそういう言説があるらしい。まあ、必要性が薄れたのでやめました。

win32yankのインストール

Macで言うところの pbcopy みたいな、パイプしてやるとWindows側のクリップボードにコピーしてくれるコマンドに clip.exe というのがある。使い方はこういう感じ。

echo "hoge" | clip.exe

exeって入れるのが変な感じ…。それ以上に、こいつはなぜか末尾に勝手に改行を入れる。いちいち鬱陶しいと思っていたが、win32yankというのを入れるといいらしい。

GitHub - equalsraf/win32yank: Windows clipboard tool

普通にreleasesからダウンロードして、Windows側のパスが通ってるところにおいた。

すると、wslなUbuntuからも参照できるようになる。

echo "hoge" | win32yank.exe -i

でコピーできて、

win32yank.exe -o

で標準出力に出してくれる。exeまで書く必要があるし、そもそも長い。なんで/.config/fish/config.fish とかに

alias copy="win32yank.exe -i"

こういうのを書くといい。clipとかにして、引数は都度設定とかのほうがいいかも。お好みで。

VisualStudio Code

WSLからcodeコマンドでvscodeが起動できてとても便利。起動すると、即座にWSLの拡張を入れるように言われる。リモートでWSLに繋いでくれているっぽいのだが、fishのテーマでPowerlineが必要になっている関係でvscodeのターミナルも文字化けする。そこで、下記の設定を入れておく。

"terminal.integrated.fontFamily": "Source Code Pro for Powerline"

基本設定から検索すると、何を入れればいいかわかるのでGUIでの設定も簡単。

ついでにエディタの方のフォントも変えておきました。見やすくていいのでね…。

Docker for WSL2の導入

正確には、 Docker for Windows をインストールして、WSL2向けの機能を有効化するという形になる。

これをオンにしてやると、WSL2でdockerとdocker-composeが使えるようになる。WSL2でapt-getとかしていなくてもなんか使えるようになった。

そのほかのWSL2上の環境構築

下記のmitamaeを書いた。

j-o-lantern0422/wsl-dotfiles

やったことは

  • fishのインストールとconfig、関数が書いてあるファイルの配置
  • pecoとかghqとかよく使ってるツールのインストール
  • anyenvのインストール

一応テーマもインストールしているんだけど、これはあんまりおすすめしない。というのも、テーマを入れた途端にfishの動作が遅くなる。Macだとそんなことはないのだけど、フォントがWindows上のものを参照していたり、まだまだPreviewだったりするので追求は諦めた。

その他

普段使っているアプリ、notionとかvivaldiとか、あとStaionをインストールした。Habitifyで週間管理をしているんだけど、これはWindows用のアプリがなくてブラウザのタブに埋もれてしまうのでStationに入れておくと便利。なお公式にはサポートされていないので、My Appsからカスタムインストールする必要がある。Todoistも、WindowsアプリはなんだかMacアプリになれていると使いづらかったのでStationを使っている。

あと、今回初めて Keypirinha — Keypirinha というのをインストールした。Macで言うところのSpotlightみたいなやつで、僕はCtrl+Spaceで起動するようにしている。起動してnotionとかタイプするとnotionが起動できて便利。簡単な計算ならKeypirinhaでやってしまうのがいい。