Skip to content
Latchkey

モノレポのビルドとは?多数のフロントエンドパッケージを一緒にビルドする

モノレポのビルドは、1つのリポジトリから関連する多数のフロントエンドパッケージをコンパイルし、理想的には変更の影響を受けたパッケージだけを再ビルドします。

フロントエンドのモノレポは、アプリ、コンポーネントライブラリ、共有ユーティリティなど、多数のパッケージを1つのリポジトリに保持します。変更のたびにそれらすべてをビルドするのは無駄です。モノレポのビルドツールはパッケージ間の依存関係をモデル化し、変更が実際に必要とする作業だけを実行します。この選択性こそが、リポジトリが大きくなってもモノレポのCIを高速に保つものです。

パッケージのtask graph

ビルドツールは各パッケージと、それらが互いにどう依存しているかを読み取り、task graphを形成します。共有パッケージへの変更は、そのパッケージとそれに依存するものを再ビルド対象としてマークし、影響を受けないパッケージはスキップされます。

影響を受けた部分だけのビルド

ベースのcommitと比較することで、ツールはどのパッケージが変更されたかを判定し、それらとその依存先だけをビルドします。大きなリポジトリでは、これによって多くのpull requestで完全な再ビルドが小さなものになります。

taskの結果をキャッシュする

  • 各taskの出力は、その入力のハッシュによってキャッシュされます。
  • 変更のないtaskは再実行する代わりに出力を復元します。
  • remote cacheは複数のマシンやCIの実行間で結果を共有します。

一般的なツール

Turborepo、Nx、Bazelといったツールはモノレポ向けにtask graphとキャッシュを提供します。それらはスコープや設定の点で異なりますが、影響検出とキャッシュされたtaskの出力という中心的な考え方は共通しています。

CI/CDにおけるモノレポのビルド

pipelineは影響を受けたパッケージを算出し、それらのbuildとtestのtaskだけを実行し、残りはキャッシュされた出力を復元します。CIの実行間で共有されるremote cacheこそがこれをスケールさせるものであり、それがなければすべてのrunnerがすべてを再ビルドします。マネージドrunner(Latchkeyなど)はそのremote cacheを温かく保ち、モノレポのpipelineが高速なままであるようにします。

重要なポイント

  • モノレポのビルドはtask graphを使って、影響を受けたパッケージだけを再ビルドします。
  • ハッシュ化されキャッシュされたtaskの出力により、変更のない作業を再実行せずに復元できます。
  • CIの実行間で共有される温まったremote cacheこそが、モノレポのpipelineを高速に保つものです。

関連ガイド