Turborepo を用いた monorepo のすゝめ

2023/08/30に公開

モチベーション

筆者は待つことが苦手な人間です。モノリポ構成のプロジェクトに関わっていましたが、プロジェクトが大きくなっていくにつれて CI/CD の待ち時間が長くなっていくことが気になっていました。そんな中で アプリケーションの運用を手間をかけずに高速化したい と思ったのがきっかけです。

Turborepo

アプリケーションを Vercel にデプロイしている場合、Turborepo のキャッシュ機構によるデプロイの高速化が見込めます。高速に CI/CD を回すような文化がある場合、節約できる時間も大きくなります。

サンプルリポジトリが充実しているので、手元で動かして簡単に学べます。下記は yarn の例ですが、ご利用の構成に合うものが見つかるのではないかと思います。
https://github.com/vercel/turbo/tree/main/examples/with-yarn

また、キャッシュ機構はローカルでも機能します。
下記の<task>の部分は自分で自由に定義できるので、workspace ごとに並列実行したい処理を自由に記述できます。

turbo run <task>

https://turbo.build/repo/docs/reference/command-line-reference/run

何でも良いのですが、例えば、eslint です。特定の workspace の1行を変更しただけなのに再度全体に eslint をかけたくありません。turbo run を利用すれば、変更があった workspace のみに eslint が適用され、他はキャッシュが利用されます。
--filter オプションを利用して、特定の workspace を指定して処理を行うこともできるので、使い勝手が良いコマンドです。

最後に

筆者は最近では、最初から monorepo 構成を選択することが多いです。その方が何かと後々の追加・変更がやりやすく、受けられる恩恵が大きいためです。もちろんサービス構成次第なわけで「何が何でも最初から monorepo にしておけば良い」というわけでは全くないのですが、これまで記載してきたような問題に心当たりがある方は、ぜひ試してみてはいかがでしょうか。

おまけ

turbo gen

https://turbo.build/repo/docs/core-concepts/monorepos/code-generation

こちらはまだ実験的なものですが、workspace の作成やコピーができる便利なコマンドです。
他にもカスタムジェネレータを使えばテンプレートが作成できるので、hygen のようなライブラリをこちらに寄せることもできます。

Discussion