Turborepo を用いた monorepo のすゝめ
モチベーション
筆者は待つことが苦手な人間です。モノリポ構成のプロジェクトに関わっていましたが、プロジェクトが大きくなっていくにつれて CI/CD の待ち時間が長くなっていくことが気になっていました。そんな中で アプリケーションの運用を手間をかけずに高速化したい と思ったのがきっかけです。
Turborepo
アプリケーションを Vercel にデプロイしている場合、Turborepo のキャッシュ機構によるデプロイの高速化が見込めます。高速に CI/CD を回すような文化がある場合、節約できる時間も大きくなります。
サンプルリポジトリが充実しているので、手元で動かして簡単に学べます。下記は yarn
の例ですが、ご利用の構成に合うものが見つかるのではないかと思います。
また、キャッシュ機構はローカルでも機能します。
下記の<task>
の部分は自分で自由に定義できるので、workspace ごとに並列実行したい処理を自由に記述できます。
turbo run <task>
何でも良いのですが、例えば、eslint です。特定の workspace の1行を変更しただけなのに再度全体に eslint をかけたくありません。turbo run
を利用すれば、変更があった workspace のみに eslint が適用され、他はキャッシュが利用されます。
--filter
オプションを利用して、特定の workspace を指定して処理を行うこともできるので、使い勝手が良いコマンドです。
最後に
筆者は最近では、最初から monorepo 構成を選択することが多いです。その方が何かと後々の追加・変更がやりやすく、受けられる恩恵が大きいためです。もちろんサービス構成次第なわけで「何が何でも最初から monorepo にしておけば良い」というわけでは全くないのですが、これまで記載してきたような問題に心当たりがある方は、ぜひ試してみてはいかがでしょうか。
おまけ
turbo gen
こちらはまだ実験的なものですが、workspace の作成やコピーができる便利なコマンドです。
他にもカスタムジェネレータを使えばテンプレートが作成できるので、hygen
のようなライブラリをこちらに寄せることもできます。
Discussion