windowsの端末ソフト・UNIXライクな環境とパッケージ管理ソフトについて

# WindowsでUn*xライクな環境を使いたい。

以前からCygwin、MsysDTK+Mingw、Gnupackと使ってきましたが、
Windows10プリインストールのPCを購入したのを気に、環境を一新しようと考えました。
迷走し始めたので整理するためにもメモします。（リンクの張り替えや体裁はぼちぼちあとで整えます。）


## 導入するプロダクトとバンドルされている機能や製品群の表
端末ソフト主体のものやUn*x環境を主目的にしたものなど、同じレイヤーに限らず
セットアップ途上の組み合わせのメインになりそうなものを記載してみています。


プロダクト|主体となるソフト|端末ソフト|シェル|パッケージ管理|Unix系コマンド|クライアントソフトなど|
---|---|---|---|---|---|---|---|---|---|---|---|---|---
[git for windows](#git-for-windows)|git|mintty|bash|?|msys2のfork|sshやscpなど|
[msys2](#msys2)|Un*x的な環境|mintty|bash|pacman|msys2(cygwinから派生)|sshやscpなど|
[cygwin](#cygwin)|Un*x的な環境|mintty|bash|apt-cyg|cygwin(GNUのパッケージをWindows向けに)|sshやscpなど|
[cmder](#cmder)|端末ソフト|cmder|clink他|?|msys2由来(git for windowsを含むため)|sshやscpなど|
[MobaXterm](#MobaXterm)|端末ソフト|mobaxterm|busybox|MobApt|busybox,cygwin|sshやscp、Xサーバ、FTP,moshクライアントなど多数|
[chocolatey](#chocolatey)|パッケージマネージャ|cmderなどをインストール可能|-|chocolatey|gow,cygwinなどインストール可能|sshやscpなど|
[Scoop](#scoop)|パッケージマネージャ|cmderなどをインストール可能|-|scoop|gow,cygwinなどインストール可能|sshやscpなど|
[Babun](#babun)|Un*x的な環境|mintty|zshやbash|pact|gow,cygwinなどインストール可能|sshやscpなど|
[BashOnWindows](#bashonwindows)|Windows Subsystem for LinuxとUbuntu環境|要確認|bash|apt|ubuntuそのもののコマンドやライブラリをAPI変換で実行|本来の目的かわからないが結構なんでも|

## 現状
現状は、今後どうするか迷走してこの記事に記載しています。
2016年8月3日現在、[BashOnWindows](#bashonwindows)を試用してみたいと思っているところです。
※おすすめのコメントや編集リクエスト歓迎します。


[現状の更新及び個人的な進捗] (#現状の更新及び個人的な進捗)は末尾に移動します。


---


## 個別の感想
### [git for windows](https://git-for-windows.github.io/)
gitを使わないときに現在のリポジトリの表示のためだけにgitが起動して引っかかったりパッケージ管理が気になったので使わなくなった。少し手直しして、MinGWと組み合わせれば有望かも。

**参考になる記事**

* [Windows、基本Git bashでやるのが幸せな気がしてきた](http://qiita.com/uedatakeshi/items/00f18bbb2a8967f73de5)
* [Git for Windows で日本語を使いたい] (http://qiita.com/kumazo@github/items/2169e1ee7be278f82b94)


---

### [msys2] (https://msys2.github.io)
> MSYS2 is an independent rewrite of MSYS, based on modern Cygwin (POSIX compatibility layer) and MinGW-w64 with the aim of better interoperability with native Windows software.

後述のcygwinの派生形。プロセスなどのエミュレーション部分を少なくしてミニマルな構成。
mingwのお供として開発されたような記憶がある。

**参考になる記事**

* [kashiの日記 MSYS2を試してみる] (http://verifiedby.me/adiary/055)

---

### [cygwin] (https://www.cygwin.com/)
> a large collection of GNU and Open Source tools which provide functionality similar to a Linux distribution on Windows.

なんどか試したことが有ったのだけれど、パフォーマンスがきついのとWindows環境との
親和性が少なめなことから、敬遠しがち。BabunやGnupack経由で導入することも検討。
apt-cygで更新をするのですが、ただいまお家騒動？中のようです。
個人的にはこういうお家騒動があってもパッケージングされている元のソフトウェアが
オープンソースなんで、そのうち何とかなるのではと、楽観的に考えています。
でも実際とりあえず、生Cygwinを避ける程度のインパクトはありました。

***apt-cygお家騒動？関連***
[apt-cygのGitHubレポジトリが閉鎖されてる](http://rcmdnk.github.io/blog/2016/02/01/computer-windows-cygwin/)
[apt-cygを奪い去ろうとしたsageをMITライセンス違反だとして元に戻そうとしてるレポジトリがあった](http://rcmdnk.github.io/blog/2016/02/16/computer-windows-cygwin/)


**参考になる記事** 

* [最高のWindowsコマンドライン環境を求めて] (http://blog.roundrop.jp/show/34)
* [Cygwinのターミナルエミュレータminttyの導入] (http://qiita.com/d9magai@github/items/b988f4c881cfa1261512)
* [綺麗なUIで、UNIXライクなCygwinの使い方](http://commte.net/blog/archives/5446)



---

### [cmder] (http://cmder.net/)
> cmder is software package that provides great console experience even on Windows.

ConEmu（Terminal）にClink（シェル）、やgit for windowsなどをいろいろ組み合わせたソフト。msysやgit for windowsの単独インストール済みであれば検知して簡単にシェルのリストに追加できる。プレーンぽいbashきちんと動くように設定できなかった。

**参考になる記事** 

* [Windowsのターミナル環境にCmderを使う　～Nyagosとmsys2を添えて～)] (http://zenito9970.hatenablog.com/entry/2015/06/19/163701)

---

### [MobaXterm] (http://mobaxterm.mobatek.net/)
> Enhanced terminal for Windows with X11 server, tabbed SSH client, network tools and much more


Xサーバやmoshクライアントや、SFTPやRDPのセッション管理など高機能。
パッケージマネージャとUn*x系コマンドも実装されているけれど、パッと見日本語の
インライン入力が苦手っぽい。

**参考になる記事** 

* [MobaXterm を ssh/mosh/X11 クライアントとして使う（Windows）] (http://qiita.com/mkasahara/items/c029154b5436913b20e0)
* [MobaXterm: Windowsでのcygwinに代わるターミナル環境] (http://rcmdnk.github.io/blog/2015/01/24/computer-windows-remote/)

---


### [chocolatey] (https://chocolatey.org/)
>Chocolatey NuGet is a Machine Package Manager, somewhat like apt-get, but built with Windows in mind.


本来パッケージマネージャなので同列に語るべきではないと思うけれど、
これで必要なパッケージをほとんど賄っている人もいるので気になってます。

---

### [Scoop] (http://scoop.sh/)
>Cmder is a software package created out of pure frustration over the absence of nice console emulators on Windows.

これもパッケージマネージャ。chocolateyと比べるとインストール先がちらばらずに、バージョンアップも速い傾向があるみたい。結構シンプル


**参考になる記事** 

* [Windows用のコマンドラインインストーラScoop](http://qiita.com/iakio/items/78e7f098047ea0a47d70)
* [WindowsパッケージマネージャーScoopでEmacsを使う] (http://qiita.com/ironsand/items/eb500ec64d212dda2881)
* [scoopなるパッケージ管理ソフトがあったので使ってみた。] (http://junyaonishi.github.io/package_manager/2015/04/21/What-is-scoop.html)

---

### [Babun] (http://babun.github.io/) 
> a windows shell you will love

GnupackのようなCygwinをリパッケージしたもの。
結構Linuxチックに動くように見えて気になっているところです。

**参考になる記事** 

* [Windowsはターミナルがダメだから使えないってのは過去の話?](http://blog.drikin.com/2015/01/windows-2.html)
* [Cygwin(babun)で、ansible&node&javaの開発環境構築] (http://qiita.com/kmry2045/items/b160c94b8cd8972261ce)

---

### [BashOnWindows] (https://github.com/Microsoft/BashOnWindows)
>  Bash on Ubuntu on Windows.

2016年8月2日のアップデートで一般向けにも実装された。
Windows10用のSubSystem。Interix～Services for UNIXの系譜としてLinuxAPIに見せかける層やELFローダ等組み合わせ、LinuxサブシステムUbuntuのユーザランドをくっつけたもの。
実際には、以前から言及しているものの代わりにはならないケースも多いとおもう。
（Windows10必須なことや純正だけれど、Windowsとの相互運用性が低いことなど。）
個人的には、だいぶ期待してます。

**参考になる記事** 

* [Bash on Ubuntu on Windowsで日本語ターミナル環境を快適に使う] (http://qiita.com/tags/BashOnUbuntuOnWindows)
* [qiitaのBashOnUbuntuOnWindowsタグ] (http://qiita.com/tags/BashOnUbuntuOnWindows)


---


**総合的な参考になる記事**
※2016/03/08 コメントを追記し始めました。
上記のソリューション他を組み合わせてどう利用されているのかや
試行錯誤やバリエーションを記載されている記事です。
私自身もこの方々のどれかを元に構築しようかと思いましたが、
結局、なんらか自分好みの状況にならない感じがして迷走しています。

* [Windowsで使えるターミナルとシェルのまとめ] (http://qiita.com/Ted-HM/items/9a60f6fcf74bbd79a904)
すごくよくまとめられていて、ターミナルとシェルの話題であれば、
私の[この記事](#WindowsでUn*xライクな環境を使いたい。)は不要だと思います。
自分の記事の場合、[Scoop](#scoop)か[chocolatey](#chocolatey)をベースにする可能性や[Babun](#babun)なども検討している過程のメモと紹介の意味もあったのですが、最近、更新されたタイミングで[Windowsで使えるターミナルとシェルのまとめ] (http://qiita.com/Ted-HM/items/9a60f6fcf74bbd79a904)を見返してみると、すごくためになります。
内容を知りたい方は、このまとめを見ていただく方が良いかと。
最終的にはこのまとめでは、MSYS2 + ConEmu （+Mingw）という感じで仕上げる例を最後に挙げられています。
CocotやWinptyの話題や各プロダクトの印象など包括的にケアされています。


* [gnupack(Cygwin) + oh-my-zsh + tmuxの環境を構築する] (http://yuukiar.co/blog/2015/05/28/setup-zsh-tmux-on-cygwin-gnupack/)
私も職場で使っているcygwin gnupackをベースにzshとtmuxを調整されている記事です。Shellにzshとターミナルマルチプレクサにtmuxを利用する前提で、ConEmu⇒MobaXterm⇒Babun⇒cygwin純正⇒gnupackといろいろ試された経緯も記載されています。フォント、カラースキーム、tmux、zshを設定していく手順も記載されています。
この方が言われている、
`ベストな環境とは思わないのですが、まぁ妥協できる環境かなというところで落ち着いてます。 まぁ…最近いろいろ調べてみて、Windowsでベストなターミナル環境は相当難しいと思っていて、 逆の考え方で、ここまで実現できるのであれば十分だろうという結論に至ってます。`
というのはよく理解できますし、私も自分が納得できる環境が無いかと思っているところです。

* [Windowsでかっくいいターミナルが使いたい！](http://qiita.com/blackawa/items/5c8ae06220b94a6ecfec)
ConEmu⇒Babunと試されています。文字化け対策でCocotや、フォントやエイリアスの話題もあります。



## 現状の更新及び個人的な進捗
vimとsshクライアントとちょっとbashでスクリプトが組めて、mingwでコンパイルなどできて、WindowsのPython環境を使えればあとは、仮想マシンで小さなLinux環境を持つつもりで始めました。

cmder fullを試してみた結果、メニュー等がやたら高機能だったり、軽めで満足いくshellを設定しきらず（自分の問題ですね）別のものを試したくなりました。
そしてgit for windwosを試すけれど、これはcmder full同様パッケージマネージャが見当たらなかったため、別のものを試そうと思い、
今現在MobaXtermの見た目を抑え気味にして試してみたところです。日本語がきちんとできれば有望かも。
msys2とcygwinはリパッケージしたようなものがいくつかあるのでそちらを先に試そうと思っています。

### 現状の追記

～記事記入時点
Gnupackが少し気になる（自分の直感と異なる）ところがあるものの結構よく使えていたので、babunが（別の選択肢として）気になっています。

###追記～2016年3月初旬までの進捗
その後、Windows10のPC（2in1的なタブレット）のWindows回復ドライブと
イメージバックアップを2式作るために一旦全てアンインストールしました。
イメージ化が済んだ後に、[Scoop](#scoop)を導入、[Scoop](#scoop)＋[msys2](#msys2)で管理することを
考えていたところですが、[Scoop](#scoop)自身をUpdateする際に[git for windows](#git-for-windows)が入って、そこに[msys2](#msys2)ベースのコマンドやminttyが入っているので
いろいろ足りないけれど、ここにMingwと、Windows版のPythonを入れるか迷っているところです。
Mingwを[Scoop](#scoop)経由で入れるのか迷っています。直接入れた方がよいのかとか。あと、[git for windows](#git-for-windows)にはSDKがあり、それを入れると[msys2](#msys2)のパッケージが追加されるっぽい。

実際のところこのPCは趣味の開発PCだったはずのものですが、最近はクラウド側に環境を持つ方が良いのではないかとも思い、ますます微妙な感じです。
少し別の話題ですが、[Google Cloud Shell](https://cloud.google.com/shell/docs/)と、IDCFクラウド、CONOHA VPSを試してみています。まとめ記事的には、エディタ（vim/emacs）を中心とした環境作りをつけるか考えています。

###追記～2016年6月末までの進捗
[Scoop](#scoop)経由で、[git for windows](#git-for-windows)を入れた状態のまま。です。
[BashOnWindows](#bashonwindows)待ちともいえます。同様に以前からあるもう一台は、Gnupack（Cygwin)のままです。本題とそれますが、開発環境としては、VagrantからローカルのVirtualboxやConohaを使うときだけ起動しているほか、IDCFクラウドも常用しています。
MobaXterm、cmderは少し試用してみましたがデフォルトで私の直観との差が少し大きいので当面他のものを利用してみようと考えています。