ツール・環境厨がメインPCをLinuxからWindows+WSL2に乗換えた理由と作業メモ

# はじめに
偉そうなことばかり言ってますが他人の作ったソフトを使うことしかできない素人です。そして宗教色も強いです。詳しい方もっとスマートなやり方・ご意見等あれば教えて下さい。

## 筆者の環境
- Thinkpad X1 Carbon 2018
- 家ではUSB Type-C ドッキングステーションに接続し、見た目はデスクトップ
    - 4K, FHD, FHDのトリプルディスプレイ
- US Keyboard
- 日常用途も開発用途も両方

# 乗り換えを決意した経緯
アドバンスドユーザにはLinuxこそ至高だと思っていた。全て自分で設定・選択できる自由。アドバンスドユーザ用の豊富な無料のツール。そして最高のラップトップ(=Thinkpad)にも自由に入れられる。

しかし、Linuxには大きな問題がある。基本的にGUI周りが弱い。数ある商用サービスはたいていLinuxをきちんとサポートしていない。（逆にサポートしているDropbox, Spotify等は素晴らしい）
それでもLinuxの便利さは、これらの欠点を補って余りあると思っていた。

しかし、ある日久しぶりにWindowsを立ち上げたら（当然デュアルブート環境なのだ）ブラウザのレンダリングが爆速ではないか。ウィンドウを電光石火で切り替えて移動しても描画がしっかり追いついてくる。私は家ではノートPCのオンボードのグラフィックで計6K外部出力しているので、gnomeを使っているときに動作がカクついてもそれはある程度仕方ないと思っていた。しかし、Windowsでは快適にそれらが動作するのだ。LinuxでもHardware accelerationが動作するようにドライバーの設定はしたはずだが、やはり対応していないアプリも多いし（zoom, chromeのvideo decode等)、なぜかカクカクなのである。きっと計算プログラムを走らせるだけならLinuxにCLIでログインしてコマンドを叩けばLinuxのほうが速いのだが、日常用途も考えるとWindowsのほうがサクサクなのだ。そして、Windowsは最近WSL2でLinuxカーネルが動くようになり、wingetみたいなスマートな取組みも始まっている。正直ここが一番大きな乗り換えた理由である。

そして第二には、やはりほぼ全てのソフトがWindows向けに最適化されたアプリ・ドライバを提供しているのも大きい。Windowsに乗り換えれば公式Google Driveクライアントもあるし、~~ゴミ~~LINEもネイティブアプリを提供している。4kHDRの動画をYoutubeでみてもHardware支援が効くし、Amazon Prime VideoもFull HDで見れる。

そして第三には、今は学生だが就職したらLinuxを使えるような職場かは現時点ではわからない。Windowsでも効率的な作業ができるようになっておけば、就職してから活躍すること間違いなしである。（）

gnomeをやめてi3とかにすれば、カクカクする問題は解決するかもとかは考えたが、また時間をかけて環境を整えても、結局いろんなアプリが非対応という事実は変わらないので、ならWindowsを快適にしたほうがイイ気がしてきてこうなった。

# Why not MBP?
大抵の人はmacでいいじゃんと言うだろう。もちろんmacにもいいところはあるのだがハードがやはりおもちゃであるのだ。MacOSがThinkpadに乗ればいいのだが、、、以下数ある理由を抜粋。

- パソコンなのになぜかキーボードの形をしたまな板が本体の約半分を占めている。
- 見栄えしか考えてないグレアディスプレイ（デザイナーとかはいいのだろうが、この記事はあくまでもdeveloper視点である。）
- 物理的に重い。ベゼルも細くはない。
- Ligitning（）じゃなくてType-Cなのは当然だとしても、逆になんでType-Cしかないの？確かにそれ将来的には理想形だけど現実的にはアダプタ持ち歩くだけにしかならないよね
- なぜかProのほうで物理キーを廃止してTouch Bar（）
- トラックパッドはいいらしいが、男は黙ってキーボードなのでどうせ使わない関係ない。
- スペックに対してやはり高い、高すぎる。（筆者はコンピュータに関しては金にあまり糸目をつけないので直接の理由ではないが、こんなに高いのにもっと安いThinkpadにボロ負けしていると考えるとやるせない）
- デザイン重視など実用的な工業製品としての質が低い
    - すぐ故障する
    - 排熱性能（）
    - 低クロック推移（）
- mac OSは確かにWindowsより使いやすいだろう。しかしやはり欠点はある
    - Appleサービスと親和性は高いけど、Appleサービス(iCloudとか)は~~ゴミ~~が多いのでどうせGoogleサービスしか使わない。というかGoogleが強すぎる。Appleサービスと親和性が高かろうが関係ない。
    - Dockerがネイティブで使えない
    - Unixではあるが、細かなところがLinuxと違ってうざい

以上を考えるとWindows on Thinkpadが最高なのではないかという結論に至った。（但し開発用途にしか使わないとかシングルディスプレイでGPU支援がいらないとか環境によってはLinux on Thinkpadであろう）

