Bazel を使用する理由

問題を報告 ソースを表示

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

Bazel は高速です。

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

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

Bazel は正しい

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

make clean を無限に呼び出すことや、実際にはビルドされないソースコード内で解決された架空のバグを追いかけることに対して、グッドバイトを言ってください。

Bazel は拡張可能です。

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

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

統合されたテスト

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

Bazel には、テスト結果を 1 か所にアップロードする機能が用意されています。これにより、CI 上や個々のデベロッパーによるテスト結果の効率的なコミュニケーションが容易になります。

多言語対応

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

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

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

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

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

広範なエコシステム

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