MacでC++の実行環境を構築する際にめっちゃ詰まった記録

初めまして！！ノベルワークス入社2年目、プログラム初心者のそうまです！！

今回は`C++`の実行環境をMacで構築した際に、予想以上に詰まったので記録として残そうと思います！

エディタは`VSCode`を使います！

# 何故 `C++` なのか
僕は普段から`javascript`しか触っておらず、高級言語が故に裏でめんどくさい事はなんでも肩代わりしてくれるせいで、メモリや実行環境といった低レベルな部分を全く気にせずここまで生きてきてしまいました。

そこで、`javascript`よりも低級な言語をやってみて知識を蓄えようと思ったのですが、同時に「どの言語を学ぶべきか」や「ただ言語の勉強をするだけではモチベーションが続かない」 とも考えていました。
そんな中で、この「ゲーム開発で学ぶC言語入門 プロのクリエイターが教える基本文法と開発技法」という本に出会い、これなら楽しみながら学べそうだと思い、`C++` を選ぶことにしました。

https://amzn.asia/d/1gI3397

# 第一の壁 コンパイラ
まず「コンパイルとは何か？」ですが、プログラミング言語におけるコンパイルとは、人間が理解しやすい形式で書かれたコードを、コンピュータが実行できる機械語へと変換するプロセスを指します。

![頭整理.drawio (10).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1100170/91465990-4ee9-5adf-0707-25553487977f.png)

で、まずどのコンパイラを用いて`C++`で書いたコードをコンパイルするのかを決めるとこから始まったのですが、前提として "コンパイラを選ぶ" というステップに遭遇する事自体が初めてで普通に混乱しました、この時点で「C++ コンパイラ 種類」とか調べて既に時間を食っています。

今回はコンパイラに`clang++`を選びました！`Copilot`に聞いた所「Macではこちらの方が一般的」と教えてくれたからです（ここら辺の理由とかコンパイラの違いはまた別機会に調べようと思います）

こちらのコンパイラですが、以下のコマンドでインストール出来るみたいなので早速試してみました。
```shell
xcode-select --install
```

:::note info
xcode-selectとは
Appleが提供する統合開発環境（IDE）であるXcodeのコマンドラインツールを管理するためのコマンドです。
:::

すると以下のエラーが出現。
```shell
command not found: xcode
```
どうやら、`Homebrew`のインストールに問題があるみたいなので、解決するために以下のコマンドを入力。
```
brew doctor
```
再度 `xcode-select --install` する事で無事にコンパイラをインストール出来ました！

このコンパイラを使用して `C++` のコードをコンパイルするタスクを `VScode` に以下のように設定しました！

:::note info
VScodeのタスク機能
特定のコマンドやスクリプトを事前に設定ファイル(tasks.json)に登録しておく事で、ターミナルに手動でコマンドを入力しなくても簡単に実行出来る機能の事。
::::

```json:tasks.json
{
	"version": "2.0.0",
	"tasks": [
		{
            "type": "shell",
            "label": "c++_build",
            // 今回はC++のコンパイラを指定、gccかclang++か
            "command": "clang++",
            "args": [
                "-g",
                // コンパイルするファイルを指定、今回だと実行したファイル名が入る
                "${file}",
                // コンパイルしたファイルの名前を指定
                "-o",
                "${fileDirname}/build.out"
            ],
            // タスクのグループを指定
            "group": "build", 
            "presentation": {
                "reveal": "never"
            }
		}
	]
}

```

タスクの設定については以下の記事を参考にしました！ありがとうございました！

https://qiita.com/keitean/items/56a7e37577a6b05d0a81


# 第二の壁 デバッガー
次に開発では必須となる**デバッガー**を入れていきます。デバッガーとは、コードの実行を細かく制御しプログラムの挙動を詳細に分析出来るツールです。

こんな感じのやつ

![頭整理.drawio (11).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1100170/16e02bca-8e38-f91a-13f9-2137610fbb83.png)

デバッガーを入れる事も今回初めてだったのでかなり苦戦しました。特に「デバッガーをインストールする必要がある」という事を理解するまでに時間がかかりました...(コンパイラがあれば全部出来ると思ってた)

今回は `lldb` を使います！`VScode` の拡張機能に `CodeLLDB` が存在するのでインストールし、`VScode` のデバッグ構成に以下を追加します！

:::note info
VScodeのデバッグ設定
デバッグ構成を設定ファイル(launch.json) に記述する事で、デバッグの構成を作成・追加する事が出来る。
:::

```json:launch.json
{
	"version": "0.2.0",
	"configurations": [
		{
			// デバッグの名前を指定
			"name": "c++_debug",
			// デバッガーの指定、今回はlldbを指定
			"type": "lldb",
			"request": "launch",
			// デバッグするファイルを指定、タスクでコンパイルしたファイルを指定
			"program": "${fileDirname}/build.out",
			"args": [""],
			"cwd": "${fileDirname}",
			"preLaunchTask": "c++_build",
		}
	]
}
```



こちらも以下の記事を参考にしました！！ありがとうございました！！

https://qiita.com/keitean/items/56a7e37577a6b05d0a81

デバッグの起動構成について

https://code.visualstudio.com/docs/editor/debugging#_launch-configurations

# 最後に
コンパイルしたコードの実行タスクを以下のように設定して、構築完了です！
```json:tasks.json
{
    // コンパイルしたファイルを実行するタスク
    "type": "shell",
    "label": "c++_run",
    "command": "${fileDirname}/build.out",
    "group": "test",
    "presentation": {
        "reveal": "always",
        "panel": "new"
    }
}       
```

# 纏め
まだまだ入り口なのに、コンパイラやらデバッガーやら知らない事が多すぎて自分がいかに`javascript`(というよりブラウザ？)に甘やかされていたかを痛感しています...これから低レベルな知識をしっかり身につけて、少しずつでもエンジニアとして成長していきたいと思います！一歩ずつ着実に頑張ります！