タオルケット体操

サツバツいんたーねっとでゲームとかガジェットのレビューとかをします

Windowsを開発環境化する試みのWork In Progress日記

Sponsored link

なぜWindows

MacBook高すぎ問題、macOSの劣化ぶりがヤバい問題、革ジャンGeforce GPU使いたくなったらどうすんだよ問題。 そして去年一年はLinuxを使って開発しており、iOS開発でもやらない限りは全くもって何の問題もないことがわかったのだけれども、ラップトップでLinuxを使おうとするとまた違ったyak shavingが発生して消耗するのが目に見えている(System76など、最初からLinuxが載っているマシンを選ぶなどの選択肢はあるけど…)

hachibeechan.hateblo.jp

数年前まではハードウェアとしてMacBookのクオリティと値段に迫るラップトップが存在しない状況だったけども、最近ではtouch barなどのゴミを取り付けて迷走しているMacBookをよそにXPSやRazerBladeなどのまともな選択肢が増えつつある。 SSDへの換装などもしながら頑張って5年くらい使ってきたMacBookProがそろそろヤバそうなので今年こそラップトップを買い替えたい。そういった中で、もしもWindowsが開発環境としてまともに使えるようになれば嬉しい。そういったお気持ち。

方向性

前提として

  • ためしにPythonをWindows用のインストーラーから導入してみたら地獄を見た

    • なので可能な限りWindows Subsysem for Linux(以下WSL)上に環境を構築していく
  • 使い勝手にあまり深入りはせず、適当な完成度で諦める

という方針で行く

Windowsのゴミすぎるキーボードショートカットをどうにかする編

ここ一年間の僕といえば会社の開発機はLinux(Xubuntu)で、自宅での趣味の開発はmacOS、遊びにはWindowsという三刀流で暮らしてきた。 平均的な人間は視野が狭く「異なっていること」と「優劣」の区別がつかない、そして自分の古い経験の延長線上にないものをクソだと断じてしまう傾向にある。……んだけども、ことキーボードショートカットという点においてWindowsは他2つのデスクトップ環境から圧倒的に劣っていると判断せざるを得ない。つーか生産性の欠片もないクソゴミっしょ。

まずキーボードの特等席にあるWinキー(⌘やSuperのこと)の機能がおかしい。どんだけ頻繁にスタートメニュー開きたがりだよ。 そしてWinキーとのコンビネーションに割り振られている機能がまたおかしい。

