Bazel Vision

問題を報告する ソースを表示 Nightly · 8.4 · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

ソフトウェア デベロッパーは、採用と拡張が容易なツールを使用して、あらゆる規模や複雑さのプロジェクトを効率的にビルド、テスト、パッケージ化できます。

  • エンジニアはビルドの基本を当然のことと考えることができます。ソフトウェア デベロッパーは、ビルドとテストの機械的なプロセスが解決されているため、コードの作成というクリエイティブなプロセスに集中できます。新しい言語や組織固有のニーズをサポートするためにビルドシステムをカスタマイズする場合、ユーザーは基本的な配管を再発明することなく、ユースケースに固有の拡張性の側面に集中できます。

  • エンジニアはどのプロジェクトにも簡単に貢献できます。新しいプロジェクトに取り組む開発者は、プロジェクトのクローンを作成してビルドを実行するだけで済みます。ローカル構成は不要で、そのまま使用できます。クロス プラットフォーム リモート実行を使用すると、どこでもどのマシンでも作業でき、プロジェクトの対象となるすべてのプラットフォームに対して変更を完全にテストできます。エンジニアは、新しいプロジェクトのビルドをすばやく構成したり、既存のビルドを段階的に移行したりできます。

  • プロジェクトは、あらゆるサイズのコードベース、あらゆるサイズのチームに対応できます。高速で増分テストを行うことで、チームはすべての変更をコミット前に完全に検証できます。リポジトリが拡大し、プロジェクトが複数のリポジトリにまたがり、複数の言語が導入された場合でも、この原則は変わりません。インフラストラクチャでは、テスト カバレッジとビルド速度をトレードオフする必要はありません。

Google は、Bazel がこのビジョンを実現する可能性を秘めていると考えています。

Bazel は、再現可能(特定の入力セットで常に同じ出力が生成される)で移植可能(ビルドは出力に影響を与えることなくどのマシンでも実行できる)なビルドを実現するために、ゼロから構築されました。

これらの特性により、安全な増分性(変更された入力のみを再ビルドしても破損のリスクがない)と分散性(ビルド アクションが分離され、オフロードできる)がサポートされます。Bazel は、正しいビルドに必要な作業を最小限に抑え、その作業を複数のコアとリモート システムに並列化することで、あらゆるビルドを高速化できます。

Bazel の抽象化レイヤ(言語、プラットフォーム、ツールチェーンに固有の命令をシンプルな拡張言語で実装)により、あらゆるコンテキストに簡単に適用できます。

Bazel のコア コンピテンシー

  1. Bazel は、多言語、マルチプラットフォームのビルドとテストをサポートしています。対象とする言語とプラットフォームの組み合わせに関係なく、単一のコマンドを実行してソースツリー全体をビルドしてテストできます。
  2. Bazel ビルドは高速で正確です。ビルドとテストの実行は、開発者のマシンと CI で増分的に行われます。
  3. Bazel は、任意の言語やプラットフォームのビルドを定義するための統一された拡張可能な言語を提供します。
  4. Bazel を使用すると、リモート実行サービスとキャッシュ サービスに接続してビルドをスケーリングできます。
  5. Bazel は、すべての主要な開発プラットフォーム(Linux、MacOS、Windows)で動作します。
  6. Bazel の導入には労力がかかることを認識していますが、段階的な導入は可能です。Bazel は、特定の言語/プラットフォームの事実上の標準ツールと連携します。

言語コミュニティへの貢献

ソフトウェア エンジニアリングは、言語コミュニティ(通常は、共通のツールと手法を使用する自己組織化されたグループ)のコンテキストで進化します。

言語コミュニティのメンバーにとって有用なものにするには、そのコミュニティのワークフローと慣例に統合された高品質の Bazel ルールを利用できるようにする必要があります。

Bazel は、拡張可能でオープンであり、あらゆる言語に対応した優れたルールセットをサポートすることに尽力しています。

適切なルールセットの要件

  1. ルールは、コード カバレッジなど、言語の効率的なビルドとテストをサポートする必要があります。
  2. ルールは、言語の広く使用されている「パッケージ マネージャー」と連携し(Java の Maven など)、他の広く使用されているビルドシステムからの増分移行パスをサポートする必要があります。
  3. ルールは、「Bazel サンドイッチ」の原則に従って、拡張可能で相互運用可能である必要があります。
  4. ルールはリモート実行に対応している必要があります。実際には、これは ツールチェーン メカニズムを使用して構成可能であることを意味します。
  5. ルール(および Bazel)は、言語に 広く使用されている IDE がある場合は、その IDE と連携する必要があります。
  6. ルールには、新規ユーザー向けの入門資料、上級ユーザー向けの包括的なドキュメントなど、徹底的で使いやすいドキュメントが必要です。

これらの項目はそれぞれ不可欠であり、これらが組み合わさって初めて、特定のエコシステムにおける Bazel のコンピテンシーが実現されます。

また、これらの要件は概ね十分です。すべての要件が満たされると、Bazel はその言語コミュニティのメンバーにその価値を十分に提供します。