こんにちは!開発現場の裏側を支えるアーキテクトの私です。
Windows環境でCやC++、あるいはRustやGoといったネイティブコードをコンパイルする際、避けて通れないのが「MinGW-w64」と「MSYS2」という名前です。
しかし、これからWindowsでのネイティブ開発を始めようとする方にとって、この2つのツールは迷宮の入り口のように感じられるかもしれません。
- 「MinGW-w64とMSYS2って、結局何が違うの?」
- 「UCRT64とかCLANG64とか、黒い画面(ターミナル)がたくさんあってどれを使えばいいかわからない……」
ネットで調べても、古い情報や断片的な解説ばかりで、本質が見えずに挫折してしまった方も多いのではないでしょうか。
大丈夫です。今回は、この2つのツールの関係性を「料理人とキッチン」の比喩を交えて完全に紐解き、あなたのプロジェクトに最適な環境を迷いなく選べるように優しくガイドします。これをマスターすれば、Windows環境におけるビルドの悩みが劇的に軽くなりますよ。一緒に見ていきましょう!
—
1. そもそも「MinGW-w64」と「MSYS2」は何が違うのか?
まず、この2つの決定的な違いをクリアにしておきましょう。ここを誤解していると、環境構築の迷子になります。
- MinGW-w64(Minimalist GNU for Windows):
- 役割: Windows上で動く「ネイティブなEXEファイル」を作り出すためのコンパイラ(翻訳機)やライブラリのセットです。
- 特徴: Linuxの標準的なプログラムをWindows用に翻訳し、LinuxのC標準ライブラリ(glibc)の代わりに、Windowsが標準で持っている部品(`msvcrt.dll`や`ucrtbase.dll`など)を使って動くように変換してくれます。
- MSYS2(Minimal SYStem 2):
- 役割: Windows上でLinuxのような開発環境(シェル、パッケージマネージャ)を提供する総合的なプラットフォーム(キッチン)です。
- 特徴: `pacman`という非常に優れたパッケージ管理システムを持っており、先ほどの「MinGW-w64」や、Git、Make、Pythonなどの開発ツールを一撃でインストール・管理してくれます。
💡 先輩エンジニアの分かりやすい比喩
- MSYS2 は、包丁、まな板、コンロ、シンクがすべて揃った「プロ仕様のシステムキッチン」です。
- MinGW-w64 は、そのキッチンで作るための「専用の調理器具(特定の食材を完璧に仕上げる包丁セット)」です。
つまり、「MSYS2という便利なキッチンを導入し、その中でMinGW-w64という調理器具を使ってプログラムを作る」というのが、現代のWindows開発における最もスマートで正しいアプローチなのです。
—
2. 乱立する環境(UCRT64 / CLANG64など)の正体と選び方
MSYS2をインストールすると、スタートメニューにいくつかのターミナルが表示されて面食らいます。
- MSYS2 MSYS
- MSYS2 MinGW 32-bit
- MSYS2 MinGW 64-bit
- MSYS2 Clang 32-bit
- MSYS2 Clang 64-bit
- MSYS2 UCRT64 ← ★現代のイチオシ!
- MSYS2 CLANG64 ← ★次世代の注目株!
これらは、どの「Cランタイム(Windowsのどの底面システムを使うか)」とどの「ビルドツールチェイン」を使うかをあらかじめ設定した専用の起動ショートカットです。
それぞれの特徴を、実務的な視点でサクッと整理しておきましょう。
| 環境名 | 使用するCランタイム | 主なコンパイラ | 特徴・いつ使うべきか |
| :— | :— | :— | :— |
| MSYS2 MSYS | Cygwin系 (msys-2.0.dll) | GCC (POSIX系) | MSYS2自体の管理や、Linux用スクリプトをそのまま動かしたい時用。ネイティブアプリ開発には使わない。 |
| MinGW 64-bit | 古典的 (msvcrt.dll) | GCC (x86_64) | 昔ながらの環境。古いWindows(Windows 7など)との互換性が必要な場合のレガシー枠。 |
| UCRT64 | Universal CRT (ucrtbase.dll) | GCC (x86_64) | 【最重要・現代のスタンダード】 Windows 10/11の標準Cランタイムを使用。最新のC++規格や高速な動作が求められるならこれ一択。 |
| CLANG64 | Universal CRT (ucrtbase.dll) | Clang/LLVM | Clangエコシステム(高速なコンパイル、高度な静的解析、LTOなど)をフル活用したい最先端志向の環境。 |
プロジェクトに応じた選び方の結論
- 迷ったらこれ: `UCRT64` を選んでおけば間違いありません。Windows 10以降の最新APIや標準ライブラリと完全に調和し、モダンなC/C++開発において最高のパフォーマンスを発揮します。
- LLVM/Clangが好きなら: `CLANG64` をチョイスしましょう。
—
3. 実践:MSYS2とUCRT64のセットアップ手順
それでは、実際に環境を構築していきましょう。手順は非常にシンプルですが、確実に進めていきます。
Step 1: MSYS2のインストール

