各デベロッパーが 1 日に数十回または数百回操作する可能性があるため、ビルドシステムはエンジニアリング組織の最も重要な部分の 1 つです。組織の規模が拡大するにつれてデベロッパーの生産性を高めるには、フル機能のビルドシステムが必要です。個々のデベロッパーにとって、コードをコンパイルするだけなら簡単なため、ビルドシステムは過剰に思えるかもしれません。ただし、大規模なプロジェクトでは、ビルドシステムを使用すると、コードベースの別の部分やライブラリなどの外部リソースへの依存など、共有依存関係を管理できます。ビルドシステムを使用すると、ビルドを開始する前に、コードのビルドに必要なものがすべて揃っていることを確認できます。エンジニアがリソースと結果を共有できるようにビルドシステムを設定すると、速度も向上します。
このセクションでは、Bazel の設計に関する意思決定など、ビルドとビルドシステムの歴史と基本について説明します。Bazel、Buck、Pants などのアーティファクト ベースのビルドシステムに精通している場合は、このセクションをスキップできますが、アーティファクト ベースのビルドシステムがスケールを可能にする理由を理解するには、この概要が役立ちます。
-
ビルドシステムを初めて使用する場合は、まずこちらをご覧ください。このページでは、ビルドシステムを使用する理由と、組織が数人のデベロッパーを超えてスケーリングを開始したときに、コンパイラとビルド スクリプトが最適な選択肢ではない理由について説明します。
-
このページでは、タスクベースのビルドシステム(Make、Maven、Gradle など)と、その課題について説明します。
-
このページでは、タスクベースのビルドシステムの課題に対応するアーティファクト ベースのビルドシステムについて説明します。
-
このページでは、分散ビルド(ローカルマシンの外部で実行されるビルド)について説明します。これには、リソースを共有して結果を構築するためのより堅牢なインフラストラクチャが必要です(これが真の魔法が起こる場所です)。
-
このページでは、大規模な依存関係の複雑さと、その複雑さを軽減するための戦略について説明します。