Bazel
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2025/04/18 09:18 UTC 版)
![]() |
![]() |
|
開発元 | |
---|---|
初版 | 2015年3月 |
最新版 | |
リポジトリ | |
プログラミング 言語 |
Java[2] |
対応OS | クロスプラットフォーム |
ライセンス | Apache License 2.0 |
公式サイト | bazel![]() |
Bazelは、ソフトウェアのビルドおよびテストの自動化に使用されるFOSSツールである[2]。
Make、Apache Ant、Apache Mavenなどのビルドツールと同様に、Bazelはソースコードからルールに基づいてソフトウェアアプリケーションをビルドする[2][3]。ルールとマクロは、Pythonの方言であるStarlark言語で記述される[4][3]。組み込みルールは、Java、Kotlin、Scala、C言語、C++、Go、Python、Rust、JavaScript、Objective-C、bashスクリプトのビルドに対応している[3][5]。BazelはAndroidおよびiOS向けに、デプロイ可能なソフトウェアアプリケーションパッケージを生成できる[6]。
歴史
2006年、GoogleはBlazeというビルドツールの開発を開始した[7][8]。その動機は、大規模なモノレポにおいてスピードと正確性を両立できるビルドシステムを開発することであった[9]。
Bazelは、Blazeのオープンソース移植版として作成され、その名称にはBlazeのアナグラムが使われている[3]。Bazelは2015年3月に最初のリリースが行われ、同年9月にはベータ版に移行した[5]。バージョン1.0は2019年10月にリリースされた[10]。
根拠
Bazelは「最初の公開されたクラウドビルドシステムの一つ」と評されている。Bazelは過去に実行されたコマンドの履歴を保存し、その結果を複数のユーザー間で共有することが可能である[11]。このために、Bazelはビルドターゲットの入力と出力が完全に指定されていることを要求する。
Starlark
Bazelはプログラミング言語Starlarkによって拡張可能である[12]。Starlarkは、構文がPythonの構文のサブセットである組み込み言語である。ただし、ファイルI/Oへのアクセス機能など、多くのPythonの言語機能は実装されていない。これは、ビルドシステム自体が認識できない副作用やビルド成果物を生じさせるような拡張を避けるためである。このような副作用は、ビルド依存グラフの誤った解析につながる可能性がある。
対応言語
Bazelはマルチ言語ビルドシステムとして設計されている。同一のリポジトリ内で複数のプログラミング言語を組み合わせたソフトウェアのビルドが可能である。
多くの一般的なビルドシステムは、特定のプログラミング言語を前提として設計されている。例えば、Java向けのAntやMaven、Clojure向けのLeiningen、Scala向けのsbtなどが該当する。複数言語を含むリポジトリにおいては、これら個別のビルドシステムを組み合わせることや、前述のビルド速度と正確性の利点を実現することは困難かつ問題を生じやすい。
他のビルドツールとの関係
Bazelと最も類似したビルドシステムとしては、Pants[13]、Buck[14]、Please[15]、Amazonが内部で使用しているBrazilビルドシステムがある[16]。PantsおよびBuckはいずれもBazelと類似の技術的設計目標を持ち、Pantsはグーグル内部で使用されていたBlazeビルドシステムに触発されている。
Bazel、Pants、Buck、Pleaseはいずれも、BUILDファイルの構文においてStarlarkをBUILDファイルパーサとして採用している。効率的な依存グラフ解析やビルド成果物の自動追跡といった用途において独自に開発されたビルドシステムには、tupのような例もある[17]。
Sandbox
Bazelはコンパイル工程においてサンドボックスを使用している。Bazelが個別のコンパイルを実行する際には、新しいディレクトリを作成し、そのルールにおける明示的な入力依存関係へのシンボリックリンクで満たす。CやC++のような言語においては、ユーザーが依存関係を明示的に指定する必要があり、別のインクルードディレクトリにある同名のヘッダーファイルが予期せず含まれてしまうのを防ぐことができる。
このサンドボックス方式は一般的なビルドツールとの間で問題を引き起こし、さまざまなアーキテクチャでコードを正しくコンパイルするために多くの回避策が必要となる。たとえば、Mac/Darwinアーキテクチャ向けに個別コンパイルを行う際には、コンパイラがSOおよびOSOシンボルとして入力パスをMach-Oバイナリに書き込む。これはnm -a mybinary | grep SO
のようなコマンドで確認できる。これらのパスはデバッグ中にシンボルを見つけるために必要である。その結果として、Bazelでのビルドでは、-fdebug-prefix-map
や-oso_prefix
のようなフラグを用いて、サンドボックス構築に起因するパス関連の問題を修正するためにコンパイル済みオブジェクトを後処理する必要がある。なお、後者はXcode 11.0で使用可能になった。リンク工程でも同様の処理が必要であり、install_name_tool
のようなコマンドで共有オブジェクトライブラリのrpath値を書き換える必要がある[18]。
ロゴ
Bazelの初期リリース以来、ロゴは2枚の葉を持つバジルの茎の形をした緑色の小文字の "b" であった。2017年7月5日、「Bazel Blog」において新しいロゴが発表された[19]。このロゴは、3つの緑の積み木がハートの形になるように配置されたものである。
採用状況
Bazelは企業で広く使用されている[20]。著名なユーザーとしては、Google、スペースX[21]、ストライプ[22]、Tinder[23]、Uberが挙げられる[24]。
関連項目
- ビルド自動化ソフトウェアの一覧
- モノレポ
脚注
- ^ "Release 8.1.1"; 閲覧日: 2025年3月23日; 出版日: 2025年2月25日.
- ^ a b c Yegulalp, Serdar (Sep 11, 2015). “Google open-sources language-agnostic, scalable software tool”. InfoWorld. オリジナルの25 October 2017時点におけるアーカイブ。 2016年6月25日閲覧。.
- ^ a b c d “Bazel, Google's Open Source Build System - The New Stack”. thenewstack.io. The New Stack (2015年4月27日). 2017年10月24日時点のオリジナルよりアーカイブ。2016年6月25日閲覧。
- ^ “Starlark - Bazel” (英語). blog.bazel.build. 2018年10月18日閲覧。
- ^ a b “Google's software build tool Bazel heads into beta”. www.developer-tech.com. Developer Tech (2015年9月10日). 2017年10月23日時点のオリジナルよりアーカイブ。2016年6月25日閲覧。
- ^ “FAQ - Bazel”. bazel.build. 2016年6月25日閲覧。
- ^ “Bazel, From Blaze to Buck2 — A Brief History of Modern Monorepo Build Systems” (2023年11月21日). 2025年4月18日閲覧。
- ^ Beyer, Betsy; Jones, Chris; Petoff, Jennifer; Murphy, Niall Richard (23 March 2016) (英語). Site Reliability Engineering: How Google Runs Production Systems. "O'Reilly Media, Inc.". p. 90. ISBN 9781491951187 2016年6月25日閲覧。
- ^ Winters, Titus; Manshreck, Tom; Wright, Hyrum. Software Engineering at Google. O'Reilly. p. 372
- ^ “Bazel 1.0” (英語). blog.bazel.build. 2023年10月29日閲覧。
- ^ Mokhov, Andrey and Mitchell, Neil and Peyton Jones, Simon (2018). “Build Systems à la Carte”. Proceedings of the ACM on Programming Languages 2 (ICFP): 1–29. doi:10.1145/3236774 .
- ^ “Starlark Language”. bazel.build. 2025年4月18日閲覧。
- ^ “Pants: A fast, scalable build system”. 2025年4月18日閲覧。
- ^ “Buck: A high-performance build tool”. 2025年4月18日閲覧。
- ^ Please FAQ
- ^ Amazon's Build System
- ^ Shal, Mike (2009年). “Build System Rules and Algorithms”. 2025年4月18日閲覧。
- ^ “tools/cpp/osx_cc_wrapper.sh”. Github (2022年2月5日). 2025年4月18日閲覧。
- ^ Giannini, Steren (2017年7月5日). “A new logo and homepage for Bazel”. 2025年4月18日閲覧。
- ^ “Who's Using Bazel”. 2025年4月18日閲覧。
- ^ “Building Real-time Systems with Bazel w/ SpaceX” (2017年12月11日). 2025年4月18日閲覧。
- ^ “Fast builds, secure builds. Choose two” (2022年5月4日). 2025年4月18日閲覧。
- ^ “Bazel Hermetic Toolchain and Tooling Migration” (2022年6月13日). 2025年4月18日閲覧。
- ^ https://www.uber.com/en-DE/blog/go-monorepo-bazel/
外部リンク
- Bazelのページへのリンク