【入門編】MSYS2 UCRT64環境への完全移行ガイド:MSVCRT環境との違いと今選ぶべき理由 – 実行環境・ランタイム・コンパイラ生産性向上バイブル

こんにちは!日々、C++やC言語を使って「いかに快適に、美しくコードを動かすか」に向き合っている先輩エンジニアです。

Windows環境でネイティブなC/C++アプリケーションを開発しようとしたとき、最初に直面する壁が「どのコンパイラと実行環境を選ぶべきか」という問題です。昔から開発をしている人なら「MinGW」や「Cygwin」という名前を聞いたことがあるかもしれません。

しかし、もしあなたがこれから新しくWindows上でモダンな開発環境を構築するなら、過去の遺物となりつつある古い環境は忘れ、「MSYS2 UCRT64環境」一択でいきましょう。これをマスターすれば、DLL地獄や文字化け、最新のWindows APIが使えないといったストレスから解放され、毎日のコーディングが劇的に楽になりますよ。

今回は、なぜ今UCRT64なのかという本質的な理由から、環境構築、そして確実に動くHello Worldまでの全ステップを、私の知見をギュッと詰め込んで優しく丁寧に解説しますね。

—

1. なぜ「UCRT64」なのか?MSVCRTとの決定的違い

まず、私たちが使おうとしている「MSYS2」というプラットフォームの中で、何がどう変わったのかを整理しておきましょう。ここを理解しておくと、後々トラブルシューティングで迷わなくなります。

従来の「MINGW64(MSVCRT)」の限界

これまでWindows上のGCC環境の主流は、`MINGW64`(または`x86_64-w64-mingw32`)と呼ばれるものでした。これはWindowsが何十年も前に定めた古いC標準ライブラリである `msvcrt.dll` に依存していました。

しかし、`msvcrt.dll` には以下のような深刻なモダン開発上の課題がありました。

  • C99/C11規格の未完全なサポート: 最新のC言語規格で定められた関数が使えない、または挙動が怪しい。
  • Windows APIとの乖離: OS側の進化にランタイム側が追いついておらず、UTF-8文字列の扱いなどで泥臭いコードを書く必要がある。

最新の「UCRT64」がもたらすパラダイムシフト

これに対して、最新の `UCRT64` 環境が依存する UCRT(Universal C Runtime) は、Windows 10およびWindows 11に標準搭載された新しいOSの基盤ランタイムです。現在のVisual Studio(MSVC)もこのUCRTを標準で使っています。

つまり、UCRT64を選ぶということは、最新のVisual Studio製アプリと完全に同等のモダンなC/C++ランタイム基盤を手に入れることを意味します。

  • 完全なC99/C11/C++20/C++23標準のサポート: 数値計算、文字列処理、ロケール周りのバグが劇的に減ります。
  • OSネイティブのパフォーマンス: Windowsのアップデートの恩恵をダイレクトに受け、実行速度や安定性が向上します。

—

2. MSYS2のインストールとUCRT64の初期セットアップ

百聞は一見にしかず。実際に手を動かして、最強の環境を構築していきましょう。

Step 1: MSYS2のインストール

まずは公式からインストーラを取得します。

