Bazel Vision

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

  • エンジニアは構築の基礎は当然のことだと考えることができます。ソフトウェア デベロッパーは、ビルドとテストの機械的なプロセスが解決されるため、コードを作成する創造的なプロセスに集中できます。新しい言語や独自の組織ニーズに対応するようにビルドシステムをカスタマイズする場合、ユーザーは基本的な実装を最初からやり直すことなく、ユースケースに固有の拡張性を重視できます。

  • あらゆるプロジェクトにエンジニアが簡単に貢献できます。新しいプロジェクトで作業を開始するデベロッパーは、プロジェクトのクローンを作成してビルドを実行するだけです。ローカルに構成する必要はありません。すぐに使用できます。クロス プラットフォームのリモート実行により、どこでも任意のマシンで作業でき、プロジェクトの対象となるすべてのプラットフォームに対して変更を完全にテストできます。エンジニアは、新しいプロジェクトのビルドを簡単に構成したり、既存のビルドを段階的に移行したりできます。

  • プロジェクトは、あらゆるサイズのコードベースやあらゆる規模のチームにスケールできます。高速の増分テストにより、すべての変更を commit する前に完全に検証できます。これは、リポジトリが拡大し、プロジェクトが複数のリポジトリにまたがり、複数の言語が導入されても変わりません。インフラストラクチャでは、テスト カバレッジとビルド速度のトレードオフをデベロッパーに強制しません。

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

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

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

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

Bazel コア コンピテンシー

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

サービス提供言語コミュニティ

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

言語コミュニティのメンバーを使用するには、そのコミュニティのワークフローと規則と統合される高品質の Bazel ルールを使用する必要があります。

Bazel は、拡張可能でオープンであり、あらゆる言語で適切なルールセットをサポートすることを目指しています。

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

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

これらの項目はいずれも重要であり、これらを組み合わせることで、特定のエコシステムで Bazel の能力を発揮できます。

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