【ターボレポ】

Turborepo とは?

最終更新:
💡 「前にやったビルド、もう一回やる必要ある?」を省くターボエンジン

モノレポ向けのビルドシステム。タスクの結果をキャッシュして同じ入力の処理を省き、依存関係を見ながらタスクを並列に実行して、ビルドやテストを速くする。

📌 このページのポイント
Turborepo: キャッシュ + 並列実行 モノレポ web-app api-server shared-lib ui-components Turborepo 依存グラフ 解析 ハッシュ計算 キャッシュ比較 並列スケジュール キャッシュHIT 即座に復元 キャッシュHIT 即座に復元 キャッシュMISS 再ビルド実行 キャッシュなし 毎回すべて実行 キャッシュあり MISSだけ実行 リモートキャッシュ: チームやCIでキャッシュを共有 → 同じ入力のタスクは結果を再利用
Turborepoのキャッシュと並列ビルドのイメージ
ひよこ ひよこ
Turborepoって何のためのツール?
ペンギン先生 ペンギン先生
モノレポ、つまり1つのリポジトリに複数のアプリやパッケージをまとめて管理する構成で、ビルドやテストを速くするツールだよ。毎回すべてのパッケージを処理し直す代わりに、結果を再利用できるものはスキップしてくれるんだ
ひよこ ひよこ
キャッシュってどういう仕組み?
ペンギン先生 ペンギン先生
タスクに関わるファイルや設定などの入力からハッシュ(指紋)を計算して、前回と同じなら前回の出力とログを復元するんだ。100個のパッケージのうち1個だけ変えたなら、影響しないパッケージのタスクはキャッシュから戻せるよ。ただし、同じ入力なら同じ結果になるタスクであることが前提なんだ
ひよこ ひよこ
前提が崩れるとどうなるの?
ペンギン先生 ペンギン先生
例えばTurborepoが知らない環境変数で結果が変わるタスクだと、違う結果になるはずなのに古いキャッシュが使われることがあるよ。だから入力として扱う環境変数やファイル、保存する出力をturbo.jsonで正しく設定するのが大事なんだ
ひよこ ひよこ
リモートキャッシュって何?
ペンギン先生 ペンギン先生
キャッシュをサーバーに置いて、チームのメンバーやCIで共有する機能だよ。誰かが一度実行したタスクの結果を、ほかの人やCIも再利用できるんだ。VercelのRemote Cacheのほか、自前で用意したキャッシュサーバーも使えるよ。ログもキャッシュされるから、秘密情報を出力しないよう気をつけてね
ひよこ ひよこ
Nxっていう似たツールもあるよね?それにJavaScript以外でも使える?
ペンギン先生 ペンギン先生
Nxもモノレポ向けのビルドシステムで、プラグインやコード生成などの機能を多く備えているよ。Turborepoはパッケージマネージャーのワークスペースを土台にしていて、最近はGoのような一部の言語のワークスペースも組み合わせられるようになったんだ。多くの言語が混ざった大規模な構成では、Bazelのような言語を問わないビルドシステムも選択肢になるね
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Turborepo」って出てきたら「モノレポのタスクをキャッシュと並列実行で速くするツール」と思えればだいたいOK!
📖 おまけ:英語の意味
「Turborepo」 = ターボ(高速)+ リポジトリ
💬 Turbo(加速)とRepo(リポジトリ)を組み合わせた名前だよ。Jared Palmerが開発していたもので、2021年12月にVercelが買収を発表したんだ

参考資料

← 用語集にもどる