コンテンツにスキップ

モノレポビルドシステム Buck2

概要

Meta が発表したモノレポビルドシステムBuck2について調べてみました。Buck2 はソースコードと依存関係から実行ファイルなどを作るビルドシステムで、C++, Rust, Python など多言語をサポートしています。Bazel や Pants も同じ用途のツールです。ほかの特徴は次のとおりです。

  • Rust で書かれている
  • リモート実行のサポート
  • Starlark という言語でビルドルールを記述
  • Buck1 より高速
  • Python のコードと依存パッケージをまとめた実行用アーカイブ(pex)を生成する

Python サポート

Buck2 の Python ビルドで生成する pex には、実行に必要な Python パッケージもまとめられます。外部パッケージを使う場合は、外部のファイルを取得するremote_fileルールで Python の配布ファイル(whl や egg)を指定し、prebuilt_python_libraryルールを使う必要があります。詳細はBuck2 公式ドキュメントの prebuilt_python_libraryを参照してください。

感想

Pants をはじめ、JavaScript や TypeScript 向けのモノレポビルドシステムでも、Rust で書かれたものをよく見かけるようになりました。普段使っている Pants と比べると、Buck2 は多くの言語をサポートしている印象を受けました。Python では Pants と Buck2 のどちらも pex の実行ファイルを生成する点が、個人的に面白かったです。一方で、Pants や Bazel に比べて Python の外部パッケージを使うのは大変そうに感じました。

2023 年 5 月時点で Buck2 のドキュメントがまだ少なく、使用例もあまり広まっていないので、これからの動きを楽しみにしています。

参考