Google生まれの優等生なビルドツール
速く、きれいに、どの言語でも
Bazelは、Googleが開発したビルドツールで、大規模なプロジェクトでも高速かつ再現性のあるビルドを実現します。
具体的には以下の特徴があります。
- 多言語・マルチプラットフォーム対応
- 高速で並列ビルドが可能
- クリーンなビルド(ディレクトリを汚染しない)
- 人が読める高レベルのビルド言語
今回はこんな素敵なツール、Bazelを使って簡単なC++プログラムをビルドする方法を紹介します。
1. Bazelのインストール
まず、Bazelをインストールします。macOSの場合は以下のコマンドでインストールできます:
brew install bazel
Ubuntuの場合は、公式ドキュメントを参照してください。
2. プロジェクト構造の作成
以下のような構造でプロジェクトを作成します:
WORKSPACE
main/
├── BUILD
└── hello-world.cc
3. WORKSPACEファイルの作成
ルートディレクトリにWORKSPACE
ファイルを作成し、以下の内容を記述します:
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
http_archive(
name = "aspect_gcc_toolchain",
sha256 = "3341394b1376fb96a87ac3ca01c582f7f18e7dc5e16e8cf40880a31dd7ac0e1e",
strip_prefix = "gcc-toolchain-0.4.2",
urls = [
"https://github.com/aspect-build/gcc-toolchain/archive/refs/tags/0.4.2.tar.gz",
],
)
load("@aspect_gcc_toolchain//toolchain:repositories.bzl", "gcc_toolchain_dependencies")
gcc_toolchain_dependencies()
load("@aspect_gcc_toolchain//toolchain:defs.bzl", "gcc_register_toolchain", "ARCHS")
gcc_register_toolchain(
name = "gcc_toolchain_x86_64",
target_arch = ARCHS.x86_64,
)
4. ソースコードの作成
main/hello-world.cc
ファイルを作成し、以下のコードを記述します:
#include <ctime>
#include <string>
#include <iostream>
std::string get_greet(const std::string& who) {
return "Hello " + who;
}
void print_localtime() {
std::time_t result = std::time(nullptr);
std::cout << std::asctime(std::localtime(&result));
}
int main(int argc, char** argv) {
std::string who = "world";
if (argc > 1) {
who = argv[1];
}
std::cout << get_greet(who) << std::endl;
print_localtime();
return 0;
}
5. BUILDファイルの作成
main/BUILD
ファイルを作成し、以下の内容を記述します:
load("@rules_cc//cc:defs.bzl", "cc_binary")
cc_binary(
name = "hello-world",
srcs = ["hello-world.cc"],
)
6. ビルドと実行
以下のコマンドでプログラムをビルドします:
bazel build //main:hello-world
ビルドが成功したら、以下のコマンドで実行できます:
./bazel-bin/main/hello-world meithon
出力例:
Hello meithon
Wed Sep 11 21:03:22 2024
以上で、Bazelを使ってC++プログラムをビルドする方法を紹介しました。簡単でしたね!
What's next ✨
Bazelを使って他の言語のプログラムをビルドする方法も同じようにできます。公式ドキュメントを参照することで、TypeScriptやGo、Rustなどの言語での使用方法も学ぶことができます。
また、Bazelを使ったビルドの高速化や便利な機能なども公式ドキュメントで紹介されています。さらに詳しく知りたい方は以下のページを参照してください
実際のプロジェクトにおける、Bazelの活用方法などもあれば記事にしていきたいと思います!
ここまで読んでいただき、ありがとうございます。
いいねやシェアはとても励みになりますので、ぜひ宜しくお願いいたします!