Turborepo の勉強

Turborepo の勉強した。

https://turbo.build/repo/docs

monorepo で依存関係を適切に判定してビルドとかやってくれるツールという認識をしている。

monorepo でワークスペース内の別のパッケージに依存していることを package.json で表現できているならば基本的な導入は難しいところはない。
でも自分が導入しようと思った monorepo ではいまいち活用できなかったので一旦諦めた。具体的には以下のような問題があった。

  • そもそも Bun を使用しており、Turborepo にフルサポートされていない
  • tsup でビルドしている内部パッケージがあって、tsup は --dts--sourcemap を同時に使うことができない。従ってどうしても declaration file を tsc で生成せざるをえず、tsup --watchtsc --watch を同時に動かしたかったのだが、Bun だと面倒だった。pnpm なら簡単にできる。
  • Node で動かない静的ウェブサイトを模したサンプルパッケージがあり、これは package.json では依存関係を定義できていない。別パッケージをビルド後にファイルを物理的に静的ウェブサイト側にコピーしている。このサンプルパッケージは Turborepo がいまいち使えない。

試している最中にしばらく悩んでいたのが「A が B に依存しているとき、A を watch モードで起動中に B を編集したら自動で A をリビルドさせるのはどうしたらいいのか?」だった。
結論、filter 時に ... をつけるとよい。

https://turbo.build/repo/docs/reference/run#--filter-string

turbo run dev --filter=A... とすると、turbo run dev --filter=Aturbo run dev --filter=B が同時に起動した状態になり、B を編集すると最終的に A もリビルドする。

これがわかりづらくて、最終的に業務で使用されている turbo.json を見た。
よくある例だと思うので普通にドキュメントに例として書いてほしかった。

個人では monorepo で複雑なものを作ることがあまりないので活用シーンが無いかもしれないが、仕事では使う機会があるので一応覚えておく。

以上