とても良い質問です。
結論から言うと、C++で「ツリー構造(ディレクトリ構成)」+「複数ファイル」で作られるプログラムは、世の中のソフトウェアのほとんどです。
初心者向けの教科書では main.cpp 1つだけですが、実際の現場では数十〜数百万ファイルになることもあります。大規模C++プロジェクトでは、`src`・`include`・`tests`・`docs`など役割ごとにディレクトリを分け、CMakeなどで管理する構成が一般的です。
① ゲーム
最も有名な例です。
Game/
├── src/
│ ├── main.cpp
│ ├── Player.cpp
│ ├── Enemy.cpp
│ ├── Map.cpp
│ └── Sound.cpp
├── include/
│ ├── Player.h
│ ├── Enemy.h
│ └── Map.h
├── assets/
│ ├── image/
│ ├── sound/
│ └── font/
└── CMakeLists.txt
例えば
- RPG
- シューティング
- Minecraft風ゲーム
- FPS
などはほぼこんな感じです。
業界話
ゲーム会社では
ゲームプログラマー
と
ゲームエンジンプログラマー
は別部署だったりします。
ゲーム
↓
Unreal Engine
↓
DirectX
↓
Windowsという巨大な積み重ねになっています。
② GUIアプリ
例えば
- メモ帳
- 電卓
- ペイントソフト
App/
├── Window.cpp
├── Button.cpp
├── Menu.cpp
├── Dialog.cpp
└── main.cppQtなどではもっと増えます。
MainWindow.cpp
SettingsDialog.cpp
ImageViewer.cpp
FileManager.cppなど。
雑学
WindowsのVisual Studioで
Solutionを開くと
Source Files
Header Files
Resourcesと分かれているのはこのためです。
③ ブラウザ
Chrome
Firefox
Edge
全部C++です。
フォルダだけでも
Browser/
├── network/
├── renderer/
├── javascript/
├── gpu/
├── ui/
├── media/
├── security/
こんな感じになります。
業界話
Chromeは数千万行規模と言われています。
全部読む人はいません。
担当部署だけ読みます。
④ OS
Windows
Linux
Android
macOS
も大量のC/C++です。
例えばLinux
kernel/
drivers/
net/
fs/
arch/
sound/
mm/
何千人もの開発者が分担しています。
雑学
Linuxは
「一人では絶対読めないソースコード」
として有名です。
⑤ コンパイラ
例えば
GCC
Clang内部は
Lexer
Parser
Optimizer
CodeGeneratorなどに分かれています。
Compiler/
├── lexer/
├── parser/
├── optimizer/
├── backend/
業界話
コンパイラ開発者は
「字句解析担当」
「最適化担当」
など専門が分かれています。
⑥ データベース
SQLite
MySQL
PostgreSQL
storage/
parser/
network/
transaction/
例えば
SELECT * FROM user;を書くと
Parser
↓
Optimizer
↓
Storage
↓
Disk
という流れになります。
⑦ CAD
AutoCAD
Fusion 360
SolidWorks
などもC++。
Renderer/
Model/
Mesh/
Camera/
Undo/雑学
CADは
数学
線形代数
幾何学
の塊です。
⑧ 画像編集ソフト
Photoshop
GIMP
Paint.NET(一部)
Image/
Layer/
Brush/
Filter/
Color/⑨ 動画編集
Premiere
DaVinci Resolve
Timeline/
Audio/
Video/
Codec/
GPU/業界話
動画編集ソフトは
GPU担当
Codec担当
UI担当
など完全分業です。
⑩ 3Dソフト
Blender
Maya
Mesh/
Animation/
Physics/
Lighting/
Material/⑪ AI・機械学習ライブラリ
PyTorch
TensorFlow
内部はほぼC++。
Pythonから使っているだけです。
Tensor/
CUDA/
CPU/
Math/
Optimizer/雑学
「Pythonは遅い」
と言われますが、
実際に重い計算は
Python
↓
C++
↓
GPU
で動いています。
⑫ 組み込み
家電
ロボット
自動車
Sensor/
Motor/
Network/
Control/
Display/業界話
自動車では
エンジン制御
ABS
エアバッグ
メーター
カーナビ
全部別チームだったりします。
⑬ サーバー
ゲームサーバー
チャット
Webサーバー
Network/
Database/
Login/
Packet/
Thread/現代のC++プロジェクトの典型構成
現在よく見かける構成は
MyProject/
├── include/ ← 公開ヘッダ
├── src/ ← 実装(.cpp)
├── tests/ ← テスト
├── docs/ ← ドキュメント
├── examples/ ← サンプル
├── build/ ← ビルド生成物
├── CMakeLists.txt
└── README.md
このようなレイアウトは、保守性・再利用性・ビルド効率を考慮した「定番」の形として広く採用されています。
面白い業界あるある
- 新人は迷子になる。 最初は「この関数どこ?」と探す時間の方が長いこともあります。
- ファイル数よりルールが重要。 10ファイルでも整理されていないと探しにくく、1万ファイルでも規則的なら意外と見つけやすいです。
- 名前付けは文化。 「ファイル名やフォルダ構成を見れば役割が分かる」のが理想で、優れたプロジェクト構成は設計書の代わりになるとも言われます。
C++の世界では、プログラムを書くこと以上に**「どう分割し、どう整理するか」**が重要視されます。大規模開発では、ディレクトリ構成そのものがソフトウェア設計の一部と考えられており、「きれいなツリー構造を設計できる人は、保守しやすいソフトウェアを作れる人」と評価されることも珍しくありません。