Bazel を使用する理由

問題を報告する ソースを表示 Nightly · 8.4 · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

Bazel は、業界をリードするエコシステムで複数の言語リポジトリプラットフォームをサポートする、統合テストを備えた高速正確拡張可能なビルドツールです。

Bazel は高速です

Bazel は各ビルド コマンドに必要な入力ファイルを正確に把握しているため、各ビルド間で入力ファイルのセットが変更された場合にのみ再実行することで、不要な作業を回避します。同じコンピュータ内またはリモート ビルドノードで、可能な限り並列処理でビルドコマンドを実行します。ビルドの構造で許容される場合は、数千ものビルド コマンドまたはテストコマンドを同時に実行できます。

これは、複数のキャッシュ保存レイヤ(メモリ内、ディスク上、リモート ビルドファーム(利用可能な場合))でサポートされています。Google では、キャッシュ ヒット率が 99% を超えることがよくあります。

Bazel は正しい

Bazel は、バイナリが独自のソースコードからのみビルドされるようにします。Bazel アクションは個別のサンドボックスで実行され、Bazel はビルドのすべての入力ファイルを追跡し、必要な場合にのみビルドコマンドを再実行します。これにより、バイナリが最新の状態に保たれ、同じソースコードから常に同じバイナリが生成されるようになります。

make clean の無限の呼び出しや、実際にはビルドされなかったソースコードで解決済みのファントム バグを追跡する必要がなくなります。

Bazel は拡張可能

独自のルールとマクロを作成して Bazel をカスタマイズし、さまざまなプロジェクトの特定のニーズに対応することで、Bazel の機能を最大限に活用できます。

Bazel ルールは、Python のサブセットである Google の社内プログラミング言語 Starlark で記述されています。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 など、複数のプラットフォーム向けにプロジェクトを同時にビルドできます。また、別のプラットフォームでビルドを実行しながら、あるプラットフォームのコードをビルドするための強力なクロス コンパイル機能も提供します。

幅広いエコシステム

業界のリーダーは Bazel を愛用しており、Bazel を使用して貢献するデベロッパーの大きなコミュニティを構築しています。Bazel で使用できるコンサルティングや SaaS サービスなど、ツール、サービス、ドキュメントを見つけます。オープンソース ソフトウェア リポジトリで、プログラミング言語のサポートなどの拡張機能を確認する。