Windows で zsh と開発環境を整備

最近 Surface Pro 4 を購入した勢いで Windows のシェル環境整備し一新したまとめ。Surface Pro 4 よいです。

この記事は 2016/05現在プレビュー版である bash on Ubuntu on Windowns とは無関係です。そちらは正式版が出たら試したいと思います。

bash on Ubuntu on Windows が来るならそれでシェル環境間に合うかなとも思ったんですが、仕組み上 Linux サブシステム側から Windwos アプリを立ちあげられるようにはならなそうなので、それはそれ、これはこれという感じで。

やりたいこと

  • アプリのパッケージ管理したい
  • zsh 使いたい
  • putty ではなく普通の ssh がほしい
  • git
  • Ruby 少々
  • node 少々
  • NTEmacs 使いたい

普段の仕事では 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 screenshot

これで ConEmu + zsh が起動するようになると思います。

f:id:Zarari:20160504113020p:plain

HOME 環境変数を設定する

シェル内や後述の Emacs の動作を Unix 系に近づけるため、環境変数 HOME を設定します。

C:\Users\username あたりが HOME になってほしいので、%USERPROFILE% をそのまま設定で ok です。

ちなみに、PowerShellenv のように環境変数を一覧したい場合は 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/configeval `ssh-agent` も問題ありません。

Git, Ruby, Node

Git, Ruby, Node は chocolatey で入れます。

PC > choco install git ruby nodejs

RubyC:\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/NTEmacs64IME パッチ版を使用します。これはパッケージ管理から漏れますが諦めました…。

runemacs ショートカットに[作業フォルダー]を指定することで、起動直後の場所を自由に設定できます。

f:id:Zarari:20160504164737p:plain

その他

  • Ctrl と Caps Lock の入れ替えには MS 製ユーティリティの Ctrl2Cap を使っています。
  • 全体的なキー割当カスタマイズには Keyhac が使い易かったです。
  • 管理者権限でシェルを起動してくれる Sudo が地味に便利です。

以上です。簡単な Web 系開発であれば快適に作業できるようになりました!