1. [MSYS2公式サイト](https://www.msys2.org/) にアクセスし、インストーラ(`msys2-x86_64-xxxxxxxx.exe`)をダウンロードします。
2. デフォルトの設定のまま(通常は `C:\msys64`)インストールを完了させます。
3. インストール完了後、「MSYS2 MSYS」のコンソールが自動で立ち上がります。

Step 2: パッケージデータベースとコアシステムの更新

最初に、パッケージマネージャ(`pacman`)自体の更新を行います。以下のコマンドをMSYS2のコンソールにコピペして実行してください。

パッケージデータベースを同期し、コアシステムをアップデートする
pacman -Syu

※途中で「ウィンドウを閉じろ」という指示が出たら、指示に従って一度ターミナルを閉じ、再度「MSYS2 MSYS」を起動してもう一度 `pacman -Syu` を実行してください。

Step 3: UCRT64ツールチェイン(GCC等)のインストール

システムが最新になったら、いよいよUCRT64用のコンパイラやビルドツールをごっそりインストールします。

UCRT64用のGCCコンパイラ、GDBデバッガ、Makeツールを一括インストール
pacman -S –needed base-devel mingw-w64-ucrt64-toolchain

途中でインストール確認(Proceed with installation? [Y/n])を聞かれるので、そのまま `Enter`(Y)を押して進めてください。

これで、コンパイルに必要なパーツがすべて揃いました。

—

3. 動作確認:UCRT64環境で「Hello World」をビルドする

環境が整ったら、専用のコンソールを開いて実際にコードを書いてみましょう。

UCRT64コンソールの起動

Windowsのスタートメニューから、「MSYS2 UCRT64」(※通常のMSYSやMINGW64ではないので注意!)を起動してください。ウィンドウのタイトルに `UCRT64` と表示されていることを確認します。

作業用ディレクトリの作成とソースコードの記述

ターミナルで以下のコマンドを実行し、作業用フォルダを作ってC++のソースコードを作成します。

ワーク用ディレクトリを作成して移動する
mkdir -p ~/projects/hello_ucrt
cd ~/projects/hello_ucrt

nanoエディタで main.cpp を作成する
cat << 'EOF' > main.cpp
include
include
include

int main() {
// モダンなC++の機能を使った記述
std::vector messages = {
“こんにちは、UCRT64環境へようこそ!”,
“最新のUniversal CRTでビルドされています。”,
“これで快適なC++開発が始まります。”
};

for (const auto& msg : messages) {
std::cout << msg << std::endl; } return 0; } EOF

コンパイルと実行

インストールした最新のGCC(`g++`)を使ってコンパイルを実行します。

C++20規格を指定し、最適化をかけてビルドする
g++ -std=c++20 -O3 main.cpp -o hello.exe

実行してみる
./hello.exe

【実行結果のイメージ】

こんにちは、UCRT64環境へようこそ!
最新のUniversal CRTでビルドされています。
これで快適なC++開発が始まります。

見事に一発でビルドが通り、日本語も文字化けせずに綺麗に出力されました!これがUCRT64環境の美しさです。

—

4. 移行・実務における重要な注意点(リンク設定の変更点)

もしあなたが過去の `MINGW64` 環境で作ったプロジェクトやMakefileを `UCRT64` に持ち込む場合、一つだけ注意すべきポイントがあります。それは「リンクするCランタイムのライブラリパス」です。

  • ヘッダとライブラリの参照先: UCRT64環境では、インクルードパスやライブラリパスは自動的に `/ucrt64/include` や `/ucrt64/lib` を向くように `g++` 内部で設定されています。
  • 外部ライブラリを使うとき: 自前で古いビルド済みのライブラリを持ち込むと、`msvcrt` 向けにビルドされたものと `ucrt` 向けが混ざり、リンクエラー(シンボル未解決など)を起こす原因になります。
  • 対策: UCRT64環境内で提供されているパッケージ(`pacman -S mingw-w64-ucrt64-…`)を使うか、ソースコードからUCRT64環境でリビルドしたものを使用してください。

—

おわりに:ここから始まる快適なコーディングライフ

今回は、MSYS2 UCRT64環境の魅力と、その導入からHello Worldまでの道のりを解説しました。

古いMSVCRT環境の呪縛から解放されたUCRT64を使えば、現代的で堅牢なC/C++開発環境がWindows上に手に入ります。VS Codeなどのエディタと組み合わせれば、Visual Studioに引けを取らない軽快でパワフルな開発体験が待っています。

これをマスターしたあなたなら、もう環境構築でつまづくことは怖くないはずです。さあ、今すぐお気に入りのコードを書いて、新しい実行環境のスピードを体感してください!

タイトルとURLをコピーしました