ビルドシステム(ビルドシステム)
ソースコードから実行可能なバイナリやアプリケーションを生成する工程を管理するツール群。Make / CMake / Bazel / Buck2 / Ninja / Mill 等が代表例。
概要
ビルドシステム(Build System)は、ソースコードから実行可能なバイナリ・ライブラリ・アプリケーションを生成する工程を管理するツール群を指す。依存関係解析、インクリメンタルビルド、並列実行、キャッシング、配布等を担う。1977 年の Make から始まり、CMake / Autotools / SCons を経て、2026 年現在は Bazel(Google 由来)/ Buck2(Meta 由来、Rust 製)/ Ninja / Mill(Scala) が新世代として産業実装されている。
主要なビルドシステム(2026 年時点)
| ツール | 由来 | 言語 | 特徴 |
|---|---|---|---|
| GNU Make | 1977-(FSF) | shell + Makefile | OS / Linux カーネル等で現役、シンプル |
| CMake | 2000-(Kitware) | CMakeLists.txt | C++ デファクト、ジェネレータ |
| Bazel 7 | 2015-(Google) | Starlark | リモートキャッシュ + 大規模 monorepo |
| Buck2 | 2023-(Meta、OSS) | Rust + Starlark | Bazel の不満を解消、超高速 |
| Ninja 1.12 | 2010-(Google) | 専用 syntax | CMake バックエンドとして高速 |
| Pants v2 | 2014-(Twitter→OSS) | Python + BUILD | Python / Java / Go 等の monorepo 向け |
| Mill 0.12 | 2018-(Lihaoyi) | Scala | Scala / Kotlin / Java 用、SBT 代替 |
| Gradle 8.10 | 2007-(Gradleware) | Groovy / Kotlin DSL | Android 標準、Kotlin DSL 主流化 |
| Cargo | 2014-(Rust 公式) | Rust + TOML | Rust 言語専用、シンプル |
| Bun | 2022-(Oven) | JS / TS | JS ランタイム + パッケージマネージャ + バンドラ |
主な特徴・仕組み
- 依存グラフ: ソース → 中間ファイル → 成果物の DAG を構築
- インクリメンタルビルド: 変更ファイルとその依存のみ再ビルド
- キャッシング: ローカル / リモートでビルド成果物を再利用
- 並列実行: CPU コア数に合わせてジョブを並列処理
- クロスプラットフォーム: Linux / macOS / Windows / iOS / Android 等の同時ビルド
- Sandbox: 各ビルドステップを独立環境で実行、再現性確保
ベンチマーク(C++ 中規模プロジェクト)
| 環境 | Bazel | Buck2 | Ninja | Make |
|---|---|---|---|---|
| クリーンビルド(30 万行) | 18 分 | 12 分 | 22 分 | 35 分 |
| インクリメンタル(1 ファイル変更) | 8 秒 | 4 秒 | 10 秒 | 30 秒 |
| キャッシュヒット時 | 2 秒 | 1 秒 | 5 秒 | N/A |
自作 PC / 開発機環境での選び方
- 個人 / 小規模開発: Make / CMake + Ninja で十分(Ryzen 5 7600 / 32 GB RAM)
- 中規模 monorepo: Buck2 + ローカルキャッシュ(Ryzen 7 9700X / 64 GB RAM)
- 大規模 / 複数言語: Bazel + Remote Cache(Ryzen 9 9900X / 128 GB RAM / NVMe 4 TB)
- Rust 専門: Cargo(特別な選択不要)
- Web フロントエンド: Bun / Vite + Turborepo(タスクランナー)
関連用語との違い
| 用語 | 違い |
|---|---|
| パッケージマネージャ | npm / pip / cargo 等。ビルドシステムはパッケージ取得後の生成工程 |
| タスクランナー | Turborepo / Nx 等は monorepo の上位タスク管理。ビルドシステムは下位の実ビルド |
| CI/CD ツール | GitHub Actions / GitLab CI 等は実行環境。ビルドシステムを呼び出す側 |
| トランスパイラ | Babel / TypeScript 等の言語変換。ビルドシステムから呼び出される |
よくある質問
Q1: Bazel と Buck2、どちらを選ぶ? A: Google エコシステム(Android NDK / Tensorflow 等)に近いなら Bazel。Meta エコシステム(React Native / Hermes 等)or 速度優先なら Buck2。Rust 製で Bazel より起動が圧倒的に速い。
Q2: Make / CMake は時代遅れ? A: 全く違う。Linux カーネル / Git / Vim 等は今も Make。CMake は C++ で事実上のデファクト。新規大規模プロジェクトのみ Bazel / Buck2 を検討する程度。
Q3: Web フロントエンド開発にビルドシステムは必要? A: Bun / Vite で大半は完結(npm scripts + 内部バンドラ)。monorepo になった時点で Turborepo / Nx を追加、超大規模で Bazel 検討。
まとめ
- ソースから成果物を生成する 依存解決・キャッシング・並列実行ツール
- 2026 年は Bazel 7 / Buck2 / Ninja 1.12 が大規模開発の主軸
- 個人 / 小規模は Make / CMake / Cargo / Bun で十分