Bazel Vision

問題を報告する ソースを表示 ナイトリー · 8.0 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

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

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

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

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

これらの項目はそれぞれ重要であり、特定のエコシステムに対する Bazel の能力を発揮するには、それらを組み合わせる必要があります。

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