ソフトウェア デベロッパーは、導入と拡張が容易なツールを使用して、あらゆる規模や複雑さのプロジェクトを効率的にビルド、テスト、パッケージ化できます。
エンジニアはビルドの基本を当然のことと考えることができます。ビルドとテストの機械的なプロセスが解決されているため、ソフトウェア デベロッパーはコードの作成というクリエイティブなプロセスに集中できます。新しい言語や組織固有のニーズをサポートするようにビルドシステムをカスタマイズする場合、ユーザーは基本的な配管を再構築することなく、ユースケースに固有の拡張性の側面に集中できます。
エンジニアはあらゆるプロジェクトに簡単に貢献できます。新しいプロジェクトの作業を開始したいデベロッパーは、プロジェクトをクローンしてビルドを実行するだけです。ローカル構成は不要で、すぐに使用できます。クロスプラットフォームのリモート実行を使用すると、どこからでも任意のマシンで作業でき、プロジェクトが対象とするすべてのプラットフォームに対して変更を完全にテストできます。 エンジニアは、新しいプロジェクトのビルドをすばやく構成したり、既存のビルドを段階的に移行したりできます。
プロジェクトは、あらゆるサイズのコードベース、あらゆるサイズのチームにスケーリングできます。高速で段階的なテストにより、チームは変更をコミットする前にすべての変更を完全に検証できます。これは、リポジトリが増加し、プロジェクトが複数のリポジトリにまたがり、複数の言語が導入された場合でも変わりません。インフラストラクチャにより、デベロッパーはテスト カバレッジとビルド速度をトレードオフする必要がありません。
Bazel には、このビジョンを実現する可能性があると考えています。
Bazel は、再現可能(特定の入力セットで常に同じ出力が生成される)で移植可能(ビルドは出力に影響を与えることなく任意のマシンで実行できる)なビルドを可能にするために、ゼロから構築されました。
これらの特性は、安全な増分性(変更された入力のみを再ビルドしても破損のリスクがない)と分散性(ビルドアクションが分離され、オフロードできる)をサポートします。正しいビルドに必要な作業を最小限に抑え、複数のコアとリモート システムでその作業を並列化することで、Bazel はあらゆるビルドを高速化できます。
Bazel の抽象化レイヤ(言語、プラットフォーム、ツールチェーンに固有の命令がシンプルな拡張言語で実装されている)により、あらゆるコンテキストに簡単に適用できます。
Bazel のコア コンピテンシー
- Bazel は多言語、マルチプラットフォーム のビルドとテストをサポートしています。対象とする言語とプラットフォームの組み合わせに関係なく、単一のコマンドを実行してソースツリー全体をビルドしてテストできます。
- Bazel ビルドは高速かつ正確 です。すべてのビルドとテストの実行は、デベロッパーのマシンと CI で段階的に行われます。
- Bazel は、任意の言語またはプラットフォームのビルドを定義するための統一された拡張可能な言語 を提供します。
- Bazel を使用すると、リモート実行サービスとキャッシュ サービスに接続することで、ビルドをスケーリング できます。
- Bazel はすべての主要な開発プラットフォーム (Linux、MacOS、Windows)で動作します。
- Bazel の導入には労力がかかりますが、段階的な導入 が可能です。Bazel は、特定の言語/プラットフォームのデファクト スタンダード ツールと連携します。
言語コミュニティへのサービス提供
ソフトウェア エンジニアリングは、言語コミュニティ(通常、共通のツールとプラクティスを使用する自己組織化されたグループ)のコンテキストで進化します。
言語コミュニティのメンバーにとって有用であるためには、そのコミュニティのワークフローと慣例に統合された高品質の Bazel ルールが利用可能である必要があります。
Bazel は、拡張可能でオープンであり、あらゆる言語に適したルールセットをサポートすることに取り組んでいます。
優れたルールセットの要件
- ルールは、コード カバレッジなど、言語の効率的なビルドとテスト をサポートする必要があります。
- ルールは、言語の広く使用されている「パッケージ マネージャー」と連携 し(Java の Maven など)、広く使用されている他のビルドシステムからの段階的な移行パスをサポートする必要があります。
- ルールは、拡張可能で相互運用可能である必要があります。これは、"Bazel サンドイッチ" の原則に従います。
- ルールはリモート実行に対応 している必要があります。実際には、 toolchains メカニズムを使用して構成可能であることを意味します。
- ルール(および Bazel)は、言語の広く使用されている IDE と連携する必要があります(存在する場合)。
- ルールには、徹底的で使いやすいドキュメント が必要です。新規ユーザー向けの入門資料、エキスパート ユーザー向けの包括的なドキュメントが必要です。
これらの各項目は不可欠であり、これらを組み合わせることで、特定のエコシステムに対する Bazel のコンピテンシーが実現します。
また、これらは概ね十分です。すべてが満たされると、Bazel はその言語コミュニティのメンバーにその価値を完全に提供します。