Chapter 05

おわりに

Kesin11
Kesin11
2020.11.08に更新

はじめからから読んで頂いた方は長くお付き合いありがとうございました。自分がBazelを学習したときにまとまったドキュメントが少なかったので苦労した経験を元に、Bazelの基本からDockerイメージ作成というある程度の応用までを解説する記事を書いてみました。少なくともここまで詳しく日本語で解説された記事は、自分が執筆した時点では見つけられなかったです。

最後に自分がBazelを今後本格的に使うかどうかの感想を述べておくと、おそらく今後メインで使うことはないです。Bazelによるビルドのメリットはたしかに強力なのですが、学習と運用のコストが高すぎます。

ここまで記事を読みながら律儀に公式ドキュメントも見てもらった方は分かると思いますが、Bazelのドキュメントは内容が様々なページに散らばっていて学習するのが非常に大変でした。1つの機能についての説明が複数のページに別れていたり、あまり関係なさそうなページの下の方にサラッと書いてあったりすることがザラにあります。さらに、3章では特に多いのですが、細かい挙動になるとドキュメントに書いていないことも多いのでBazelリポジトリのサンプルコードを見てやっと方法が分かるということもしばしばありました。サンプルコードがあるだけマシか。

シンプルなプロジェクトでこれなのだから、実務における規模が大きいリポジトリでは数倍大変なはずです。Bazelが真価を発揮するのは大規模リポジトリなのですが、一般的には大規模になればなるほど何かと素直にいかないことも多く、それらをBazelで扱うには一筋縄ではいかないでしょう。

例えばGo言語はBazelのサポートが結構手厚いと聞きますので比較的導入しやすい言語もあると思いますが、今回自分が試したnodejsはそもそもnodejs界隈のビルドのエコシステム自体まだまだ移り変わりが激しいので、新しいツールが出たときにそれらをBazelに対応させていく必要もあるでしょう。いずれにせよ、Bazelは大変魅力的なツールではあるのですが2020年現在においては少なくとも片手間で導入・運用していくのは難しいというのが自分の感想です。

自分がBazelをメインで使うことはないと思いますが、ビルドの再現性、ビルドキャッシュの考え方などについて得るものは多かったです。今後はCIにおけるビルドキャッシュを再考したり、Bazel以外のリモートキャッシュを実現しているツール(例えばiOSのRomeGradleなど)を検討するなどしていきたいと考えています。

公式ドキュメント以外で参考にしたリンク

https://dataform.co/blog/typescript-monorepo-with-bazel

https://github.com/OasisDigital/mobx-bazel-build