Bazel Vision

問題を報告する ソースを表示

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

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

  • エンジニアはあらゆるプロジェクトに簡単に貢献できます。新しいプロジェクトに取り掛かりたいデベロッパーは、単にプロジェクトのクローンを作成してビルドを実行できます。ローカルの構成は必要なく、問題なく機能します。クロス プラットフォームのリモート実行では、場所を問わずどのマシンでも動作し、プロジェクトの対象となるすべてのプラットフォームに対して変更を完全にテストできます。エンジニアは、新しいプロジェクト用のビルドを迅速に構成したり、既存のビルドを段階的に移行したりできます。

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

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. ルールは、その言語用に広く使用されている「パッケージ マネージャー」とのインターフェース(Maven for Java など)であり、他の広く使用されているビルドシステムからの増分移行パスをサポートする必要があります。
  3. ルールは、「Bazel サンドイッチ」の原則に従って拡張可能で相互運用可能である必要があります。
  4. ルールは、リモート実行に対応している必要があります。実際には、ツールチェーンを使用して構成できます
  5. ルール(および Bazel)は、その言語で広く使用されている IDE(存在する場合)とやり取りする必要があります。
  6. ルールには、新規ユーザー向けの入門資料、エキスパート ユーザー向けの包括的なドキュメントなど、十分に使いやすいドキュメントが必要です。

これらの項目はどれも不可欠であり、特定のエコシステムにおいて Bazel の能力を発揮するだけです。

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