【バゼル】

Bazel(バゼル) とは?

最終更新:
💡 Google生まれの万能ビルダー、巨大コードベースもお手のもの

Google発のオープンソースのビルドツール。多言語のビルドやテストを1つの仕組みで扱え、キャッシュやリモート実行で大規模なリポジトリのビルドを効率化する。Google社内ツールBlazeとコードの大部分を共有している。

📌 このページのポイント
Bazel — 大規模モノレポ対応ビルドツール モノレポ Java Python C++ Go TypeScript Bazel BUILD ファイル Starlark サンドボックス ビルド 成果物 再現しやすい成果物 高速ビルド Bazelの強み 再現しやすいビルド リモートキャッシュ 多言語対応
Bazelの仕組みと特徴
ひよこ ひよこ
BazelってGradleやMavenと何が違うの?
ペンギン先生 ペンギン先生
Gradleも複数の言語を扱えるけど、Bazelは1つのリポジトリにJava・C++・Python・Goなどが混ざっていても、同じ書き方で依存関係を宣言してビルドできるのが得意なんだ。巨大なリポジトリで、変更のあった部分だけを効率よくビルドし直す仕組みが強みだよ
ひよこ ひよこ
モノレポって何?
ペンギン先生 ペンギン先生
たくさんのプロジェクトのコードを1つの巨大なリポジトリで管理する方法だよ。2016年の論文では、Googleは数十億行のコードを1つのリポジトリで管理していると紹介されているんだ。その規模を支えてきた社内ツールBlazeの公開版がBazelだね
ひよこ ひよこ
同じソースなら、必ず同じビルド結果になるの?
ペンギン先生 ペンギン先生
そうなるように作れる仕組みがある、というのが正確だよ。Bazelは依存関係を明示させて、各処理をサンドボックスで隔離するから、暗黙の依存に気づきやすい。公式FAQでは、ツールチェーンを変えなければJavaとC++のバイナリは再現できると説明している。ただ、自作のビルド手順が時刻を埋め込んだり、ネットワークや手元のツールに頼ったりすると結果が変わるから、そこは自分で対策する必要があるんだ
ひよこ ひよこ
導入のハードルは高い?
ペンギン先生 ペンギン先生
正直、学習コストはあるよ。BUILDファイルに依存関係を書く必要があるし、ルールの設定にはStarlarkというPythonに似た言語を使う。既存のビルドから移行する手間もかかるから、プロジェクトが小さいうちは今のツールで十分なことも多いね
ひよこ ひよこ
どんな企業が使っているの?
ペンギン先生 ペンギン先生
Google社内のほか、Bazel公式サイトの利用者一覧にはUber、Stripe、Spotifyなどが載っているよ。ただしこの一覧は自己申告で、公式サイトも推薦ではないと注記しているんだ。ビルド時間やリポジトリの規模で困り始めたら、候補として検討するといいね
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Bazel」って出てきたら「大規模・多言語のコードを効率よくビルドするGoogle発のツール」と思えればだいたいOK!
📖 おまけ:英語の意味
「Bazel」 = 固有の製品名
💬 Google社内の名前はBlaze(ブレイズ)で、公開版がBazelだよ。つづりはBlazeを並べ替えた形になっているけど、公式FAQでは名前の由来は説明されていないんだ

参考資料

← 用語集にもどる