🍣

モダンC++ 開発環境テンプレートのご紹介

2024/10/23に公開

C++は1983年から開発が始まったプログラミング言語であり、開発環境や機能に関わる情報もインターネット上に溢れています。しかし、個人的には環境構築の複雑さエラーメッセージがとても分かりずらいなのが2大障壁になって導入ハードルが高いと思っています。

本テンプレートでは、VSCodeの機能を活用し、環境構築の複雑さを少しでも緩和することを目標とします。

テンプレート概要

https://github.com/akutsu-kei/cpp-dev-template/tree/main
c = Add(a, b) 関数の実装とTestingのみが含まれる簡易なプログラムです。

使用ツール類

エントリーポイント

アプリケーション実行用のエントリーポイントは、cliディレクトリに配置します。
https://github.com/akutsu-kei/cpp-dev-template/blob/main/cli/main.cpp

テスト実行用のエントリーポイントはGoogle testで管理され、testの本体はtestsディレクトリに配置します。
https://github.com/akutsu-kei/cpp-dev-template/blob/main/tests/add_test.cc

事前インストール

使い方

Clone

git clone https://github.com/akutsu-kei/cpp-dev-template.git
cd cpp-dev-template

アプリケーション実行

docker compose up run --build
# run-1  | Hello, World!
# run-1  | 1 + 2 = 3
# run-1  | OpenCV version: 4.5.4

テスト実行

docker compose up test --build
# test-1  | [==========] Running 1 test from 1 test suite.
# test-1  | [----------] Global test environment set-up.
# test-1  | [----------] 1 test from AddTest
# test-1  | [ RUN      ] AddTest.add
# test-1  | [       OK ] AddTest.add (0 ms)
# test-1  | [----------] 1 test from AddTest (0 ms total)
# test-1  | 
# test-1  | [----------] Global test environment tear-down
# test-1  | [==========] 1 test from 1 test suite ran. (0 ms total)
# test-1  | [  PASSED  ] 1 test.

デバッグ

1. ディレクトリをVSCodeで開く

2. Dev containerを起動する

F1キーを押して、画像のコマンドを実行

cpp.Dockerfileの記述通りにビルドしたイメージが起動され、.devcontainer.jsonの記述通りにVSCodeが起動されます。.devcontainer.jsonでは、インストールするVSCode extensionや起動時の自動実行コマンドなどが設定できます。
https://github.com/akutsu-kei/cpp-dev-template/blob/main/.devcontainer/devcontainer.json

https://github.com/akutsu-kei/cpp-dev-template/blob/main/.devcontainer/cpp.Dockerfile

3. アプリケーションのデバッグ実行

Run & Debugより、アプリケーションのデバッグ実行

tasks.jsonの記述通りにCMake/makeされ、launch.jsonの記述通りにバイナリが起動され、デバッグシンボルが読み込れます。

https://github.com/akutsu-kei/cpp-dev-template/blob/main/.vscode/tasks.json

https://github.com/akutsu-kei/cpp-dev-template/blob/main/.vscode/launch.json

4. テストのデバッグ実行

同様にして、テストのデバッグ実行

変数Watch, Callstack, Memory dump, Disassemblyも閲覧可能です。
ここまで見れればVSCodeで全てできるかなーと。

開発時のフロー

(後で書きます。多分。。)

ライブラリ追加時

ソースコードファイル追加時

ヘッドウォータース

Discussion