MSYS2をWindows環境で使うときに、どのシェルを選ぶか、GCCをどこへ入れるか、VS Codeからどう呼ぶかを毎回調べ直していたので、2026年時点の構成を自分用に整理しておく。
以前はMINGW64を中心に使う説明が多かったが、現在のMSYS2公式は、迷った場合はUCRT64を選ぶ方針になっている。さらに2026年3月15日からMINGW64の段階的な廃止が始まっているため、新しく環境を作る場合はUCRT64を基準にする。
MSYS2とは
MSYS2は、Windows上でUnix系のコマンドやパッケージ管理機能を使いつつ、GCCやClangでWindowsネイティブアプリをビルドできる開発環境。
- bash、tar、grepなどのUnix系ツールを使える
- pacmanでツールやライブラリをインストール・更新できる
- MinGW-w64のGCCでWindows向けexeをビルドできる
- Clang / LLVMの環境も選べる
- VS CodeやCMakeと組み合わせて使える
「Linux環境そのもの」をWindows上で動かすWSLとは役割が少し違う。MSYS2はWindowsネイティブの開発環境を作りやすいのが大きな目的。
MSYS2の環境の違い
MSYS2には複数の環境があり、それぞれPATH、コンパイラ、Cランタイムなどが異なる。2026年時点で主に意識するのはMSYS、UCRT64、CLANG64、CLANGARM64。
| 環境 | 主な用途 | ツールチェーン | 主なパス |
|---|---|---|---|
| MSYS | MSYS2本体の管理、Unix系ツール | GCC / Cygwin系 | /usr/bin |
| UCRT64 | 64bit Windows向けの標準的な開発 | GCC + UCRT | /ucrt64/bin |
| CLANG64 | 64bit Windows向けClang開発 | LLVM / Clang + UCRT | /clang64/bin |
| CLANGARM64 | Windows on ARM向け | LLVM / Clang + UCRT | /clangarm64/bin |
| MINGW64 | 旧来の64bit Windows向け環境 | GCC + MSVCRT | /mingw64/bin |
MSYSとUCRT64は別物として考える
MSYSはMSYS2自体の管理やUnix系ツールを使うための環境。WindowsネイティブアプリをGCCで作る用途ならUCRT64を使う。
UCRT64ではPATHの先頭に/ucrt64/binが入り、その後に/usr/binが続くため、UCRT64向けのWindowsネイティブツールとMSYS側のUnix系ツールを同時に使える。
2026年時点ではUCRT64を標準にする
MSYS2公式の環境説明では、どれを使うか迷った場合はUCRT64が推奨されている。UCRTはMicrosoftが現在のVisual Studioでも標準的に使っているUniversal C Runtimeで、MSVCRTより新しい。
MINGW64は以前よく使われていたが、2026年3月15日から段階的な廃止が始まった。新しいパッケージは追加されず、問題が出た既存パッケージが削除される可能性もある。既存環境を維持する理由がなければUCRT64かCLANG64へ移行する。
- GCCを使う通常のWindows 64bit開発 → UCRT64
- Clang / LLVMを使う → CLANG64
- Windows on ARM向け → CLANGARM64
- MSYS2本体の管理やUnix系処理 → MSYS
- MINGW64 → 既存環境の保守用途。新規では基本的に選ばない
Windows 11へMSYS2をインストール
新しく入れる場合はMSYS2公式サイトからx86_64用のGUIインストーラーを取得する。インストール先は特に理由がなければ標準のC:\msys64のままにする。
- MSYS2公式サイトからインストーラーを取得
- インストーラーを実行
- 標準の
C:\msys64へインストール - 完了後にUCRT64ターミナルを起動
- 最初にシステム全体を更新
pacman -Suy
コアパッケージ更新時に、いったんMSYS2の全ターミナルを閉じるよう表示される場合がある。その場合は指示どおり終了し、UCRT64を起動し直してもう一度pacman -Suyを実行する。
GCC / G++をインストール
UCRT64でGCCだけ必要なら、公式Getting Startedにある次のパッケージを入れる。
pacman -S mingw-w64-ucrt-x86_64-gcc
GCC、G++、GDB、makeなどをまとめて揃えるならtoolchainグループを入れておく方が使いやすい。
pacman -S --needed base-devel mingw-w64-ucrt-x86_64-toolchain
インストール後の確認。
gcc --version
g++ --version
gdb --version
UCRT64用パッケージは名前にmingw-w64-ucrt-x86_64-が付く。MSYS用パッケージとUCRT64用パッケージを混同しないようにする。
VS CodeでMSYS2 UCRT64を使う
VS Codeから使う方法は、大きく「VS Codeの統合ターミナルをUCRT64にする方法」と「WindowsのPATHにUCRT64のbinを追加する方法」がある。
統合ターミナルをUCRT64にする
MSYS2公式にある設定をsettings.jsonへ追加する。
{
"terminal.integrated.profiles.windows": {
"MSYS2 UCRT": {
"path": "cmd.exe",
"args": [
"/c",
"C:\msys64\msys2_shell.cmd -defterm -here -no-start -ucrt64"
]
}
}
}
これでVS CodeのターミナルプロファイルからMSYS2 UCRTを選べる。
Windows側からgccを直接使う場合
MicrosoftのVS Code C/C++ドキュメントでは、標準インストールなら次のパスをWindowsのユーザーPATHへ追加する方法が案内されている。
C:\msys64\ucrt64\bin
PATH変更後は、すでに開いているPowerShell、コマンドプロンプト、VS Codeをいったん閉じて開き直す。
pacmanでよく使うコマンド
MSYS2のパッケージ管理はpacman。毎回調べるものだけメモ。
| 目的 | コマンド |
|---|---|
| システム全体を更新 | pacman -Suy |
| パッケージを検索 | pacman -Ss キーワード |
| インストール済みを検索 | pacman -Qs キーワード |
| パッケージをインストール | pacman -S パッケージ名 |
| パッケージを削除 | pacman -R パッケージ名 |
| 依存関係も含めて削除 | pacman -Rs パッケージ名 |
MSYS2はローリングリリースなので、特定の一部パッケージだけを古い状態に保つより、基本的にはシステム全体を更新して使う。
よくあるトラブル
gcc: command not found
まずUCRT64ターミナルを使っているか確認する。UCRT64ならecho $MSYSTEMの結果がUCRT64になる。
echo $MSYSTEM
which gcc
GCC未導入ならmingw-w64-ucrt-x86_64-gccまたはtoolchainをインストールする。
PowerShellではgccが見つからない
MSYS2 UCRT64ターミナルでは動くがPowerShellでは動かない場合、Windows側のPATHにC:\msys64\ucrt64\binが入っていない可能性が高い。PATH追加後はターミナルを開き直す。
MINGW64とUCRT64のライブラリを混ぜてしまった
MINGW64はMSVCRT、UCRT64はUCRTを使うため、オブジェクトファイルや静的ライブラリを安易に混在させない。既存のMINGW64プロジェクトをUCRT64へ移す場合は、依存ライブラリも含めてUCRT64向けに揃えて再ビルドする方が分かりやすい。
pacman更新後にターミナルを閉じるよう言われた
MSYS2ランタイムなどのコア更新では正常な動作。表示に従って全MSYS2プロセスを終了し、再起動後にもう一度pacman -Suyを実行する。
どのパッケージを入れればよいか分からない
まずpacman -Ssで検索する。UCRT64用のWindowsネイティブパッケージなら、基本的にmingw-w64-ucrt-x86_64-で始まる名前を探す。
自分用の結論
- 2026年に新しくMSYS2を使うならUCRT64を基準にする
- MINGW64は段階的廃止が始まっているため新規環境では避ける
- GCC環境は
mingw-w64-ucrt-x86_64-toolchainでまとめて入れる - VS Codeの統合ターミナルもUCRT64にする
- Windows側から直接gccを使う場合は
C:\msys64\ucrt64\binをPATHへ追加 - 更新は
pacman -Suyでシステム全体を揃える

