Bazel を使用する理由

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

Bazel は高速

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

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

Bazel は正確

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

無限の make clean 呼び出しや、ビルドされなかったソースコードで実際には解決されたファントム バグ の追跡に別れを告げましょう。

Bazel は拡張可能

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

Bazel ルールは、Python のサブセットである 社内プログラミング言語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 サービスなどのツール、サービス 、ドキュメントをご覧ください。オープンソース ソフトウェア リポジトリでプログラミング言語のサポートなどの拡張機能をご覧ください。