|
本サイトは移転しました。旧アドレスからのリダイレクトは2025年03月31日(月)まで有効です。
|
🛈 | ✖ |
MSYS2はウィンドウズで稼働するPOSIX互換システムである。
ウィキペディアには現時点でMSYS2の項目が無い。
MSYS2は通常のウィンドウズアプリケーションとしてインストールされるが、インストール後はPOSIX互換システムを提供しウィンドウズと共存する。MSYS2は両者の差異を良く吸収するが、注意を怠ると一方あるいは両方の運用を損なう。ウィンドウズとPOSIXは用語定義も微妙に異なり、それぞれのドキュメント参照も慎重に行う必要がある。
MSYS2はインストールディレクトリ(C:\msys64)をルート(/)とするPOSIX互換システムに加え、サブディレクトリに以下のサブシステムを導入する。
mingw32/mingw64にはそれぞれ32ビット/64ビットのウィンドウズネイティブツールが導入される。これらサブシステムを本サイトはPOSIXサブシステムと総称するが、厳密にはPOSIX互換でない可能性がある。なおルートディレクトリのPOSIX互換システムはmsys2サブシステムへの何らかのリンクにより実現されていると推測される。
MSYS2はウィンドウズアプリケーションとしてインストールされたディレクトリをルートとして、POSIX互換システムに以下のファイルシステムを作成する。
POSIXパス | 内容 |
---|---|
/bin, /dev, /home, /opt, /proc, /tmp, /var, /etc | POSIX要件/慣用 |
/usr | msys2サブシステム |
/mingw32 | mingw32サブシステム |
/mingw64 | mingw64サブシステム |
/c, /d, ... | ドライブマウントポイント |
これらの一部はウィンドウズ環境からも参照できる。各POSIXサブシステムは以下のようにウィンドウズ環境から利用される。
ウィンドウズパス | 内容 |
---|---|
C:\msys64\usr | msys2サブシステム |
C:\msys64\mingw32 | mingw32サブシステム |
C:\msys64\mingw64 | mingw64サブシステム |
各POSIXサブシステムはウィンドウズからもアクセスできるサブディレクトリを持つ。本サイトは以下を使用する。
相対パス | 内容(ファイル) |
---|---|
bin | コマンドラインツール(*.exe), ダイナミックリンクライブラリ(*.dll) |
include | C++/C言語で使うインクルードファイル(*.h) |
lib | ライブラリ(*.a) |
各POSIXサブシステムは以下にまとめるが、主要な違いはコマンドサーチパスにある。コマンドサーチパスは他に/usr/local/bin、/bin、/opt/binなどを含むが、理解の単純化のため省略した。
サブシステム | コマンドラインツール | 本サイトでの利用目的 | 主なコマンドサーチパス |
---|---|---|---|
msys2 | msys-2.0.dll依存 | パッケージインストール | /usr/bin |
[ウィンドウズシステム] | |||
mingw32 | 32ビットウィンドウズネイティブ | 32ビットアプリケーション作成 | /mingw32/bin |
/usr/bin | |||
[ウィンドウズシステム] | |||
mingw64 | 64ビットウィンドウズネイティブ | 64ビットアプリケーション作成 | /mingw64/bin |
/usr/bin | |||
[ウィンドウズシステム] |
/usr/binディレクトリ内のmsys2サブシステムに属するコマンドラインツールは同ディレクトリのダイナミックリンクライブラリ(DLL)msys-2.0.dllに依存する。msys2サブシステムのコンパイラが作成するアプリケーションもmsys-2.0.dllに依存する。msys-2.0.dllがPOSIX互換システムとウィンドウズを仲立ちするレイヤーと見なされる。
/mingw32/binディレクトリ内のmingw32サブシステムに属するコマンドラインツール、および/mingw64/binディレクトリ内のmingw64サブシステムに属するコマンドラインツールは、msys-2.0.dllに依存しないという意味でウィンドウズネイティブと見なされる。mingw32およびmingw64サブシステムのコンパイラが作成するアプリケーションもウィンドウズネイティブとなる。mingw32およびmingw64サブシステムはコマンドサーチパスの下位に/usr/binを含み、自らに無いコマンド(および自らに無いDLL)はmsys2サブシステムを探索する。
POSIXサブシステムはターミナルにmintty、シェルにbashを標準とし、それぞれPOSIX互換ターミナル、POSIX互換シェルとして参照する。ターミナルを起動サブシステムで区別する場合はmsys2ターミナル、mingw32ターミナル、mingw64ターミナルとして参照する。
ウィンドウズから各POSIXサブシステムを起動するには、以下のいずれかのランチャーによる。
サブシステム | コマンドスクリプト | 実行形式 |
---|---|---|
msys2 | C:\msys64\msys2_shell.cmd -msys | C:\msys64\msys2.exe |
mingw32 | C:\msys64\msys2_shell.cmd -mingw32 | C:\msys64\mingw32.exe |
mingw64 | C:\msys64\msys2_shell.cmd -mingw64 | C:\msys64\mingw64.exe |
MSYS2のインストールでコマンドスクリプトのショートカットがウィンドウズスタートメニューに追加される。コマンドスクリプトによるランチャーはエクスプローラから起動するとウィンドウズのコマンドプロンプトが一瞬表示され、またタスクバーへピン留めができない。いずれのランチャーもウィンドウズ上にPOSIX互換ターミナルを起動し、それぞれの定めるコマンドサーチパスの下にPOSIX互換シェルのコマンドプロンプト(コマンド受け入れ準備を示す文字列)を表示する。このようにしてPOSIXサブシステム環境を実現するが、各POSIXサブシステム環境は他のPOSIXサブシステム環境およびウィンドウズ環境と基本的には干渉しない。
POSIXサブシステム環境からウィンドウズアプリケーションを実行できる。コマンドサーチパスにウィンドウズシステムを含むのでウィンドウズのシステムツールは(POSIXサブシステムのそれと名前が重複しない限り)名前だけで実行できる。ただし以下の留意が必要となる。
本サイトはmsys2サブシステムをコマンドラインツールpacmanによるパッケージインストール目的で使用する。mingw32サブシステムおよびmingw64サブシステムでもpacmanは利用可能と思われるが、MSYS2ホームページはmsys2サブシステムでの運用を推奨し本サイトはそれに倣う。本サイトはmsys2サブシステムでのアプリケーション開発は行わないので、そのコンパイラは導入しない。一方mingw32サブシステムおよびmingw64サブシステムでウィンドウズネイティブなアプリケーション開発を行うため、それぞれのコンパイラを導入する。
POSIXサブシステムコマンドラインツールは、POSIX互換ターミナル依存のフルスクリーンエディタなどを例外として、通常のウィンドウズアプリケーションとしてウィンドウズから起動できる。msys2サブシステムのmsys-2.0.dllに限らず、各サブシステムのコマンドラインツールは同ディレクトリ(binディレクトリ)内のDLLに依存することが多い。mingw32サブシステムとmingw64サブシステムはそれぞれ同一名称のDLLを持つが、ウィンドウズ環境のDLL探索順トップは必ずアプリケーションディレクトリなので多くの場合に問題は発生しない。しかし以下のような懸念が残る。
ウィンドウズアプリケーションはアーキテクチャの異なるDLLのロードをスキップするため、コマンドサーチパスに必要なディレクトリを加えることで最初の二つは解決できるかもしれないが、カスタムMSYS2との共存に予測の難しい問題を引き起こす可能性がある。従ってアプリケーション開発はmingw32/mingw64ターミナル上のPOSIXサブシステム環境が最も安全と言えるが、それではコマンドラインベースの開発に限定される。本サイトは統合開発環境を導入し、その中でコンパイラを含むPOSIXサブシステムコマンドラインツールを利用する。統合開発環境はウィンドウズ環境のアプリケーションなので先の懸念を引き継ぐが、統合開発環境の機能活用で解決し安定した運用を目指すのが本サイトの大きなテーマの一つとなる。
ランチャー起動時にシェルへ渡すコマンドを指定すれば、ウィンドウズからPOSIXサブシステム環境の下にコマンドラインツールやスクリプトを(見かけ上)直接実行できる。スクリプトやPOSIX互換ターミナルに依存するコマンドラインツールを(見かけ上)直接実行するにはこれによるしかない。以下は例として、ウィンドウズから64ビット版Pythonのスクリプトidle3を実行する。