Bazel は、業界をリードするエコシステムで複数の言語、リポジトリ、プラットフォームをサポートする、統合テストを備えた、高速で正確かつ拡張可能なビルドツールです。
Bazel は高速
Bazel は、各ビルドコマンドで必要な入力ファイルを正確に把握しているため、ビルド間で入力ファイルセットが変更された場合にのみ再実行することで、不要な作業を回避できます。同じコンピュータ内またはリモート ビルドノードで、可能な限り多くの並列処理を使用してビルドコマンドを実行します。ビルドの構造が許せば、数千のビルド コマンドまたはテストコマンドを同時に実行できます。
これは、メモリ内、ディスク上、リモート ビルドファーム(利用可能な場合)の複数のキャッシュ レイヤによってサポートされます。Google では、通常、99% を超えるキャッシュ ヒット率を達成しています。
Bazel が正しい
Bazel では、バイナリが独自のソースコードからのみビルドされるようにします。Bazel アクションは個別のサンドボックスで実行され、Bazel はビルドのすべての入力ファイルを追跡し、必要に応じてのみビルドコマンドを再実行します。これによりバイナリが常に最新の状態になり、同じソースコードから常に同じバイナリがビット単位で生成されるようになります。
無限の make clean
呼び出しや、ビルドされなかったソースコードで実際に解決済みだったファントムバグの追跡に別れを告げましょう。
Bazel は拡張可能
独自のルールとマクロを作成して、さまざまなプロジェクトの特定のニーズに合わせて Bazel をカスタマイズし、Bazel の機能を最大限に活用します。
Bazel ルールは、Google の社内プログラミング言語である Starlark で記述されます。これは Python のサブセットです。Starlark を使用すると、ほとんどのデベロッパーがルールの作成にアクセスできるようになります。また、エコシステム全体で使用できるルールを作成することもできます。
統合されたテスト
Bazel の統合テストランナーは、再実行が必要なテストのみを認識して実行し、リモート実行(利用可能な場合)を使用してテストを並行して実行します。リモート実行を使用してテストを数千回すばやく実行し、フラークを早期に検出します。
Bazel は、テスト結果を中央の場所にアップロードする機能を提供します。これにより、CI 上または個々のデベロッパーによるテスト結果の効率的な共有が容易になります。
多言語対応
Bazel は、C++、Java、Kotlin、Python、Go、Rust など、多くの一般的なプログラミング言語をサポートしています。1 つの言語の慣用的なビルドツールに制限されることなく、同じ Bazel 呼び出しで複数のバイナリ(バックエンド、ウェブ UI、モバイルアプリなど)をビルドできます。
マルチリポジトリのサポート
Bazel は複数のロケーションからソースコードを収集できます。依存関係をベンダーにする必要はありません(できますが)。代わりに、ソースコードまたはビルド済みアーティファクト(git リポジトリや Maven Central など)の場所を Bazel に指示すると、残りの処理は Bazel が行います。
マルチプラットフォームのサポート
Bazel では、Linux、macOS、Windows、Android など、複数のプラットフォーム用のプロジェクトを同時にビルドできます。また、強力なクロスコンパイル機能も提供されており、別のプラットフォームでビルドを実行しながら、1 つのプラットフォームのコードもビルドできます。
幅広いエコシステム
業界のリーダーは Bazel を高く評価しており、Bazel を使用して貢献するデベロッパーの大きなコミュニティを構築しています。Bazel で使用できるコンサルティングと SaaS サービスなど、ツール、サービス、ドキュメントを確認する。オープンソース ソフトウェア リポジトリで、プログラミング言語のサポートなどの拡張機能を確認する。