msys2-tips

MSYS2 TIPS (japanese)

View on GitHub

MSYS2を使う

需要がない

※MSYS2の紹介のような記事であり、具体的なインストール方法などは載っていません。

MSYS2とは

https://www.msys2.org/

Windows上で動作するLinux ターミナル環境。
同様のプロジェクトで歴史のあるCygwinからフォークされたMSYSを、さらに大改良しMSYS2として現在も開発が進んでいるプロジェクト。

Cygwin/MSYS2の特徴

Cygwin/MSYS2の利点

Cygwin/MSYS2の欠点

MSYS2固有の利点(Cygwinとの比較)

MSYS2固有の欠点(Cygwinとの比較)

TeX Liveのインストール

※工事中

winpty, wincmd

※工事中

MSYS2でビルドする際のコツ

ログインシェルについて

いくつかの方法でデフォルトのBashから変更することもできる。シェル自体はpacmanで入手できる場合が多い。6
実際に筆者は2週間ほど7試験的にZshを使用しており、今のところ目立った不具合などもなく起動は若干早くなったような気がする。ただし.zshrcを若干書かないと使いにくいかも。
.zshrc記述例

一方、fish shellはZshと同様にpacmanでインストールできるものの、私の環境では不具合があったので導入を断念した。
Zshと比べて移行コストが大きいこともあり個人的にはそこまで突き詰めようと思わないが、勇気ある人はチャレンジするのもいいかもしれない。

外部ターミナルでのログイン

cmd.exeのコマンドライン内部でMSYS2にログインする例

C:\Users\user1> C:\msys64\msys2_shell.cmd -no-start -defterm -here
user1@DESKTOP-XXXXXXX:/c/Users/user1$

IDE/エディタの内臓ターミナルでもだいたい同様に行けるはず

外部GUIアプリの呼び出し

$ /c/PROGRA~1/path/to/app.exe arg1 arg2 &

のように実行すれば普通に実行できる。
ただし、/c/以下ではなくMSYS2内部のパスで実行するとアプリの拡大率がおかしくなる場合がある。
MSYS2(というかMintty)の設定が反映されてしまうらしい。

以下サクラエディタの例。8

user1@DESKTOP-XXXXXXX:~ $ /c/PROGRA~2/sakura/sakura.exe foo.txt &
# OK
user1@DESKTOP-XXXXXXX:~ $ ln -s /c/PROGRA~2/sakura/sakura.exe sakura
user1@DESKTOP-XXXXXXX:~ $ ./sakura foo.txt &
# NG
user1@DESKTOP-XXXXXXX:~ $ unlink sakura
user1@DESKTOP-XXXXXXX:~ $ cd /usr/bin
user1@DESKTOP-XXXXXXX:/usr/bin $ ln -s /c/PROGRA~2/sakura/sakura.exe sakura
user1@DESKTOP-XXXXXXX:/usr/bin $ cd ~
user1@DESKTOP-XXXXXXX:~ $ sakura foo.txt &
# NG 

どうしても$PATHからコマンドで呼び出したい場合、以下のようなシェルスクリプトを設定したい$PATH内の適当なディレクトリ9に置く。
または.bashrcにaliasとして設定する。

#!/bin/sh
/c/PROGRA~2/sakura/sakura.exe ${*} & 
# filename : sakura (command name)

結論

おとなしくWSLを使った方がいい。

以上のいずれか一つでも当てはまる人は使う価値があると思います。
突き詰めるとArch入れた方が速いとか言わない。

お問い合わせ

本記事で不明な点があったら著者のCLKに聞いてください。
運良く知っていれば答えられます。
また内容が間違ってたらご指摘頂けるとありがたいです。

それでは、良い開発 on Windowsライフを。

Tweet


  1. MSYS2内部からは(例えば)Cドライブが/c/にマウントされてるように見える。何故かルートディレクトリでlsしても見えないが、この辺の詳細はCygwinと仕様が異なるらしい。 

  2. ただし実行時にUnix共有ライブラリ群(libfoo.so)をラップしたDLL群(libfoo*.dll)を読み込む必要がある。 

  3. 私自身使用したことがないので原理はわからないが、VSCodeではWSL内のコンパイラを問題なく呼び出せるらしい。Atomでもbatをゴリゴリ書けば一応できるはずなのだが筆者は断念した。 

  4. コンパイル後のWin向けバイナリはMSYS2よりも速かったりするらしいが、システムコールでバグったりするので基本的に使うべきでない。 

  5. MSYS2に限らないが、ライブラリのビルトに必要なライブラリをビルドするのはマジで地獄なので極力避けた方が良い。 

  6. pacmanで提供されてるだけでも、本文で挙げた以外にDash,tcsh,ksh(mksh)などを確認できる。 

  7. この版の執筆時点(2020/05/01)を基準として。 

  8. PROGRA˜2は"Program Files (x86)"のMS-DOS互換パス名。これ自体はWindowsの元々の機能。同様に先述のPROGRA˜1は"Program Files"を指す。 

  9. 筆者は/usr/local/binにしている。