WindowsでのAtCoder用開発環境構築ガイド

# WindowsでのAtCoder用開発環境構築ガイド

## はじめに
このガイドは、AtCoderで効率的に競技プログラミングをするための環境構築手順をまとめたものです。  
具体的には、Windows環境でC++のコンパイルや実行を行うためのツールや設定方法について説明します。

以下を想定しています。
・win11
・VScodeインストール済み
・C++でのAtCoderでのテスト自動化を目的

---

## 目次
1. **MSYS2のインストール**
2. **g++のインストール**
3. **環境変数の設定**
4. **Tasks.jsonとコンパイル用バッチファイルの作成**
5. **実行してみる**
6. **最後に**
---

## 1. MSYS2のインストール

### MSYS2
MSYS2は、WindowsでUnix系のツールを使用するための環境です。これをインストールすることで、g++やbashなどのツールを使えるようになります。

### MSYS2のインストール手順
1. **MSYS2公式サイト**からインストーラーをダウンロードします。
   - [MSYS2公式サイト](https://www.msys2.org/)
   - 自分はmsys2-x86_64-xxxxxxx.exe をダウンロードしました(環境に合わせて)
2. インストーラーを実行し、MSYS2をインストール
   - インストール先はデフォルトの C:\msys64\ のままでOK
   - インストールが完了したら、MSYS2を起動する
3. MSYS2のパッケージを最新化する
   - **MSYS2ターミナル**を開き、パッケージリストを最新に更新します
   ```bash
   # MSYS2のパッケージ更新
   pacman -Syu
   ```
   
---

## 2. g++ のインストール
MSYS2では、mingw-w64 のパッケージを使って g++ をインストールします。
```terminal:MSYS2
pacman -S mingw-w64-ucrt-x86_64-gcc
```

インストール後、以下のコマンドで g++ のバージョンを確認できます。

```terminal:MSYS
g++ --version
```

これでバージョンが表示されれば g++ のインストールが完了です！🎉

---

## 3. 環境変数の設定
MSYS2でインストールしたg++を使用するため、Windowsの環境変数にMSYS2のパスを追加します

### 手順：
#### 1. MSYS2をインストールしたディレクトリにあるmingw64\binフォルダのパスをコピーします
例: C:\msys64\mingw64\bin
#### 2. Windows環境変数の設定手順：

 1.スタート」→「システム環境設定」を開きます
 2.「環境変数」ボタンをクリックします
 3.「システム環境変数」の「Path」を選択し、「編集」します
 4.新しい値として、コピーしたパス（C:\msys64\mingw64\bin）を追加します

#### 3.g++ がWindowsのターミナルで使えるか確認

VSCodeのターミナル（PowerShell や CMD）を開いて、MSYS2の g++ がどこにあるか確認します

```terminal:ターミナル
which g++
```

これで、エラーが出なければ、MSYS2のg++を使えるようになります

---

## 4. tasks（g++コマンドを自動化）

VS Codeの Tasks.json を使うことで、バッチファイルを使わずにコンパイルや実行を簡単に行うことができます。ここでは、タスクの設定方法を説明します。

### 1. Tasks.jsonの設定
まず、VS Codeのワークスペースのルートディレクトリに .vscode フォルダを作成します。その中に tasks.json を作成して、以下の内容を記入します。

#### tasks.json の内容：

```terminal:tasks.json
{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "Build and Run",
      "type": "shell",
      "command": "g++",
      "args": [
        "${file}",
        "-o",
        "a.exe"
      ],
      "group": {
        "kind": "build",
        "isDefault": true
      },
      "problemMatcher": ["$gcc"],
      "detail": "コンパイルして実行します"
    },
    {
      "label": "Run a.exe",
      "type": "shell",
      "command": "./a.exe",
      "group": {
        "kind": "test",
        "isDefault": true
      },
      "problemMatcher": []
    }
  ]
}

```

この設定を行うことで、VS Codeのターミナル内で「Build and Run」タスクを実行すれば、現在開いているC++ファイルを自動でコンパイルし、実行することができます。

### 2バッチファイル（`abc_runner.bat`）の作成


次に、更新日時が最新のファイルをコンパイルするように、**バッチファイル**を作成して、自動化します。

`abc_runner.bat`というファイルを作成し、以下の内容を記述します。このバッチファイルは、`AtCoder Beginner Contest 397`フォルダ内の`mySolutions`ディレクトリにある最新の`.cpp`ファイルを見つけ、コンパイルして実行するものです。

#### バッチファイルの内容：
```batch
@echo off
:: 最新の .cpp ファイルを取得
for /f "delims=" %%F in ('dir /b /od /a-d "AtCoder Beginner Contest 397\mySolutions\*.cpp"') do set LATEST_FILE=%%F

:: コンパイル＆実行
g++ "AtCoder Beginner Contest 397\mySolutions\%LATEST_FILE%" -o a.exe
a.exe
```

#### バッチファイルの保存場所
このバッチファイルは、AtCoder Beginner Contest フォルダ内に保存します。以下のような構成になります

```css
AtCoder Beginner Contest
├── abc_runner.bat
└──AtCoder Beginner Contest 397\
   └── mySolutions\
      ├── A - Thermometer.cpp
      ├── B - Test.cpp
      └── C - SomeOtherProblem.cpp
```

abc_runner.batは、mySolutions内の最新の.cppファイルを検出してコンパイルし、実行します。これにより、手動でコンパイルする手間が省け、効率的に問題を解くことができます。

---

### 5.実行してみる
実行テスト用のファイルを作成します
AtCoder Beginner Contest 397のA問題Thermometerを、以下のCppファイルを作成します。

```A - Thermometer.cpp
#include <bits/stdc++.h>
using namespace std;
#define rep(i,n) for(int i = 0;i < (n);i++)

int main() {
  int ans;
  double x = 0;
  cin >> x;

  if(x >= 38){
    ans = 1;
  }
  if(x >= 37.5 && x < 38){
    ans = 2;
  }
  if(x < 37.5){
    ans = 3;
  }
  
  cout << ans << endl;
  return 0;
}

```

VScodeのターミナルに以下を入力(Ctrl+Shift+Bでショートカット)

```terminal:vscode

.\abc_runner.bat
39
2
```

.\abc_runner.batを入力したに、標準入力で39と入力したところ2と出ました。正常に機能しました。

---

### 6. 最後に
これで、競技プログラミングを効率的に進めるための開発環境が整いました🎉

若干、まだコンテストごとにbatファイル内で指定しているパスを修正してあげないといけないですが、ローカル環境でコードテストができるようになりました。

VS CodeとMSYS2をうまく活用して、快適にコードを書いてコンパイルしていきましょう！😊