milk_spoonのブログ

さじの情報科学的活動、考えたこと、その他を雑記するためのブログです。

作業メモ:msys2インストール、エクスプローラーから起動

動機:git (for Windows)を使うときに、cmdからはいいかげん操作し辛いと感じた。Git bashOK、と気づいたときにはすでにmsys2を入れていたので、将来的に色々使うことを考えて自然に使えるようになるまでセットアップ。

基本は以下を参考に、64bit版をインストール、起動、パッケージシステムpacmanのupdateなどを行った。

MSYS2で快適なターミナル生活 - Qiita

ただし2017年3月現在上記の記述と変わっているところも少しある

mingw64_shell.bat, mingw32_shell.batは廃止

minGWへのPATHが通った状態でmsys2を起動する用の個別のバッチファイル廃止、代わりにmsys2_shell.cmdにオプション-mingw32または-mingw64を使うことになった。
これらのbat, cmdの起動ファイルはパッケージfilesystemで提供されている(いた)。

> msys2_shell.cmd -mingw32
> msys2_shell.cmd -mingw64
pacmanの更新はupdate-core不要

MSYS2における正しいパッケージの更新方法 - Qiita
更新がなくなるまで以下のコマンドでupdate

$ pacman -Syuu

エクスプローラーのアドレスバーからmsys2を起動

普段はエクスプローラーでファイルを見ながら必要なときにアドレスバーからcmdを起動して使う。cdが面倒くさいのかもしれない…
そんなノリでmsys2を素早く起動したい。加えて要件は以下の2つ。

やり方

1. msys2のインストールフォルダにPATHを通す
2.インストールフォルダのmsys2.iniを開くと以下のようになっているので

#MSYS=winsymlinks:nativestrict
#MSYS=error_start:mingw64/bin/qtcreator.exe|-debug|<process-id>
#CHERE_INVOKING=1
#MSYS2_PATH_TYPE=inherit
MSYSTEM=MSYS

CHERE_INVOKING=1, MSYS2_PATH_TYPE=inheritの行のコメントアウトを外す

#MSYS=winsymlinks:nativestrict
#MSYS=error_start:mingw64/bin/qtcreator.exe|-debug|<process-id>
CHERE_INVOKING=1
MSYS2_PATH_TYPE=inherit
MSYSTEM=MSYS

3.エクスプローラーでアドレスバーに"msys2"と入力すると、要件通りの動作でmsys2が起動する

説明

msys2のランチャーはmsys2_shell.cmd以外にも複数の形式で提供されている。
Launchers · msys2/msys2 Wiki · GitHub
右クリックから開くためのレジストリ設定等もある。
この中で、msys2-launcherパッケージで提供されているものはexe形式、これを使用する。
ちなみに特にpacmanで改めてインストールしなくてもmsys2インストール完了時点で既に入っていた。

このmsys2-launcherパッケージのランチャーexeは起動するときに設定として.iniファイルを読み込む。
msys2.exeが読み込むmsys2.ini内のオプションの中で、カレントディレクトリを引き継ぐCHERE_INVOKING=1、PATHを引き継ぐMSYS2_PATH_TYPE=inheritを有効にすると、msys2が要件を満たすように起動する。
エクスプローラーのアドレスバーへの入力については、正確な仕様は知らないが概ねcmd上でのコマンド実行と同様なので、msys2.exe(インストールディレクトリ)へのPATHを通せばmsys2(.exe)の入力だけで起動できる。
今回はデフォルトのmsys2.exeを使用したが、minGWへのPATHを通すランチャーのmingw32.exe, mingw64.exeも同様。
iniファイルもそれぞれ分かれていてmingw32.ini, mingw64.iniとなっているので注意。

その他

最終的には簡単なことだったけど、msys2_shell.cmdだけしかランチャーを知らない時はショートカットを作ってPATH通して起動しようとしてたり(なんでそんな遠回りをしたのか…)
でもmsys2_shell.cmdをrenameするのはパッケージのupdateとかで整合性がとれなくなるのイヤなのでこれが一番簡単かも…?