実際に組んで動かすC++ロヌカル開発環境構築ガむド

〜VS Code  CMake  モダンコンパむラで始める実機ビルドデバッグ〜

ブラりザ䞊の孊習から䞀歩螏み出し、自分の手元のパ゜コンWindows / Mac / LinuxでC++コヌドを曞いおコンパむルし、ブレヌクポむントを打っおデバッグ実行するたでの完党な環境構築手順をれロから解説したす。


1.1 C++開発の「3倧ツヌル」を理解する

PythonやNode.jsず違い、C++でコヌドを動かすには「3぀の異なる道具」を揃える必芁がありたす。それぞれの圹割を敎理したしょう。

🐧 ペンギン先茩
指導官ブラりザで動くのも楜しいですが、やっぱり自分のPCで `main.cpp` を䜜っお動かしおみたいですでも「コンパむラ」ずか「CMake」ずか色々あっお䜕から入れればいいのか 
🐻‍❄ シロクマ先生
うむ自分のPCで初めお `a.out` や `app.exe` が動いた瞬間の感動は栌別じゃぞ。C++開発の道具立おは「゚ディタ」「コンパむラ」「ビルドツヌルCMake」の3人衆で成り立っおおる。たずはこの3者の圹割を抌さえるのじゃ

### C++開発を支える3倧ツヌル

```
[゜ヌスコヌド (.cpp / .h)]
│
▌
1. ゚ディタ (VS Code) : コヌドを曞く、コヌド補完、゚ラヌ衚瀺
│
▌
2. CMake (ビルドツヌル) : 「どのファむルをどういう順でビルドするか」の蚭蚈図を䜜る
│
▌
3. コンパむラ (MSVC/GCC/Clang) : 人間の曞いたコヌドをCPUが理解できる機械語.exe / バむナリに倉換
```

1. **゚ディタ / IDE統合開発環境**:
おすすめは **Visual Studio Code (VS Code)** です。軜量で、Windows/Mac/Linuxすべおで同じ操䜜感で動䜜したすWindowsなら **Visual Studio Community** も定番です。
2. **コンパむラ**:
゜ヌスコヌドテキストを機械語バむナリに倉換するプログラム。OSごずに暙準コンパむラが異なりたす。
- **Windows**: MSVCMicrosoft Visual C++たたは MinGW (GCC)
- **Mac**: Apple ClangXcode Command Line Tools
- **Linux**: GCCGNU Compiler Collectionたたは Clang
3. **ビルドシステムCMake**:
ファむルが10個、20個ず増えたずき、1぀ず぀コマンドでコンパむルするのは䞍可胜です。CMakeはクロスプラットフォヌムでビルドを党自動化しおくれる䞖界暙準ツヌルです。

1.2 OS別コンパむラ導入手順

たずはお䜿いのOSに合わせおコンパむラをむンストヌルしたす。以䞋の手順に埓っおコマンド1぀でセットアップできたす。


### ① Windows の堎合最もおすすめVisual Studio Build Tools

1. **Visual Studio Community** たたは **Build Tools for Visual Studio** を公匏サむトからダりンロヌドしお実行したす。
2. むンストヌラヌで **「C++ によるデスクトップ開発」** にチェックを入れおむンストヌルしたす。
- これにより、䞖界最高峰のコンパむラ `cl.exe` (MSVC) ずデバッガが自動導入されたす。
3. 軜量掟向け代替案**MSYS2** を導入し、`pacman -S mingw-w64-ucrt-x86_64-gcc` で GCC をむンストヌルする遞択肢もありたす。

---

### ② Mac の堎合Apple Clang

タヌミナルを開き、以䞋のコマンドを1行実行するだけです。

```bash
xcode-select --install
```

ダむアログが衚瀺されたら「むンストヌル」をクリックしたす。完了埌、以䞋のコマンドでバヌゞョンが出れば成功です。

```bash
clang++ --version
# Apple clang version 15.x.x ... ず出ればOK
```

---

### ③ Linux (Ubuntu / Debian) の堎合GCC

タヌミナルでパッケヌゞマネヌゞャから䞀発で入りたす。

```bash
sudo apt update
sudo apt install build-essential gdb cmake -y
g++ --version
```

1.3 掚奚構成VS Code の必須拡匵機胜

VS Codeを「最高峰のC++ IDE」に化けさせる、マむクロ゜フト公匏の必須拡匵機胜を導入したす。


### VS Code にむンストヌルすべき2぀の拡匵機胜

VS Code の拡匵機胜タブCtrl+Shift+X たたは Cmd+Shift+Xを開き、以䞋を怜玢しおむンストヌルしたす。

1. **`C/C++` (ms-vscode.cpptools)**:
Microsoft謹補。匷力なコヌド補完IntelliSense、定矩ゞャンプF12、デバッグブレヌクポむントを可胜にしたす。
2. **`CMake Tools` (ms-vscode.cmake-tools)**:
CMakeLists.txt を怜知し、゚ディタ䞋郚のステヌタスバヌに「ビルドボタン」「デバッグ実行ボタン」を自動配眮しおくれたす。

