Windows で zsh と開発環境を整備
最近 Surface Pro 4 を購入した勢いで Windows のシェル環境整備し一新したまとめ。Surface Pro 4 よいです。
この記事は 2016/05現在プレビュー版である bash on Ubuntu on Windowns とは無関係です。そちらは正式版が出たら試したいと思います。
bash on Ubuntu on Windows が来るならそれでシェル環境間に合うかなとも思ったんですが、仕組み上 Linux サブシステム側から Windwos アプリを立ちあげられるようにはならなそうなので、それはそれ、これはこれという感じで。
やりたいこと
普段の仕事では OSX / Linux 中心なので、なるべくどこでも同じような使用感が得られる環境を目指します。
Ruby/node 少々というのは、ガチ開発になるとは辛いけどサンプル動かすくらいはできる、程度の意味です。
検討結果
結論としては、以下のツール郡でなかなかよい感じになりました。
- パッケージ管理 : Chocolatey + MSYS2内 pacman の2段構成
- なるべく Chocolatey で導入する
- MSYS2 シェル内でしか使わないものは pacman で入れる
- シェル : MSYS2 の zsh
- 端末エミュレータ : ConEmu
- OpenSSH : MSYS2 pacman パッケージ
- Ruby : Chocolatey パッケージ
- node : Chocolatey パッケージ
- Emacs : https://github.com/chuntaro/NTEmacs64 のビルド(手動インストール)
それぞれ詳細
パッケージ管理
まずはパッケージマネージャについてです。
Windows が諸 Linux に最も差をつけられているのがここだと思っていましたが、Windows10 では MS 製の PowerShell モジュール PackageManager (旧OneGetと同じ?) が使えるようになりましたし、サードパーティ製ではあるものの、apt 的な使い勝手をもつ Chocolatey も成熟してきているようで、2016 年現在ほとんど不便は解消していそうです。
パッケージマネージャは環境構築の基礎になるところなので、できれば長いサポートが見込める公式のものを使いたいところです。 なので PackageManager を…と思いましたが、これがまだイマイチこなれてないような…のと、新しいせいで情報が少なめです。よく見るとこの MS PackageManager は複数のリポジトリプロバイダを統括する層のツールで、サポート対象には Chocolatey のリポジトリも含まれていました。これなら Chocolatey の今後もしばらく安心できそうですし、何より既にシェアが大きいようで情報も多いので Chocolatey をメインで使うようにしました。
Chocolatey のインストールは、公式トップにある手順で問題なくできました。 https://chocolatey.org/
シェル環境、端末エミュレータ
MSYS2 はパッケージマネージャがまともそうで、生まれが比較的新しいことに期待して選びました。MSYS2 installer にしたがってインストールします。
MSYS2 はデフォルト端末として mintty が起動するようになっています。mintty は見た目も悪くないのですが、node や irb など対話型の扱いに問題がありましたので、ConEmu から MSYS2 のシェルを起動する形をとります。
まずは付属の MSYS2.shell を起動し zsh をインストールします。
$ pacman -S zsh
次に ConEmu をインストールします。今度は Chocolatey で入れます。PowerShell を管理者権限で起動し、以下の様にインストールします。
PS :> choco install ConEmu
インストールできたら、ConEmu で MSYS2 zsh を起動する設定をします。[Settings] の [Startup] > [Tasks] に zsh 起動コマンドを追加します。
set CHERE_INVOKING=1 & %ConEmuDrive%\msys64\usr\bin\zsh.exe --login -i -new_console:C:"%ConEmuDrive%\msys64\msys2.ico"
- "Default Shell" にチェック
これで ConEmu + zsh が起動するようになると思います。
HOME 環境変数を設定する
シェル内や後述の Emacs の動作を Unix 系に近づけるため、環境変数 HOME
を設定します。
C:\Users\username
あたりが HOME
になってほしいので、%USERPROFILE%
をそのまま設定で ok です。
ちなみに、PowerShell で env
のように環境変数を一覧したい場合は PS > Get-ChildItem env:
で参照できます。
OpenSSH
Windows 版 OpenSSH もあるのですが、自分が試した限りでは ssh-agent が MSYS2 環境で動かせなかったので MSYS2 の OpenSSH を使用します。OpenSSH はどうやら残念ながら $HOME/.ssh/
を見てくれないようなので「msys2での$HOMEとOpenSSHでのホームディレクトリの違い」を参考に、$HOME
を /home/username
にマウントする方法をとります。
/etc/fstab に追加
# User home C:/Users/username /home/username
.ssh/config
も eval `ssh-agent`
も問題ありません。
Git, Ruby, Node
Git, Ruby, Node は chocolatey で入れます。
PC > choco install git ruby nodejs
Ruby は C:\tools\ruby22
にインストールされるようなので、MSYS2 側で /c/tools/ruby22/bin
にパスを通します。
$ git --version git version 2.8.1.windows.1 $ ruby -v ruby 2.2.4p230 (2015-12-16 revision 53155) [x64-mingw32] $ node -v v5.10.1
また、Windows 版 git は改行コードを勝手に変換してしまうので、自動変換を無効化します。
$ git config --global core.autoCRLF false
Emacs
GUI 版の Emacs については flycheck の都合で libxml2 同梱のものが欲しかったため、https://github.com/chuntaro/NTEmacs64 の IME パッチ版を使用します。これはパッケージ管理から漏れますが諦めました…。
runemacs ショートカットに[作業フォルダー]を指定することで、起動直後の場所を自由に設定できます。
その他
- Ctrl と Caps Lock の入れ替えには MS 製ユーティリティの Ctrl2Cap を使っています。
- 全体的なキー割当カスタマイズには Keyhac が使い易かったです。
- 管理者権限でシェルを起動してくれる Sudo が地味に便利です。
以上です。簡単な Web 系開発であれば快適に作業できるようになりました!