Bazel の概要

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 のチュートリアルに直接移動してください。