WindowsでGCCを使おう：MSYS2のインストールと設定方法

Windows上でgccを使用するための環境として有名な「MSYS2」があります。
本稿では、MSYS2を用いてgccを利用可能にする手順を説明します。

### １．MSYS2とは何か
主にWindows上でのビルド環境を提供することを目的としたツールとライブラリのコレクションです。Windows上でPosix互換(Unix,Linuxのような)のコマンドを提供し、ビルドなどの手段を提供してくれます。

### ２．MSYS2とWSL2の違い
単純にLinuxが使いたい、という要望であれば、昨今はWSL2を用いることで達成できます。
しかし、Windows環境ではMSYS2を使うことにも利点があります。
ここで、MSYS2とWSL2を比較してみます。

|比較内容|MSYS2  |WSL2  |
|---|---|---|
|動作環境|Windows上で動作|仮想マシン上で動作|
|バイナリ|Windowsネイティブのバイナリを使用|Linuxのバイナリを使用|
|コマンド|Windows上でUnixコマンドを使用可能|仮想マシン上でLinuxコマンドを使用可能|
|開発環境|Windowsアプリケーションを開発可能|Linuxアプリケーションを開発可能|
|Posix互換性|POSIX互換を提供するが完全ではない|完全なPOSIX互換を提供する|

つまり、
MSYS2はWindows上でUnixライクな環境を利用しつつ、Windows向けのプログラムを開発したい場合に有益です。
WSL2はWindows上でLinux環境をそのまま利用したい場合に有益です。

### ３．MSYS2を使用するメリット
Unix/Linux系でよく用いられるbashやautotoolsが使用できることが大きなメリットと考えます。
OSSのソースコードをビルドする際に頻繁に使用されるconfigureをWindows上で利用できるのは非常に有益です。

### ４．MSYS2のインストール
#### ４．１．MSYS2をダウンロードする
次のサイトより、MSYS2のインストール媒体をダウンロードします

https://www.msys2.org/

ページを開いて少し下にあるDownload the Installerの横のリンクをクリックし、ファイルをダウンロードします。(筆者がダウンロードした際のファイル名はmsys2-x86_64-20241116.exeでした)

![スクリーンショット 2024-11-30 015219.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1317688/51f0fb30-9196-3c22-8faf-ed9350d916fe.png)

#### ４．２．MSYS2をインストールする
ダウンロードしたファイルをダブルクリックして実行します。

![MSYS2 Setup 2024_11_30 1_54_45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1317688/6d17171f-4a67-3607-82bd-9e7e30000da3.png)

「Next」ボタンを押下して次へ進みます。

![MSYS2 Setup 2024_11_30 1_55_21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1317688/de651797-e0d1-fd80-f141-6e52f2ec1eee.png)

インストール先を変更する場合は「Browse」ボタンよりインストール先を指定します。
変更しない、または変更が完了したら「Next」ボタンを押下して次へ進みます。

注意：指定したフォルダに半角スペースが含まれると、使用中に不具合が発生する場合があります。

![MSYS2 Setup 2024_11_30 1_55_31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1317688/03c0f1ac-0b75-efc5-2dd6-4d63e7b2b6a6.png)

スタートメニューの登録先を指定します。指定が完了したら「Next」ボタンを押下して次へ進みます。

![MSYS2 Setup 2024_11_30 1_55_39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1317688/5403f62a-0acd-b27d-3e77-a2273542e341.png)

インストールが実行されます。

![MSYS2 Setup 2024_11_30 1_57_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1317688/e3b95ea2-0e1c-b791-32ff-4f7531c14c1c.png)

インストールが完了しました。Run MSYS2 now.のチェックを外して、「Finish」ボタンを押下してください。ウィンドウが閉じ、インストールが終了します。

![スクリーンショット 2024-11-30 045336.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1317688/ae93027f-7f9d-aa29-8037-165080e555e2.png)

スタートメニューを開くと、5つのメニューが追加されています。

### ５．各シェルの違いについて
メニューが5つ追加されました。これはそれぞれ異なるシェルを起動するためのメニューになります。
ここでシェルの違いについて説明をしていきます。

|シェル|概要|Windowsとのバイナリ互換|
|---|---|---|
|MSYS2 MSYS|Unix向けソフトウェアのビルドに使用する|なし|
|MSYS2 MINGW64|64Bit Windowsアプリケーションをgccでビルドするための環境|あり|
|MSYS2 UCRT64|Universal C Runtime（UCRT）を使用して64Bit Windowsアプリケーションをgccでビルドするための環境|あり|
|MSYS2 CLANG64|64Bit WindowsアプリケーションをClangでビルドするための環境|あり|
|MSYS2 CLANGARM64|ARM64(AArch64)アプリケーションをClangでビルドするための環境|ARM64版Windowsで動作|

分かりやすくまとめると：
・Windowsのプログラムを作成するにはMINGW64、UCRT64、またはCLANG64を使用します。
・gccを使うならMINGW64またはUCRT64、Clangを使うならCLANG64を使用します。
・MINGW64は古いC++規格（C++11以前）の開発向き、UCRT64は新しいC++規格（C++11以降）の開発向きです。
となります。
本稿ではgccを使い、新しいC++を使用することを想定し、UCRT64を用います。
もし、他の環境が必要な場合、個人の用途に合わせて読み替えを行ってください。

#### ６．gccのインストール

UCRT64の環境にgccをインストールします。(gcc向け、と定義されているのに、デフォルトでは入っていないのです…)
MSYS2 UCRT64のメニューを選択し、シェルを起動します。
![~                                                   2024_11_30 5_13_30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1317688/977fedb4-1eef-c848-2ba0-e94d9c5ab480.png)

MSYS2ではArch Linuxで使用されているpacmanというパッケージマネージャが使用でき、これを用いてアプリケーションのインストールを行います。(RHEL系のdnf、debian系のaptのようなツールです)

まず、パッケージデータベースを最新の情報にするため、次のコマンドを実行します

```bash
pacman -Syu
```

更新を確認するメッセージが表示されるのでYを入力しEnterキーで先にすすめてください。
もし、再起動を促すメッセージが表示された場合、一度シェルを閉じて開きなおし、上記のコマンドを再度実行してください。

![2024_11_30 5_23_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1317688/c950dc98-af45-5e20-0aa3-a5f02bd10464.png)

上記のような表示が出力され、更新が完了します。
今度は次のコマンドを実行し、gccをインストールします。

```bash
pacman -S --needed base-devel mingw-w64-ucrt-x86_64-toolchain
```
必要なツールチェーンをインストールしてよいか確認が表示されます。
Enterを押下して、インストールを実行します。

![スクリーンショット 2024-11-30 052844.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1317688/48b7d64f-7490-9eba-f0e6-2f12c9ed8931.png)

さらにパッケージのインストールを確認されるのでYを入力してEnterで処理を進めます。

![スクリーンショット 2024-11-30 052858.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1317688/8a3508ac-03a3-91b5-309a-4a2767d0957f.png)

パッケージのダウンロードとインストールが進みます。
特に問題が発生しなければインストールが完了します。

注意：筆者の環境では一度エラーが発生しましたが、再度コマンドを実行したところ正常にインストールが完了しました。

![スクリーンショット 2024-11-30 053226.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1317688/00d31797-9d04-a9e9-36ab-e8aa06d5a498.png)

コマンドが正しくインストールできているか確認を行います。

```bash
gcc --version
g++ --version
make --version
```
![スクリーンショット 2024-11-30 053258.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1317688/742f6500-8508-f017-b215-ef597639630b.png)

コマンドが正常に実行され、バージョン情報が表示されればインストールは完了です。