---
さて御託を並べるのはここらへんにしてここからはWindowsに乗換えるにあたって調査したこと・メモを記す。

# Windowsの環境構築
## 方針
- 開発は全てWSL2上、間違ってもwindowsのゴミのようなpath環境や改行コードとは関わらなくていいようにする。
- 但し、VSCodeとJetbrainsIDEの問題はある。少なくともWSL1ではVSCodeはWSLにアタッチするのに1秒弱はかかるし、Jetbrainsについては未調査。Linuxのときは`$ code .`を叩けば一瞬で開いた。
- ブラウザとかのその他日常用途アプリは全部windowsに任せよう。きっとwingetにすぐほとんどは対応するだろう。GPU支援アプリ万歳

以下乗り換えにあたって調べたツール達

## WSL2
- ディストリビューションはやっぱり安定したローリングリリースなManjaroがいいんだけどうまくインストールできるのだろうか？
    - 一応有志が取り組んでいたけど不安定そうなので、素直にUbuntuを導入して、~~パッケージ管理はlinuxbrewにした。~~ Path管理とかめんどくさかったし、普通にaptに戻した。
- shellはいままでzsh+zgen+preztoでサクサクだったけど、これを機にfishに乗り換え。
- 現時点ではfish+fisherでやってる。shell scriptの文法がbash/zshと大きく異なる以外は満足
- dockerはUbuntu上でそのままaptで持ってくるか、windowsのdocker for desktop使うか迷い中。aptのほうがwindows側の環境汚さずに済みそうだけど、windowsのほうが後々便利だったりするのかな？

## ターミナル
guakeみたいなdropdown terminalがよい。
### 現時点での候補
- Hyper: 分割もあるしプラグインもよい。しかし少し遅い。
    - https://www.kimoton.com/entry/20181212/1544619130
    - https://qiita.com/WGG_SH/items/65416692d545f888c6a9 
- Fluent Terminal: 若干遅い。Dropdownオプションがなさそう。Storeにあるのはよい
- alacritty: 確かに速い。但しdrop downのオプションはない。Windows Managerがサポートするべき機能だとissueで言われてる。（だったらWindowsでそれを実現するツールを教えてくれ）
- Windows Terminal: 発展途上だが公式なので安定感はある。
- cmder: Dropdownあり、重いのでなしか
- ConEmu: cmderのフォーク元らしい。きっとこれも重い
- Terminus: issueによればdropdownに対応しているらしい

guakeが使えなくなるので、いい機会だしtmuxも導入することにする。

