MSYS2とは

コンピュータ

Msys2はWindows上で動作する、UNIXライクな開発環境とパッケージ管理システムをまとめた“開発者向けツールセット”です。

具体的には

  1. GCC が使える
  2. bash が使える
  3. pacman で Linux っぽくパッケージ管理できる
  4. MinGW で Windows ネイティブの実行ファイルをビルドできる

Msys2で扱えるパッケージは開発系が多く主な例(言語)として、

  1. GCC(C++,C)
  2. Clang(C++)
  3. Python
  4. Ruby
  5. Perl
  6. Rust
  7. Go
  8. Java
  9. Node.js

などがインストール出来ます。主要な言語や人気のある言語が概ねそろっている感じです。

有名ライブラリ(OpenCV,Qt6など)、開発のためのツール類(cmake,git,Makeなど)もそろっています。

一見するとaptなどのパッケージシステムにいていますが、開発系に特化している点と、CUIで実行するタイプのソフトウェアが多い感じです。

Windowsではscoopなどのパッケージ管理システムがあり、言語系など同じパッケージを扱いもありますが、各種パッケージを連携して使う場合、開発系はMsys2のパッケージを使うと良さそうです。逆に開発系以外のアプリはscoopでインストール感じに分けると競合がしにくいと思います。

Msys2内で複数のシェル(環境)があり、主に使うのが以下の二つになります。

  1. MinGW64
  2. UCRT64

どちらもWindowsネイティブの EXE / DLL を作るための開発環境ですが、使っている C ランタイム(CRT) が異なるとのこと。

旧来から使われているのがMinGW64で、現行はUCRT64とのこと。

新規開発を行う場合はUCRT64を選択すると良さそうです。

Windows と Linux ではバイナリ形式や ABI が異なるため、
同じ実行ファイルを共有することはできません。

しかし、ソースコードそのものが共通であれば、
各プラットフォーム向けに専用のバイナリを出力することは可能です。
これにより、Linux が長年育んできた大量の OSS ライブラリを、
Windows 向けアプリ開発にそのまま活用できます。

MSYS2 や MinGW は、その“橋渡し役”として、
Linux 的な開発ツールで Windows 向けネイティブ DLL を作ることを可能にしています。

また、Linux の OSS ライブラリを Windows 向けに再ビルドできるだけでなく、
MSYS2 や MinGW は Windows 独自の API(Win32, COM, DirectX)を
GCC/Clang から直接扱うこともできます。

その結果、
「Linux の強力な OSS 資産 × Windows のシステム API」
を同時に使えるようになり、
Windows 開発環境は大きく柔軟性を獲得しています。
OSS でも Windows ネイティブアプリを構築できるという点で、
MSYS2 は非常にユニークな存在だと言えます。

Windows だけをターゲットにするなら、MSVC を使うのが最適です。
Windows API・COM・DirectX・.NET といった Microsoft 技術との親和性が最も高く、
パフォーマンスと互換性の点でも最良の選択肢です。

Linux をターゲットにするなら、WSL2 を使うのが最も合理的です。
ネイティブ Linux と同等の挙動が得られ、Docker や GPU 対応も可能で、
「Linux 開発を Windows 上で行う」なら事実上の標準環境と言えます。

クロスプラットフォーム OSS の Windows 版は、
MSYS2(MinGW64)でビルドされているケースが非常に多く、
Linux のビルド情報がそのまま参考になる場面が多いです。
そのため、Windows でネイティブバイナリをビルドする開発を行う場合は、
MSYS2 を使って環境構築をするのも有力な選択肢です。

スクリプト言語中心だった自分ですが、
C++ のリベンジや Go / Rust への興味から、
あらためて“コンパイラ型言語”に向き合ってみたくなりました。

C++ はコンパイラの種類が多く複雑ですが、
Windows で豊富な OSS ライブラリを扱える環境として
MSYS2(MinGW64) が非常に魅力的な選択肢に感じています。

コメント