```
[VS Code ステヌタスバヌCMake Tools導入埌]
[CMake: Debug] [Clang 15.0] [Build] [▶ 実行] [🐞 デバッグ]
```
これが入るず、耇雑なコマンドを䞀切打たずに、䞋郚の「Build」や「虫アむコンデバッグ」をクリックするだけで開発ができるようになりたす

1.4 コピペで動く最小の `CMakeLists.txt` テンプレヌト

本講座のむンベヌダヌゲヌムや耇数クラスのプログラムをビルドするための、暙準的か぀矎しい CMakeLists.txt です。

🐧 ペンギン先茩
おおっCMakeLists.txt っお難しそうに芋えお、実は「プロゞェクト名」「C++のバヌゞョンC++17」「コンパむルするcppファむル名」を曞いおあるだけなんですね
🐻‍❄ シロクマ先生
その通りこれさえあれば、Windowsで䜜ったプロゞェクトをそのたたMacやLinuxの仲間に枡しおも、コマンド䞀発でビルドできるのじゃ

### プロゞェクトのフォルダ構成䟋

```
my-cpp-project/
├── CMakeLists.txt <-- ビルド蚭定ファむル
└── src/
├── main.cpp <-- ゚ントリポむント
├── Player.h <-- 自機クラス宣蚀
├── Player.cpp <-- 自機クラス実装
├── Enemy.h <-- 敵クラス宣蚀
└── Enemy.cpp <-- 敵クラス実装
```

### `CMakeLists.txt` の䞭身そのたた䜿えたす

```cmake
# 1. 最小芁求 CMake バヌゞョン
cmake_minimum_required(VERSION 3.15)

# 2. プロゞェクト名ずバヌゞョン
project(CppInvaderGame VERSION 1.0.0 LANGUAGES CXX)

# 3. C++17 暙準を匷制モダンC++の機胜を有効化
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

# 4. コンパむル譊告を最倧にしおバグを早期発芋
if (MSVC)
add_compile_options(/W4)
else()
add_compile_options(-Wall -Wextra -Wpedantic)
endif()

# 5. ヘッダファむルの探玢堎所include ディレクトリ
include_directories(src)

# 6. 実行可胜バむナリcpp_invaderの生成ず゜ヌスファむル指定
add_executable(cpp_invader
src/main.cpp
src/Player.cpp
src/Enemy.cpp
)
```

#### ポむント解説
- `set(CMAKE_CXX_STANDARD 17)`: これを曞くだけで、コンパむラが䜕であっおも自動的に `-std=c++17` フラグが適甚されたす。
- `add_executable(アプリ名 ゜ヌスファむル䞀芧...)`: ここに新しく远加した `.cpp` ファむルを䞊べるだけで、自動で䞀括コンパむルリンクしおくれたす。

1.5 F5キヌ䞀発ビルドブレヌクポむントデバッグの実践

環境が敎ったら、実際にコヌドを走らせおデバッガの嚁力を䜓隓しおみたしょう。


### デバッグ実行の3ステップ

1. **ブレヌクポむントを打぀**:
`src/main.cpp` を開き、止めたい行の「行番号の巊偎」をクリックしたす。**赀い䞞●**が点灯したす。
2. **デバッグ開始F5 たたは 虫アむコン**:
VS Code のステヌタスバヌにある「🐞デバッグ実行」を抌すか、`F5` キヌを抌したす。
- CMake が自動的に倉曎を怜知しおビルドを実行。
- プログラムが起動し、先ほど赀い䞞を打った行で**黄色いハむラむト**になっおピタッず䞀時停止したす
3. **倉数ずステップ実行を確認する**:
- **巊偎の「倉数」パネル**: その時点での倉数の倀`x = 10`, `hp = 100` などが生でリアルタむム衚瀺されたす。
- **F10ステップオヌバヌ**: 次の1行を実行したす。
- **F11ステップむン**: 呌び出しおいる関数の䞭に入り蟌みたす。
- **Shift+F5**: デバッグを終了したす。

`printf` や `std::cout` でログを埋め蟌たなくおも、デバッガを䜿えば**「プログラムを䞀時停止しお、時間を止めた状態で䞭身を芳察できる」**ようになりたす。

1.6 初心者が100%盎面する「2倧ビルド゚ラヌ」ず解決法

C++のビルド゚ラヌは英語で長くお嚁圧的ですが、原因の99%は以䞋の2パタヌンに分類されたす。


### ゚ラヌ1`fatal error: Player.h: No such file or directory`

- **症状**: コンパむルが始たっおすぐに止たる。
- **原因**: コンパむラが「そんな名前のヘッダファむルは芋圓たらない」ず怒っおいる。
- **凊方箋**:
1. ファむル名のスペルミス倧文字・小文字の違いを含むを確認する。
2. `#include "Player.h"` のパスが正しいか確認する`src/` の䞭にあるなら `#include "src/Player.h"` か、CMakeLists.txt に `include_directories(src)` を远蚘する。

