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