Windowsで最高の開発環境を!

テックポエム

ごあいさつ

はじめまして。今年(2019年)の6月にユニフィニティーにエンジニアとしてjoinしました、寺林と申します。これから時々テックポエムを執筆させていただく事になりますのでどうぞよろしくお願いします。

自己紹介

一言で言うと、「Arch Linux上のEmacsでC++書いてるどこにでもいる普通の人」です。

たまにWindowsは使わないのかと聞かれますが、YouTubeからプログラミングまでLinuxです。

そんな筆者でしたが、仕事ではWindows上で開発しております。Unifinity PlatformのターゲットにはWindowsも含まれているので仕方ありません。

とはいえ、Linuxと比べると、Windowsはあらゆる面で貧弱作法が違うので、何とか普段使っている環境に近づけたい所です。

今回は、筆者がWindowsでの環境構築で格闘した話です。

WSLの有効化

真っ先にやった事です。WSLを有効化する方法は、ネットの海に溢れておりますのでそちらに譲ろうと思います。ディストリビューションはUbuntuを選択しました。

尚、似たような事が可能なソリューションがいくつかありますが以下の理由で見送りました。

  • MSYS2: 普段使ってるソフトウェアのパッケージがなかった
  • WSL2: Windows上にあるファイル操作のパフォーマンスが絶望的に低かった

X Window System

WindowsにXサーバーを導入すれば、WSLでGUIアプリケーションを起動することが可能です。いくつかの実装がありますが、筆者はVcXsrvを導入しました。

HiDPI環境

もしHiDPI環境をお使いで、Xアプリケーションの表示がきれいにならない場合、vcxsrvのプロパティを見直してみると良いかもしれません。まず、C:\Program Files\VcXsrv\xlaunch.exeのプロパティを開き、「互換性」タブの「高DPIスケール設定の変更」を押します。「高いDPIスケールを上書きします」にチェックを入れ、拡大縮小の実行元はアプリケーションを選択します。

ターミナルアプリ

Windowsにもターミナルアプリとしていくつか選択肢があります。筆者は以下の要件で探しておりました。

  • byobu(お手軽なターミナルマルチプレクサ)の表示が崩れない
  • 十分なパフォーマンス
  • ドロップダウンターミナルとして使える

色々と試した結果、hyper+hyper-overlayに行き着きました。

WSL上でやったこと

ここまでやればほとんどいつも通りにやり放題です。aptでお好みのパッケージを導入します。

bashrc

いくつかWSL向けに設定しておりますので紹介します。

export DISPLAY=:0 # GUI表示に必要 
export LIBGL_ALWAYS_INDIRECT=1 # VcXsrvのOpenGLを使用
export VTE_CJK_WIDTH=1 # byobuの表示がおかしい場合に

# Linux版の代わりにWindows版のadb&fastbootを使用
# (WSL経由でUSBにアクセスできないようで…)
alias fastboot="fastboot.exe"
alias adb="adb.exe"

課題

およそ3ヶ月間かけて上記のような環境が構築されてきたわけですが、依然として課題があります。

パフォーマンス

とりわけファイルシステム関連のパフォーマンスが低いです。Emacsを起動しようとするとなかなか待たされますし、重た目のgitリポジトリを操作しようとするとフラストレーションがたまります。だからこそWSL2が開発されたわけですが、Windows上のファイルアクセスがさらに遅くなるという微妙な状況です。

Unifinity本体のソースコード

肝心要の製品のソースコードはいまだVisual Studioで書いております。これは半分意図的で、VSのいいところを自分のEmacsに持って来れないか検討したいためです。とはいえ「できていない」というのも事実なので何とか方法を探りたいところです。

おまけ

WSLとは全く関係ないGUI絡みで導入したものを1つ。

Linuxのデスクトップ環境では昔から複数のデスクトップが扱えます。

Windowsでは10になってようやく類似の機能が入りましたが、やはり貧弱挙動が異なるのでそちらも変えてみました。といってもツールを導入しておしまいです。

Windowsのデフォルトでは複数のデスクトップ間は横移動しか出来ませんでしたが、これで縦移動もできるようになります。また、タスクビューを開かなくてもウィンドウを他のデスクトップに配置できるようになります。

License

Tux, the Linux penguin (from here)

Public domain http://creativecommons.org/publicdomain/zero/1.0/

...but, if anyone asks:

Tux was originally made by Larry Ewing in the Gimp and re-illustrated in vector by Garrett LeSage, using Inkscape.