Bazel を使用する理由

問題を報告 ソースを表示 毎晩

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

Bazel は高速

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

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

Bazel は正常です

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

終わりのない make clean 呼び出しや、ビルドされないソースコードで実際には解決されたファントム バグの追跡などに役立ちます。

Bazel は拡張可能

独自のルールとマクロを作成し、幅広いプロジェクトの特定のニーズに合わせて Bazel をカスタマイズすることで、Bazel を最大限に活用できます。

Bazel ルールは、Python のサブセットである社内プログラミング言語である Starlark で記述されます。Starlark は、ほとんどのデベロッパーがルールを作成できるようにしながら、エコシステム全体で使用できるルールも作成します。

統合されたテスト

Bazel の統合テストランナーは、リモート実行(使用可能な場合)を使用して、再実行が必要なテストのみを認識して実行します。リモート実行を使用してテストを数千回すばやく実行することで、フレークを早期に検出します。

Bazel は、テスト結果を中央の場所にアップロードする機能を提供します。これにより、CI であれ個々のデベロッパーであれ、テスト結果の効率的な通信が容易になります。

多言語対応

Bazel は、C++、Java、Kotlin、Python、Go、Rust など、一般的なプログラミング言語を数多くサポートしています。1 つの言語の慣用的なビルドツールに制約されることなく、1 回の Bazel 呼び出しで複数のバイナリ(バックエンド、ウェブ UI、モバイルアプリなど)をビルドできます。

マルチリポジトリのサポート

Bazel では、複数の場所からソースコードを収集できます。依存関係をベンダー化する必要はありません(ただし、ベンダーをベンダーにできます)。Bazel がソースコードまたはビルド済みアーティファクト(Git リポジトリや Maven Central など)の場所を指すようにすれば、残りは Bazel が処理します。

マルチプラットフォーム サポート

Bazel では、Linux、macOS、Windows、Android などの複数のプラットフォーム用のプロジェクトを同時にビルドできます。また、強力なクロスコンパイル機能により、あるプラットフォーム用のコードをビルドしながら、別のプラットフォームでビルドを実行することもできます。

広範なエコシステム

Bazel は、Bazel を使用し、それに貢献する開発者の大規模なコミュニティを構築している、業界リーダーのコミュニティです。Bazel で使用できるコンサルティング サービスや SaaS サービスなど、ツール、サービス、ドキュメントをご覧ください。Google のオープンソース ソフトウェア リポジトリで、プログラミング言語のサポートなどの拡張機能を確認する。