なにかのまねごと

A Journey Through Imitation and Expression

Windowsでdockerとgitを使う、その利点と難点

 普段はMacを使っている人間が、Windowsでdockerとgitを使う環境を整えた。

 今私が所有しているWindowsマシンは、何かにブチ切れてWindows10 Proにアップグレードしたフルタワータイプのほぼドラクエ10専用機と、開発に使いたいと思ってアキバで買った3万くらいの超型落ちの分厚いノートと、給付金で買ったSurface GO 2なのだが、超型落ちの分厚いノートは重たいのであまり使わなくなり、給付金で買ったSurface GO 2はキーピッチが狭めで入力がやりづらく、ほぼドラクエ10専用機はフルタワー故に使いづらいところにおいてあり結局リモートから使うという状況になっている。

 ドラクエ10を居間のMacBookから遊べるようにするのは結構簡単だった。その過程をブログ記事にしようと思って下書きがされているが、たぶんそれは完成しない。

moonlight-stream.org

を見れば大体わかるが。

 とにかく、私のWindows資源はあまり有効活用されていないのだが、先日Windowsで開発環境を整えたという記事を見た。

r7kamura.com

 なので自分でもやってみるかと思い、Mac上のリモートデスクトップで使いづらい場所においてあるWinタワーにアクセスして、ちまちまと環境を整えてみた。

 上記のブログももちろん参考にはしたが、一番見たのは以下のページ。

docs.microsoft.com

 大体この通りにやっていけばいい。これでUbuntuをインストールしその上でgitを使い、dockerはDocker for  Windowsを使うことにし、Windows TerminalからPowerShellタブを開きそこからDocker for Windowsと、もう一つのタブでUbuntuを使うという形にした。エディタはWindows側にVisual Studio Codeをインストールしてそれを使うことにする。

難所

 この環境を整える上でハマった、一工夫したところだけピックアップする。

MacSSHキーの移行

 MacリモートデスクトップからWindowsを使っているので、普通にコピーアンドペーストすりゃいいだろ、と思っていたら、実際にカギを使おうとしたときにusekeychainというオプションがBadだと言われる。ググってみたところ以下の記事を読んで解決した。

gotohayato.com

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を入れた。

qiita.com

 思わぬ盲点としては、ファイル保存のショートカットがCtrl-X Ctrl-Sになってしまうことだが、10年以上前の大学時代を思い出し、そうだ、Emacsの保存はこんなショートカットだった、と感慨にふけったりした。

IME オン/オフ(リモートデスクトップ環境固有)

 MacではCtrl-Spaceで入力切替をするようにしていたが、リモートデスクトップからWindowsを使っていると、同じキーで入力切替をすることができない。なので、次の記事を参考にShift-Spaceで入力を切り替えるようにした。

cloud-work.jp

WSLを入れただけではLinuxGUIアプリは使えない

 らしい。先に開発環境をWindowsに移行している夫談。LinuxGUIを使いたければ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リモートデスクトップを使っているが、今のところ入力に困るキーは一つもない。左上にあるチルダもちゃんと入力できる。

 しばらくはこの環境でいろいろといじっていきたい。