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. ルールは remote-executionready である必要があります。これは、ツールチェーン メカニズムを使用して構成できることを意味します。
  5. その言語の広く使用されている IDE(存在する場合)と、ルール(および Bazel)を連携させる必要があります。
  6. ルールには、入念で使いやすいドキュメント、新規ユーザー向けの入門資料、エキスパート ユーザー向けの包括的なドキュメントを含める必要があります。

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

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