普段はMacを使っている人間が、Windowsでdockerとgitを使う環境を整えた。
今私が所有しているWindowsマシンは、何かにブチ切れてWindows10 Proにアップグレードしたフルタワータイプのほぼドラクエ10専用機と、開発に使いたいと思ってアキバで買った3万くらいの超型落ちの分厚いノートと、給付金で買ったSurface GO 2なのだが、超型落ちの分厚いノートは重たいのであまり使わなくなり、給付金で買ったSurface GO 2はキーピッチが狭めで入力がやりづらく、ほぼドラクエ10専用機はフルタワー故に使いづらいところにおいてあり結局リモートから使うという状況になっている。
ドラクエ10を居間のMacBookから遊べるようにするのは結構簡単だった。その過程をブログ記事にしようと思って下書きがされているが、たぶんそれは完成しない。
を見れば大体わかるが。
とにかく、私のWindows資源はあまり有効活用されていないのだが、先日Windowsで開発環境を整えたという記事を見た。
なので自分でもやってみるかと思い、Mac上のリモートデスクトップで使いづらい場所においてあるWinタワーにアクセスして、ちまちまと環境を整えてみた。
上記のブログももちろん参考にはしたが、一番見たのは以下のページ。
大体この通りにやっていけばいい。これでUbuntuをインストールしその上でgitを使い、dockerはDocker for Windowsを使うことにし、Windows TerminalからPowerShellタブを開きそこからDocker for Windowsと、もう一つのタブでUbuntuを使うという形にした。エディタはWindows側にVisual Studio Codeをインストールしてそれを使うことにする。
難所
この環境を整える上でハマった、一工夫したところだけピックアップする。
MacのSSHキーの移行
MacのリモートデスクトップからWindowsを使っているので、普通にコピーアンドペーストすりゃいいだろ、と思っていたら、実際にカギを使おうとしたときにusekeychainというオプションがBadだと言われる。ググってみたところ以下の記事を読んで解決した。
Emacs風キーバインド
Macでテキストを編集するときのカーソル移動に関する標準キーバインドはEmacs風である。私がEmacsを使っていたのは大学在学中の6年間だけなのでそんなにEmacsのキーバインドに詳しいわけではないが、行末移動Ctrl-E、行頭移動Ctrl-A、上下移動Ctrl-P Ctrl-N、一文字前Ctrl-F、一文字後ろCtrl-B、1行カットCtrl-Kくらいは使う。そしてこれがMacOSXでのテキスト編集時のカーソル移動のスタンダードなキーバインドだ。これが使えないと個人的にはだいぶしんどい。
なので、せめてVSCodeではこのキーバインドを使いたいと思い、以下の記事を参考に、Awesome Emacs Keymapを入れた。
思わぬ盲点としては、ファイル保存のショートカットがCtrl-X Ctrl-Sになってしまうことだが、10年以上前の大学時代を思い出し、そうだ、Emacsの保存はこんなショートカットだった、と感慨にふけったりした。
IME オン/オフ(リモートデスクトップ環境固有)
MacではCtrl-Spaceで入力切替をするようにしていたが、リモートデスクトップからWindowsを使っていると、同じキーで入力切替をすることができない。なので、次の記事を参考にShift-Spaceで入力を切り替えるようにした。
WSLを入れただけではLinuxのGUIアプリは使えない
らしい。先に開発環境をWindowsに移行している夫談。LinuxのGUIを使いたければHyper-Vなどで仮想環境を作る必要があるらしいが、今回使いたいのはgitくらいなのでやめておくことにする。
それならgitもWindowsのを使えばいいじゃんとなるが、Windowsのgitには問題が多いらしい。これまた夫談。
今まではMacを使って開発をしてきたが、それと今回整えたWindows環境を比べての利点と難点を述べる。ちなみにMacでも使っているのはDocker、git、VSCodeである。
また、現状ではWindows上ではリファクタリング第二版の第一章を(テスト実行、コミットなども含めて)写経する程度にしか使っていないことも言っておく。
利点
Dockerが速い。マシンスペックの差もあるので単純な速度比較はできないが、それでもMacBook Air 2018では20秒以上かかっていたテスト実行が5秒で終わる。速い。
難点
VSCode上からのGUIを使ったgit使用ができない。一応Windows版のVSCodeにはウィンドウの左下の緑色の><アイコンからWSLに接続することができるのだが、それをしてもGUIからLinux上のgitが満足に使えない。前回のコミットから変更のあったファイルの検出もうまくできないし、pushはいつまで経っても終わらない。
なので普通にCUIからgitを使う必要がある。普段からそうしている人には何の問題にもならない点ではある。
あと、WindowsのDockerはビルドすると以下のメッセージが表示される。気になる人は注意されたし。
SECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double check and reset permissions for sensitive files and directories.
まとめ
Dockerが速い。これだけで開発のストレスがだいぶ軽減される。ちなみになんでLinuxのDockerではなくWindowsのDockerを使っているかというと、この先Webアプリを開発するときにブラウザからの動作確認がしやすそうだからという理由である。
gitはLinux側のを使う理由は上でも述べたが、Windowsのgitは罠があるという話のため。
仕事でWindowsを使う予定は今のところないので今回整えた環境は趣味で使っていくことになるが、その趣味レベルであっても、MacのDockerだとテストが遅すぎてしんどい思いをしたリファクタリング第二版の写経(リファクタリング、テスト、コミットの一連の流れ)がかなり快適にできる。
さらにリモートデスクトップを使っているため、実際に手で触るマシンは慣れ親しんだMacBookであるというのもいい。英字キーボードのMacBookでリモートデスクトップを使っているが、今のところ入力に困るキーは一つもない。左上にあるチルダもちゃんと入力できる。
しばらくはこの環境でいろいろといじっていきたい。