ビルドの基本

問題を報告 ソースを表示

ビルドシステムは、各デベロッパーが 1 日に数十、数百回も行う可能性があるため、エンジニアリング組織で最も重要な要素の一つです。組織の規模に合わせてデベロッパーの生産性を高めるには、フル機能のビルドシステムが必要です。個々のデベロッパーにとっては、コードをコンパイルするだけで済むため、ビルドシステムが過剰に思えるかもしれません。ただし、規模が大きい場合、ビルドシステムを使用すると、コードベースの別の部分や外部リソース(ライブラリなど)に依存するなど、共有依存関係の管理が容易になります。ビルドシステムを使用すると、コードのビルドに必要なものがすべて揃っていることを確認できます。また、ビルドシステムは、エンジニアがリソースと結果を共有できるように、設定時の速度も向上します。

このセクションでは、Bazel の開発に関する設計上の決定事項など、システムのビルドとビルドシステムの歴史と基本について説明します。Bazel、Buck、Pants などのアーティファクト ベースのビルドシステムに精通している場合は、このセクションをスキップしてもかまいませんが、アーティファクト ベースのビルドシステムがスケーリングの実現に優れている理由を理解するのに役立ちます。

  • ビルドシステムを使用する理由

    ビルドシステムを初めて使用する場合は、こちらから始めてください。このページでは、ビルドシステムを使用するべき理由と、組織が少数のデベロッパーを超えてスケールし始めた場合にコンパイラとビルド スクリプトが最適ではない理由について説明します。

  • タスクベースのビルドシステム

    このページでは、タスクベースのビルドシステム(Make、Maven、Gradle など)と、そのいくつかの課題について説明します。

  • アーティファクト ベースのビルドシステム

    このページでは、タスクベースのビルドシステムが抱える課題に対応する、アーティファクト ベースのビルドシステムについて説明します。

  • 分散ビルド

    このページでは、分散ビルド、つまりローカルマシンの外部で実行されるビルドについて説明します。これには、リソースを共有して結果を構築するための、より堅牢なインフラストラクチャが必要です(これはまさに魔法のようなものです)。

  • 依存関係の管理

    このページでは、大規模な依存関係の複雑な問題と、そうした問題を解消するための戦略について説明します。