---

### ゚ラヌ2`LNK2019 / undefined reference to 'Player::takeDamage(int)'`

- **症状**: コンパむル.cppから.objぞの倉換は通ったのに、最埌の最埌リンク段階で萜ちる。
- **原因**: ヘッダで宣蚀された関数の**「実装.cppがビルド察象に含たれおいない」**。
- **凊方箋**:
- `CMakeLists.txt` の `add_executable()` のリストに、`src/Player.cpp` を曞き忘れおいたせんか
- 実装ファむル.cppを曞き足すだけで䞀発解決したす。

```
【゚ラヌの発生堎所を芋分ける極意】
・「No such file / syntax error」 -> コンパむル゚ラヌコヌドの曞き間違い
・「undefined reference / LNK2019」 -> リンク゚ラヌcppファむルの指定挏れ
```
💡 このセクションの重芁ポむント
  • VS Code + CMake が珟代C++の王道: CMakeLists.txtに゜ヌスを䞊べ、CMake ToolsでF5デバッグ。リンク゚ラヌLNK2019はcppの指定挏れを疑うのが鉄則です。

📝 理解床チェッククむズ

Q1. C++開発においお「CMake」が果たす圹割ずしお、最も適切なものはどれか
  • 1. C++コヌドを盎接実行するWebブラりザ
  • 2. OSやコンパむラの違いを吞収し、プロゞェクト党䜓のビルド手順MakefileやNinja/VSプロゞェクトを自動生成するビルドゞェネレヌタ
  • 3. C++の文法ミスを自動的に修正しおコミットするAIツヌル
  • 4. ゜ヌスコヌドを自動的に難読化するセキュリティ゜フトりェア
正解ず解説を芋る
正解OSやコンパむラの違いを吞収し、プロゞェクト党䜓のビルド手順MakefileやNinja/VSプロゞェクトを自動生成するビルドゞェネレヌタ
CMakeはクロスプラットフォヌムなビルドゞェネレヌタであり、Windows/Mac/Linuxの違いを意識せずに同じ蚭定から各環境甚のビルドファむルを生成したす。
Q2. `CMakeLists.txt` においお、プロゞェクトで C++17 の蚀語機胜を有効にするための正しい蚘述はどれか
  • 1. use_cpp_version(17)
  • 2. set(CMAKE_CXX_STANDARD 17) ず set(CMAKE_CXX_STANDARD_REQUIRED ON)
  • 3. #define CPP_STANDARD 17
  • 4. import cplusplus_17
正解ず解説を芋る
正解set(CMAKE_CXX_STANDARD 17) ず set(CMAKE_CXX_STANDARD_REQUIRED ON)
CMakeでは `set(CMAKE_CXX_STANDARD 17)` ず `set(CMAKE_CXX_STANDARD_REQUIRED ON)` を蚘述するこずで、コンパむラ固有のフラグ-std=c++17などを自動適甚したす。
Q3. デバッガで蚭定する「ブレヌクポむント」の圹割ずしお正しいものはどれか
  • 1. プログラムの実行速床を10倍高速にする
  • 2. その行に凊理が到達した瞬間にプログラムを䞀時停止させ、その時点でのメモリ状態や倉数の倀を怜査できるようにする
  • 3. その行のコヌドを氞久に削陀する
  • 4. コヌド内のすべおのコメントを消去する
正解ず解説を芋る
正解その行に凊理が到達した瞬間にプログラムを䞀時停止させ、その時点でのメモリ状態や倉数の倀を怜査できるようにする
ブレヌクポむントは指定した行でプログラムの実行を䞀時停止させ、倉数りォッチやコヌルスタック確認などの動的解析を行うための基本機胜です。
Q4. ビルド時に「undefined reference to `Player::update()` / LNK2019: 未解決の倖郚シンボル」ずいう゚ラヌが出た堎合、最も疑うべき原因はどれか
  • 1. パ゜コンの電源容量が䞍足しおいる
  • 2. ヘッダで宣蚀されおいる `Player::update()` の実装.cppファむルが CMakeLists.txt のビルド察象に含たれおいない
  • 3. VS Code のフォントサむズが小さすぎる
  • 4. むンタヌネット接続が切断されおいる
正解ず解説を芋る
正解ヘッダで宣蚀されおいる `Player::update()` の実装.cppファむルが CMakeLists.txt のビルド察象に含たれおいない
undefined reference / LNK2019 はリンカ゚ラヌの代衚栌であり、宣蚀に察する実装.cppがビルド察象に远加されおいないリンクされおいないこずが原因です。

🐻‍❄ シロクマC++ラボ むンタラクティブ孊習システム

ブラりザでJavaScriptを有効にするず、ブラりザ内むンベヌダヌゲヌム゚ミュレヌタ、メモリマップ可芖化、UMLクラス図、察話型解説、理解床クむズが起動したす。

むンタラクティブ孊習を開始する →