【ターボレポ】

Turborepo とは?

💡 「前にやったビルド、もう一回やる必要ある?」を徹底的に省くターボエンジン
📌 このページのポイント
Turborepo: キャッシュ + 並列実行 モノレポ web-app api-server shared-lib ui-components Turborepo 依存グラフ 解析 ハッシュ計算 キャッシュ比較 並列スケジュール キャッシュHIT 即座に復元 キャッシュHIT 即座に復元 キャッシュMISS 再ビルド実行 従来 10分 Turborepo 数秒 リモートキャッシュ: チーム全体でビルド結果を共有 → 誰も同じビルドを二度やらない
Turborepoのキャッシュと並列ビルドのイメージ
ひよこ ひよこ

Turborepoって何のためのツール?

ペンギン先生 ペンギン先生

モノレポ、つまり1つのリポジトリに複数のパッケージやアプリをまとめて管理する構成で、ビルドやテストを高速化するツールだよ。普通にやると全パッケージを毎回ビルドすることになるけど、Turborepoはキャッシュを使って賢くスキップしてくれるんだ

ひよこ ひよこ

キャッシュってどういう仕組み?

ペンギン先生 ペンギン先生

ソースコードハッシュ値を計算して、前回と同じ入力なら前回の出力をそのまま使うんだ。100個のパッケージのうち1個だけ変更したら、残り99個はキャッシュから一瞬で復元されるよ。10分かかってたビルドが数秒で終わることもあるんだ

ひよこ ひよこ

リモートキャッシュって何?

ペンギン先生 ペンギン先生

ビルド結果をクラウドに保存して、チーム全体で共有する機能だよ。Aさんがビルドした結果をBさんが再利用できるし、CIでも同じキャッシュが使える。チーム全体で見ると、同じビルドを誰も二度とやらなくて済むんだ

ひよこ ひよこ

Nxっていう似たようなツールもあるよね?違いは?

ペンギン先生 ペンギン先生

どちらもモノレポのビルド高速化ツールだけど、思想が違うんだ。Turborepoは既存のnpmスクリプトをそのまま高速化する「薄いレイヤー」で、導入が簡単。Nxはプロジェクト生成やプラグインなど機能が豊富な「統合プラットフォーム」だね

ひよこ ひよこ

どんなプロジェクトで使うと効果的なの?

ペンギン先生 ペンギン先生

フロントエンドアプリ、バックエンドAPI、共有ライブラリを1つのリポジトリで管理してるようなプロジェクトだね。パッケージが5個を超えてくるとビルド時間が問題になり始めるから、そのあたりがTurborepo導入のタイミングだよ

ひよこ ひよこ

Vercelが作ってるってことは、Next.js専用?

ペンギン先生 ペンギン先生

Next.jsとの相性は最高だけど、専用じゃないよ。ReactVueSvelteバックエンドNode.jsアプリ…JavaScriptエコシステムなら何でも使える。ただしRustやGoのような非JSプロジェクトには向いてない。そこはBazelの出番だね

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Turborepo」って出てきたら「モノレポのビルドをキャッシュと並列化で爆速にするツール」と思えればだいたいOK!
📖 おまけ:英語の意味
「Turbo Repository」 = ターボ(高速)なリポジトリ管理
💬 Turbo(加速)とRepo(リポジトリ)を組み合わせた名前で、ビルドを加速させるという意味だよ。2021年にJared Palmerが開発して、その後Vercel社に買収されたんだ
← 用語集にもどる