こちら(https://support.microsoft.com/ja-jp/help/12445/windows-keyboard-shortcuts)を参照すればわかるが、例えばWin+Fで「フィードバックHubを開きスクリーンショットを撮る」だ。まずフィードバックHubってなんだよという話ではあるのだが、せっかくスタートメニューにCortanaが常駐してランチャーとして利用できるようになっているのにショートカットにアプリの起動(しかもめったに使わないようなもの)を割り当てるのは無能の極みと言わざるを得ない。 他にもWin+Ctrl+Cで「画面をモノクロにする」ことができる。誰得だよ。しかも気が付かずに誤爆してもおかしくないようなショートカットだ。エンドユーザーが誤爆して「何もしてないのにパソコンが壊れた!!!!」とヘルプデスクに詰め寄る姿が容易に想像できる。

キーボードショートカットにおいてはmacOSが一番優れている。99%はそのままでも非常に使いやすいが、気に入らない項目があるならば簡単にカスタマイズできる。例えばアプリ切り替えのショートカットはいけていないが、Alt+Tabをアプリ内のウィンドウ切り替えに割り振るなど柔軟な設定が可能だ。 時点でLinuxだが、自由を重んずる文化や、X Windowの諸々によってアプリごとの統一がとれていない(今後もこれは解決不可能だろう)。そもそもデスクトップに何を選ぶかによってまた話が変わってくるが……まぁカオスだ。しかしk0kubun氏のxremapという神ツールが全てを解決してくれる。 Windowsは前述したように最低最悪のデフォルト設定とカスタマイズの面倒臭さが合わさり最強にみえる。

もしかしたら慣れの問題かもしれない……とおもい、ここ数ヶ月ほど何もいじらずに過ごしてみたがそんなことはなくただのクソでした。 しかたがないのでAutohotkeyを導入して解決。

おすすめのAutoHotKey設定

  • 左右のWinキーを単体で押すとIMEを切り替えるようにする。

これは一部のMacユーザーがよくやる設定ですね。

LWin::Send,{vkF3sc029}
RWin::Send,{vkF2sc070}

左右のWinキーを全角半角ボタンとひらがなボタンに切り替えてます。お察しのとおり、全角半角ボタンはトグルの動作をするので完璧に動作はしません……が妥協。 ちなみにこのブログを書いていたらRWinキー側の切り替えが動作しなくなりました。ウケるwww

  • カタカナやアルファベットへの変換をFnキーからことえり風に

カタカナ変換するたびにホームポジションを崩す…? そんな面倒くさい動作、怠惰なプログラマーは耐えられません。カロリーの無駄です。 ことえり(Mac版のGoogleIMEもですが)はCtrl+Kなどでカタカナや半角英数への変換ができます。

^k::Send,{F7}
^l::Send,{F8}
^sc027::Send,{F10}

ですね。 しかしこれには致命的な問題があります。快適な文章編集のためにEmacsキーバインドを使いたい人の場合、Ctrl+Kは「一行削除」の動作をするべきです。 その場合は、GoogleIMEを導入してプロパティからキーボードショートカットの設定を「ことえり」に変えるようにしましょう。

  • Win+Tabの動作とAlt+Tabの動作を統一

Win+TabはかっこつけたAlt+Tabみたいな動作をしますが、一度押しただけでは次のウィンドウにフォーカスが移動しません。つまり次のウィンドウに移動したい場合はWin+Tab -> Tabと操作する必要があります。しかも動作がモッサリしています。馬鹿ですね。 仮想デスクトップが云々という話を聞きますが、こんなクソショートカットを強いられる機能が便利なわけがないので無視します。

<#Tab::AltTab
>#Tab::AltTab

ここで問題が発生します。AutoHotKeyは3つ以上のコンビネーションをうまく設定できません。特にTabなどの修飾キーがからむとうまく動きません。 なのでWin+Shift+Tabの設定ができません。

どうするか、諦めます。動作しているだけマシだとおもいます。 一般的なUnix配列ではSuperキーが押しやすい位置にあるため、僕もこちらを多用しているのですが、これを機にAltを押しやすい位置へと移動させてもいいかもしれません。

  • CtrlのコンビネーションにEmacs風操作(Cocoaキーバインド)を導入

これは好みの問題ですね。 Vimの中では問題ないのですが、外ではこれなしでは生きていけないのでやります。

^p::Send,{Up}
^n::Send,{Down}
^f::Send,{Right}
^b::Send,{Left}
^h::Send,{BackSpace}
^d::Send,{Delete}
^a::Send,{Home}
^e::Send,{End}

その他、適時増やしていきましょう。

操作性のまとめ

  • Windowsで効率的にテキスト編集するならキーバインドの変更は必須(あるいはVimに引きこもる)

  • でも明らかに限界があるのでさっさと諦める

この2つですね。 あとCtrlとCaps lockもスワップしておきましょう。

ホームポジションから離れた回数だけ寿命が縮んでしまう病気に罹患していたのでどうにかしようと四苦八苦したんですが、郷に入れば郷にしたがえ、キーボードを諦めてマウスで全部やっていったほうが良さそうな雰囲気ですね。

WSL導入

はい。まともにやると長くなる上に100番煎じな上、解説できるほどWSLに詳しくないので割愛します。 とりあえずWindows StoreからUbuntuをダウンロードしましょう。

wslttyのインストール

WSLをインストールしてまず気がつくのが、端末がゴミだということだとおもいます。 テキストのコピー・アンド・ペーストもまともにできねぇ…! とおもいきや右クリックで貼り付け動作という黴臭い動きをしてやがってくれます。色も狂ってますね。

筋トレをすると任意の端末からWSLを使えるようになるみたいなんですが、そんな面倒くさいことはしたくありません。 というわけでwslttyを使います。これはminttyのサブプロジェクトらしく、サクッとインストールしてぱぱっとWSLが起動します。GitHubからインストーラーを落とせます。 Minttyは枯れていますし比較的安定しているとおもいます。本命はAlacrittyだとおもうんですが、Windowsサポートはまだまだ先でしょう。

wslttyの問題点

  • ウィルス対策ソフトを起動しているとwslttyのインストールに失敗します(インストール自体は失敗しないが、ディストロの認識などに失敗する)。リアルタイムスキャンなどの機能を一旦停止させましょう。

  • デフォルトシェルがbash固定です。これはissueもあがっているのでそのうち解決するかもしれませんし、しないかもしれません

  • 僕の環境だと、.bash_profileをロードしてくれません。なので起動ごとに毎回手で $ source .bash_profile してます。ウケる~~www 解決したいんですが疲れたんでそのうちやります。

  • コピー・アンド・ペーストのショートカットがCtrl+InsとShift+Insです。正気かな?

Jupyter notebookの導入テスト

セットアップ

いろいろなお気持ちが存在しており、Anacondaはクソだとおもっているのですがなんか変にはまったりするのも嫌なので俺はつかうぜ! というノリでMinicondaを使って環境構築します。 導入に使うのはもちろんpyenv。なぜなら面倒くさいから。

まずインターネットの言いなりになって普通にminicondaをインストールしようとしたら謎のエラーが出て無事に死亡しました。 30分瞑想して得た直感によれば依存ライブラリの問題なのでいれます。

$ sudo apt install -y gcc make openssl libssl-dev libbz2-dev libreadline-dev libsqlite3-dev

これで通ります(た)。

僕の理解によれば、Anacondaの良いところはこの辺を適当にいい感じにしてくれるというところだったはずなんですが、どうやら違ったみたいです。面白いですね。 しかもAnacondaはデカすぎるからMinicondaらしいですが、そうなると普通のPythonとvenvのほうが良いんじゃないんでしょうか。どうやら機械学習は奥が深いようです。

色々とライブラリを conda install していきます。 pip install との違いがわかりませんが、たぶん器とかが大きいんだとおもいます。 Passwordなどの設定をするために jupyter notebook --generate-config をしますが、恐らくエラーが出るとおもいます。なので python - Install Jupyter Notebook on Miniconda - Stack Overflow を参考にTornadoを入れ直します。 どうも器が大きすぎて依存関係にあるものより新しいTornadoを持ってきてしまったようです。 回答例をみるとcondaで持ってきたはずのライブラリですが、pipで入れ直しています。これはマジでヤバい香りがしますが面倒くさいのでコピペしました。動きました。動けば良いんだよ。

matplotlibの導入

さて、ブラウザーからlocalhost:8080にアクセスして、簡単なグラフを書いてみようとするとmatplotlibがないことに気が付きます。Minicondaはminiなのでmatplotlibが入ってません。

$ conda install -c conda-forge matplotlib 

で入ります。この -c conda-forge がないと動きません。理由は秘密です。 これでグラフが書けるはずです。かけましたか? よかったです。

WSLまとめ

  • だいたいLinuxの知識でやっていけるの嬉しい。時々固有の問題が出るらしい

  • homeがどこにマウントされているのかとか、Windowsワールドとの連携、パーミッションの問題など固有の知識が必要になるっぽいけどめんどくさいのでまだ一切調べていない。そのうち必要になりそう

  • wslttyはコマンドプロンプトよりはマシ(良いとは言っていない)

  • Jupyter notebookちゃんと動いた。numpyであれしてmatplotlibでグラフ書けた これでMacbookからもアクセスできるね!

その他、Windowsの快適動作のための設定とか

これとか参考になりますね。

islandcnt.exblog.jp

僕はそこそこのスペックのデスクトップマシンなので影響を感じることはなかったですが、HDD死んだりするのは困るしWindows Searchは完全に役立たずなので無効化しました。

ちなみにセキュリティソフトですが、僕はたまたまプロバイダにもらった無料ライセンスがあったのでウィルスバスターを使っています。しかしWindows Defenderはかなり有能らしいので、普通の用途にしか使わない方*1は特別に何かをインストールする必要はないんじゃねーかなーとおもいます。 WindowsのセキュリティまわりはMacよりも優秀な印象ですね。

Windowsまとめ

良いところ

  • 最初からインストール済み(Linuxとの比較)

  • マルチモニターとかが比較的安定している。プロジェクターを認識しないとかはまずおこらない

  • IE(Edge)の動作検証ができる

  • 公共機関のクソダササイトとかでの動作可能性が高まる

  • マシンの選択肢が広い

    • MacBookに負けないラップトップも増えてきた(RazerBladePro欲しい)
  • 4Kモニターを使えばフォントもだいたいきれい(「Windowsなのに滲まない!」くらいのニュアンスです)

  • WSLすっごい

  • Pythonで機械の学習のアレしたいだけの人ならJupyter notebookさえ立ち上げればあとはどうにでもなる

  • 快適にゲームができる

駄目なところ

  • 4Kモニターじゃないとフォントが汚い。我が家はEIZOの2560x1440解像度のディスプレイを使っているがそれでも汚い。フルHDは言わずもがな

    • 特に游ゴシックのレンダリングはどうしようもないゴミ
  • キーボードショートカットがアホ

  • 「快適に操作できるように」とかやりはじめると物凄い量のヤクの毛を刈らないといけなくなるので適当に切り上げて諦める

  • WSL固有の問題にあたったとき、切り分けが難しそう

  • プログラミングしようとすると調べること、やらなければならないことが多すぎるのでやっぱり上級者向け環境

  • 快適にゲームができてしまう

最後に

こんな感じですかね。 僕は操作の快適性に異常なこだわりのある異常者なので批判的フレーズが出まくったような気がしなくもないのですが、同等以上のスペックを安い値段で手に入れられることからくる余裕はなかなか良いものです。特にMacはデスクトップマシンにちょうど良い選択肢がありませんので。

しかし環境構築中、5分に一度のペースで襲いかかるゲームをやりたい衝動と戦うのが本当に辛かったです。病気ですね。 現在購入候補にあがっているラップトップのいくつかはゲーミング向けモデルなのですが、まともに仕事をしたいならば絶対にゲームをインストールしてはいけないとおもいました。


*1:ディープWebに潜り込む、割れ行為、漫画村のような違法サイトの閲覧などをしないって意味だよ!