会社のPCを入れ替えることになり、Windows上のunixツール環境、今度はどうしようかと考えた。 今まではCygwin使いだったが、apt-cygの動向があるのと、QiitaなどでMSYS2の記事が増えてるので、MSYS2に乗り換えてみようか、とも思う。 実は一度新PCにMSYS2とCygwinを入れてみたのだが、MSYS2はそもそもスタートアップメニューのショートカットがMSYS2とMinGW64/32で分かれてるのがそもそも理解不能だったし、Cygwinのsetup-x86_64.exeの使い勝手も相変わらず悪かった。 とはいえ、apt-cygが一向に公式に取り入れられないなどCygwinに頼り切るのはどうもなぁ・・・という感じ。 apt-cygのゴタゴタ参考: - Cygwinのapt-cyg開発者が完全に開発終了を宣言 -- https://rcmdnk.com/blog/2017/01/31/computer-windows-cygwin/ - Future of apt-cyg -- https://github.com/transcode-open/apt-cyg/issues/74 - → 2017-10現在のデファクトはこちら: -- https://github.com/kou1okada/apt-cyg - 公式には言及すら無いし・・・。 -- https://cygwin.com/install.html - StackOverflowでも結局apt-cygに。 -- https://stackoverflow.com/questions/9751845/apt-get-for-cygwin -- https://stackoverflow.com/questions/9260014/how-do-i-install-cygwin-components-from-the-command-line で、MSYS2だがいまいちMinGW64との違いや関係が理解できない。 これ読んでもまだピンとこない。 - 2. MSYS2 - とりあえず雑記帳 -- https://sites.google.com/site/toriaezuzakki/msys2 一応MSYS2のHistoryも読んでみたが・・・。 - https://github.com/msys2/msys2/wiki/History やっぱり分からん。つーか、やっぱり何でスタートメニューのショートカットでMSYS2/MinGW64/32で分かれるんや。 ぐぐってたら以下のQAを見つけて、これでようやく腑に落ちた。 - MSYS2 / Discussion / General Discussion:MSYS2 Shell or MinGW-w64 Shell -- https://sourceforge.net/p/msys2/discussion/general/thread/dcf8f4d3/ つまりこういうことかな? - MSYS2とMinGW64の最大の違いは、POSIXエミュレーションを介しているか否か。 - MSYS2は実はCygwinをupstreamとしたforkで、POSIXエミュレーションとして msys-2.0.dll を使い、パスを変換したりしている。 -- つまり、MSYS2のexeはMSYS2用のDLLやPATH環境じゃないと使えないし、Windowsのファイルパスは扱えない。 - 一方で MinGW64 はPOSIXエミュレーションは使っておらず、GNUのツールをそのままWindowsに移植したもの。そのためWindowsのファイルパスをそのまま扱える。 -- つまり MinGW64のexeは単体でWindowsアプリとして実行可能となっている。コマンドプロンプト(cmd.exe)からも利用可能。 - 以下に、pacmanなどではMSYS2を使えとか書いてあるのは、要はMSYS2/MinGW64のパッケージ管理をMSYS2側のpacmanで行えるように統合しているため。 -- https://github.com/msys2/msys2/wiki/MSYS2-introduction - スタートメニューからのMinGW64/32のシェルメニューでは、/mingw64, /mingw32 の bin ディレクトリをPATHの先頭に置いて、次に(MSYS2の)/usr/bin を置いている。 -- つまり、gccなどを MinGW64/32 のコマンドを優先して使うように調整している。 自分の中で整理(間違ってるかも): - MSYS2がPOSIXエミュレーションを使った一般的なunixのCUI環境を整えて、その上でMinGW64が動いて、OSSをWindowsに移植する作業環境として使う、みたいなのを想定している。 - MSYS2自身にもgccはあるけど、それはWindowsネイティブexeをビルドするものではなく、あくまでもPOSIXエミュレーションを行う = MSYS2でしか動かないツールをビルドするのにしか使えない。 - よって、MSYS2が提供するスタートメニューのショートカットのシェルは、以下のように使い分ける。 -- MSYS2 : MSYS2のツールしか使わない(=Cygwinのfork)用途であればこれで問題ない。 -- MinGW64/32 : Windowsネイティブexeを開発したい場合にはこちらを使う。あるいは MinGW64 側にしかパッケージがないコマンドを使いたい場合もこちら。 この辺、MSYS2のintroductionにもはっきり書かれてないので、分かりづらかった。(表現に注意すれば、書かれていなくはないのだが、ストレートに読み取り辛い・・・) - https://github.com/msys2/msys2/wiki/MSYS2-introduction 結局MSYS2はCygwinのupstreamを追いかけるforkということは確かで、それならパッケージの種類は問題ないよね・・・と思いきや、上記Wikiでも "msys2 subsystem is pretty small" とある通り、パッケージ一覧を見ても本当に必要最低限のunixツールセット、という感じ。 - https://github.com/msys2/msys2/wiki/Packages むしろ "mingw-w64-" prefixの方がパッケージが充実してる・・・。 が、結局はCygwinのサブセットなので、Cygwin側のパッケージ数には劣る。 - https://cygwin.com/packages/package_list.html とはいえとはいえ、MSYS2側の調整でファイルパスの "/cygwin" prefixが省略できたり、マウントにnoaclがデフォルトとなるのは多少楽、ではあるが・・・。 うーん、開発に使いたいわけではなく、便利なunixのCUIツールをWindowsで使いたいだけなので、正直MSYS2/MinGW64の住み分けの考え方は余分なんだよなぁ・・・。 パッケージ数としてもCygwin本家の方が圧倒的なので、結局 Cygwin + apt-cyg の方が良いのではなかろうか・・・。 正直、なんでQiitaでみんなしてMSYS2使ってるのか分からん・・・。