2. インストーラを起動し、指示に従って進めます(基本的にはデフォルトのパス `C:\msys64` のままでOKです)。
3. インストールが完了すると、自動的にMSYS2のターミナルが立ち上がります。
Step 2: システムとパッケージの完全アップデート
最初に、パッケージマネージャ自体の更新を行います。以下のコマンドをターミナルにコピー&ペーストして実行してください。
パッケージデータベースとコアシステムを最新化するコマンド
pacman -Syu
- ※途中で「ウィンドウを閉じろ」といった指示が出たら、指示に従って一度ターミナルを閉じ、再度起動して同じコマンドをもう一度実行してください。
Step 3: UCRT64用の開発ツールセットを一括インストール
システムが最新になったら、いよいよコンパイラやビルドツールをごっそりインストールします。MSYS2のターミナル(どれでも可)で以下を実行します。
UCRT64環境用のGCCコンパイラ、Make、GDB(デバッガー)を一括インストール
pacman -S –needed base-devel mingw-w64-ucrt64-toolchain
- `–needed` オプションを付けているため、すでにインストールされている最新のツールはスキップされ、効率的です。途中で確認画面が出たら、すべて「Enter(デフォルトでYes)」を押して進めてください。
これで、開発の準備はすべて完了です!
—
4. 精度高い「Hello World」で動作確認
ツールが正しく入ったか、そして正しくコンパイラが機能するかを、`UCRT64` の環境を使って確認しましょう。
1. UCRT64ターミナルの起動
スタートメニューから 「MSYS2 UCRT64」 を探して起動してください。
(ウィンドウのタイトルバーに `UCRT64` と表示されていることを確認してください)
2. 作業用ディレクトリの作成と移動
分かりやすいように、ホームディレクトリにテスト用のフォルダを作ります。
デスクトップに移動(あるいは適当な作業ディレクトリを作成)
cd ~
mkdir msys2_test
cd msys2_test
3. ソースコードの作成
ここでは、最新のC++の機能を少しだけ使った、行儀の良いプログラムを作成します。エディタ(nanoやvimなど、あるいはメモ帳でも可)で `main.cpp` を作成します。
nanoエディタでファイルを新規作成・編集
cat << 'EOF' > main.cpp
include
include
include
int main() {
// 現代的なC++の初期化構文を使用
std::vector
“Hello, MSYS2 UCRT64 World!”,
“Compiler is working perfectly.”,
“Your daily coding will be dramatically easier!”
};
for (const auto& msg : messages) {
std::cout << msg << std::endl;
}
return 0;
}
EOF
4. コンパイルと実行
それでは、インストールしたGCC(`g++`)を使ってコンパイルを実行します。
g++を使い、最新のC++20規格を指定してコンパイル
-O3: 最適化を最高レベルにする
-o app.exe: 出力ファイル名を app.exe に指定
g++ -std=c++20 -O3 main.cpp -o app.exe
エラーが一切出ず、数秒で処理が完了したはずです。それでは、出来上がったWindowsネイティブの実行ファイルを動かしてみましょう!
作成した実行ファイルを呼び出す
./app.exe
【実行結果のログ】
Hello, MSYS2 UCRT64 World!
Compiler is working perfectly.
Your daily coding will be dramatically easier!
完璧ですね!Windowsの標準Cランタイム(UCRT)を背負った、純粋で高速なネイティブバイナリが見事にビルドできました。
—
5. 毎日のコーディングを劇的に楽にする「パスを通す」テクニック
さて、このままだと「MSYS2 UCRT64の黒い画面」の中からしか `g++` を使えません。普段使いの VS Code や、Windows標準の PowerShell、Command Prompt からもこのコンパイラを直接叩けるようにすると、開発効率が跳ね上がります。
環境変数 PATH への追加
Windowsのシステム環境変数 `PATH` に、UCRT64のバイナリフォルダを追加しましょう。
- 追加するパスの例:
`C:\msys64\ucrt64\bin` (デフォルトでインストールした場合)
設定手順:
1. Windowsのスタートメニュー検索で「環境変数」と入力し、「システム環境変数の編集」を開く。
2. 右下の「環境変数」ボタンをクリック。
3. ユーザー環境変数(またはシステム環境変数)の `Path` を選択し、「編集」をクリック。
4. 「新規」をクリックし、`C:\msys64\ucrt64\bin` を追加して「OK」を押す。
これで、普段あなたが愛用しているVS Codeの統合ターミナル(PowerShellなど)を開き、どこからでも `g++ –version` と叩けば、MSYS2で入れたピカピカの最新コンパイラが即座に反応してくれます。
—
まとめ
今回は、MinGW-w64とMSYS2の深い関係性と、現代のベストプラクティスである「UCRT64」環境の構築から動作確認までを解説しました。
- MSYS2 は開発のための最強のキッチン。
- MinGW-w64 はその中で動く最高のコンパイラ。
- 迷ったら `UCRT64` を選んでおけば、Windows 10/11の最新環境でモダンなネイティブ開発をフル満喫できる。
この基盤さえしっかりと整えてしまえば、もうWindowsでのC/C++やネイティブツールビルドに怯える必要はありません。ぜひ、あなたのプロジェクトでもこの快適な環境を取り入れて、毎日のコーディングを劇的に楽にしてくださいね。
それでは、素晴らしい開発ライフを!