Bazel の概要

問題を報告 ソースを表示 ナイトリー · 8.0 · 7.4 · 7.3 · 7.2 · 7.1 · 7.0 · 6.5

Bazel は、Make、Maven、Gradle に似たオープンソースのビルドとテストのツールです。人が読める高レベルのビルド言語を使用します。Bazel は複数の言語のプロジェクトをサポートし、複数のプラットフォームの出力をビルドします。Bazel は、複数のリポジトリにまたがる大規模なコードベースと多数のユーザーをサポートしています。

利点

Bazel には次のような利点があります。

  • 高レベルのビルド言語。Bazel は、人間が読み取り可能な抽象的な言語を使用して、プロジェクトのビルドプロパティを高いセマンティック レベルで記述します。他のツールとは異なり、Bazel はライブラリ、バイナリ、スクリプト、データセットのコンセプトに基づいて動作するため、コンパイラやリンカーなどのツールへの個々の呼び出しを記述する複雑さから解放されます。

  • Bazel は高速で信頼性が高い。Bazel は、以前に行われたすべての作業をキャッシュに保存し、ファイル コンテンツとビルドコマンドの両方の変更を追跡します。これにより、Bazel は再ビルドが必要なときにのみ再ビルドします。ビルドをさらに高速化するには、高度な並列処理と増分ビルドでビルドするようにプロジェクトを設定します。

  • Bazel はマルチプラットフォームです。Bazel は Linux、macOS、Windows で動作します。Bazel では、同じプロジェクトから、デスクトップ、サーバー、モバイルなど、複数のプラットフォーム用のバイナリとデプロイ可能なパッケージをビルドできます。

  • Bazel スケール。Bazel は、10 万を超えるソースファイルを含むビルドを処理しながら、アジリティを維持します。複数のリポジトリと数十万人のユーザーベースで動作します。

  • Bazel は拡張可能です。多くの言語がサポートされており、Bazel を拡張して他の言語やフレームワークをサポートできます。

Bazel の使用

Bazel でプロジェクトをビルドまたはテストするには、通常、次の操作を行います。

  1. Bazel をセットアップします。Bazel をダウンロードしてインストールします。

  2. プロジェクトのワークスペースを設定します。これは、Bazel がビルド入力と BUILD ファイルを検索し、ビルド出力を保存するディレクトリです。

  3. BUILD ファイルを作成します。このファイルには、ビルドする内容とビルド方法を Bazel に指示します。

    BUILD ファイルは、ドメイン固有の言語である Starlark を使用してビルド ターゲットを宣言することで作成します。(こちらの例をご覧ください)。

    ビルド ターゲットでは、Bazel がビルドする一連の入力アーティファクトとその依存関係、Bazel がビルドに使用するビルドルール、ビルドルールを構成するオプションを指定します。

    ビルドルールでは、Bazel が使用するビルドツール(コンパイラやリンカーなど)とその構成を指定します。Bazel には、サポートされているプラットフォームでサポートされている言語の一般的なアーティファクト タイプを網羅する多数のビルドルールが付属しています。

  4. コマンドラインから Bazel を実行します。Bazel は出力をワークスペース内に配置します。

ビルドに加えて、Bazel を使用してテストを実行したり、ビルドをクエリしてコード内の依存関係をトレースしたりすることもできます。

Bazel ビルドプロセス

ビルドまたはテストを実行すると、Bazel は次のことを行います。

  1. ターゲットに関連する BUILD ファイルを読み込みます。

  2. 入力とその依存関係分析し、指定されたビルドルールを適用してアクショングラフを生成します。

  3. 最終的なビルド出力が生成されるまで、入力に対してビルドアクションを実行します。

以前のすべてのビルド作業がキャッシュに保存されているため、Bazel はキャッシュに保存されているアーティファクトを特定して再利用し、変更された部分のみを再ビルドまたは再テストできます。正確性をさらに強化するには、サンドボックス化によってビルドとテストを気密的に実行するように Bazel を設定します。これにより、スキューを最小限に抑え、再現性を最大化できます。

アクショングラフ

アクション グラフは、ビルド アーティファクト、それらの関係、Bazel が実行するビルド アクションを表します。このグラフにより、Bazel はファイル コンテンツの変更だけでなく、ビルド コマンドやテスト コマンドなどのアクションの変更を追跡し、以前に行われたビルド作業を把握できます。このグラフを使用すると、コード内の依存関係を簡単にトレースすることもできます。

チュートリアルのスタートガイド

Bazel の使用を開始するには、スタートガイドをご覧ください。または、次の Bazel チュートリアルに直接ジャンプしてください。