### 参考リンク
- [2019最高のWSL環境を求めて](http://mjhd.hatenablog.com/entry/2019/03/09/115105)
- [stack exchange](https://superuser.com/questions/1132298/guake-windows-10-bash)

~~とりあえずHyperにしてみようかな。
Windows TerminalはGPUサポートしてるからこれにDrop down optionが実装されたら乗換えるかも。
Hyperとりあえず動いた。overlayのパッケージがうまく動かなかったが㏚のコードを参考にして修正したらうまくいった。~~

Terminusにした。マルチプラットフォームだがWindowsをメインターゲットにしててバグが少ない。Hyperではtabのvertical splitさえバグでできなったので乗り換えた。欠点としてパフォーマンスが悪い。今まで重いと言われてるzsh使ってるのにシェルが重いとか思ったことなかったけど、初めてシェルが重いとかいう概念がわかった。

っていうか今更だけどdropdownがないターミナルでもホットキーでshow/hideできるツールいれれば疑似的に再現できるのでは？もう疲れたからとりあえずTerminusのままいくけど。

さらに追記、Terminus重すぎてストレスマックスだったのWindows Terminalに乗り換えた。むちゃくちゃ速い。やっぱ公式は安定感が違う。速いと言われてるalacrittyより速い気がする。多少機能が少なくても、一番使うところなので基礎がしっかりしてるものを選ぶといいね。こんな便利なものをMicrosoftが公式に出してると考えると感動する。

## Package manager
どうせchocolateyとかも不完全だし期待を込めてwingetにする。これで全てが済む世界になってほしい。pamacが恋しい

## Tiling Window Manager
ここはちゃんとしたものがあるか心配。有料でもいいので安定してキーボードで操作できるものがほしい。
- bug.n: だめだったうまく動かない。
- HashTWM: だめだったうまく動かない。
- MaxTo: 試用版はあるが用途が異なる気がする。
- AquaSnap Pro: 試用版試した。バグ等なくきちんと動作するが、これはTile WMではない。単にWindows分割とかの便利ツール
- Stack Window Manager: これもAquaSnapと同じ系統
- divvy: 用途が異なる。

~~どうやらbug.nはうまく動かなかったが、きちんとconfigすればうまくいくかも。モニタごとにscalingが違うからちょっと無理そうだけど。
色々試した結果どうにかしてbug.nを動かすしかないかも。~~ それなりに動くようになったけど、遅い。ネイティブでWindow Managerを入れ替えられるわけではないのでしょうがないか。こんなUXならもう標準のものでよい。

## ファイルエクスプローラ
WSL2上のrangerでプレビューとか含めてうまく見れるんだろうか。不安。

## エディタ
VSCodeしかないよね

## IDE
- Jetbrains系がVSCodeみたいに手軽にWSL2とアタッチできるのか調査が必要
- X Serverを立ち上げてGUIもLinux側で立ち上げればいいかもしれないけど、勝手なイメージでなんかカクつきそう。せっかくwindowsなのでGUIはWindowsから使いたい。
- [こちら](https://qiita.com/kunit/items/051196022763e64e91f6)の末尾で言及されているところを見ると大丈夫そう。

## Windowsのためのツール
### システム変更系
- ~~fastwindowswitcher: windowsのalt-tabむちゃくちゃ見にくいので導入。Gnomeではalt-tab中にフォーカスウィンドウに色がつけれてすごい見やすかった。~~ うまく動作しないマルチディスプレイ対応とは書いてあるけどおそらくバグがある。
- ~~win-10-virtual-desktop-enhancer: デフォルトでwindowsを隣のvirtual desktopに持っていくshortcutないのやばくない？~~これもオリジナルは開発が止まっており、一番活発そうなフォーク版を試したがダメだった。代わりに[MoveToDesktop](https://github.com/Eun/MoveToDesktop)は動いた。
- StrokersPlus: ゆうてご飯食べてるときとかは片手でマウス使うので、そのときのマウスジェスチャ用
- tascher: windowをインクリメンタルサーチで切り替えられる。Alt-Tabを連打しなくてもよくなったが、手順に従ってインストールしてもmigemoに対応させることができないがとりあえず放置。

### クリップボードマネージャ
Win + Vはいいんだけど、あれキーボードで操作完結しないの？俺の使い方が間違ってる？要調査。（テキスト入力中に限りキーボードで選択できました。これならとりあえずは看過できる）

### プロセス管理
Windows側のプロセスが暴走したときってどうすればいいの？WSL2のhtopとかgtopじゃwindowsプロセスは扱えないよね？
訳わからないPowershell立ち上げてコマンド叩くのも嫌だけど、タスクマネージャを立ち上げてマウスポチポチとかはもっと勘弁。

### ファイルエクスプローラ
最低限tab化ができるもの。~~Clover3~~（トロイの木馬だった笑、Windows Defender万歳）かQTTabbar。

QTTabbar使ってみたが想像よりよい。標準のエクスプローラに拡張で入れる形なので動作が不安定になったら嫌だなとか思っていたが、細く設定できるし、動作も安定してるしこのレベルのものを個人で作れるとは、、、そりゃ海外サイトでも紹介されるわけだ。（日本の方が開発されているが英語にも対応している。）
ただかなり重いので、使わない機能はできる限りオフにすること。

### 便利ツール
- Powertoys: 恥ずかしいことにこのMicrosoft公式の便利ツールの存在を最近知った。これいれよう。プレビュー版なので公式なのに、ctrlキーのswapがうまく行かなかった。代わりにkeyswap.exeを使った。
- Mini Tool Partition Wizard: LinuxのほうにPartitionを侵食させるときに使えるだろう。


### exif関連
これはただの自分用忘備録である。
- GPSBabel: これでtimeline jsonをgpxに変換
- [Geotag](http://geotag.sourceforge.net/): これを使って写真にタグ付けする。

## デバイスドライバ
- Driver Booster: 以前使っていて機能には不満ないんだけど、勝手に他のソフトいれるし、スタートアップ自動起動も意地でもしたいみたいだし、ちょっとマルウェアちっく。代替を探しておく。

## ウェブサービスのクライアントアプリ達
Station・bitwarden・mendeleyとかいれといた。

# 感想
- Windowsは情報が一番多いと思ってたけど、英語で探しててもLinux文化圏の人間がほしいような情報が少ない。やはりまともな人間は誰も使ってないのか？ちょっとmacOSが羨ましくなった。
- Windowsは日常用途アプリはしっかりサポートされててこの点はとてもよい。Chromeがサクサクになったのはほんとに快適。しかしターミナルとかはあまりのまともなものの少なさには参ってしまった。
- アドバンスドユーザなら当然変更したいような（エクスプローラのタブ化や仮想デスクトップの拡張など）の機能であっても、それなりにツールはあるが個人でやっていてメンテナンスされていなかったり、商用で有料だったりで、選択肢はとても少ない。世の中の星の数ほどいるWindowsユーザはこれでいいのか？
- GUIであっても開発系のアプリに関してはLinuxのほうが安定してるし、種類も豊富だし、当然どこのパーツも入れ替えが効くのですごい快適だったと気づいた。またしばらくしたらLinuxに戻るかも。
- 2020のmacbookは一応キーボードを積むようになったらしいので、一回限りと思って試しに買ってみるかも。ゆうてMac OSは全然触ったことないので、ちゃんと触ってもっとOS自体の使い勝手も知りたい。

# ToDo
- rangerのpreviwe設定
- ~~Terminusのhide後にたまにwindowにfocusが戻らない事象を改善~~
- tascherのmigemoを動くようにする。
- Jetbrains系のアタッチテスト