開発支援・コーディング

モノレポとは|変更の中央値は2個で済むのに、最も広い変更は35個を巻き込んだ

モノレポで全部作り直す必要はあるのか影響範囲はどれくらい広がるのか依存を増やすと何が起きるのか

部品60個のうち1つを変えたとき、作り直しが要るのは中央値で2個でした。全部作る必要はありません。

ただし最も広い変更は35個を巻き込みます。どの部品を変えるかで、桁が変わります。

この記事の要点

  • 中央値は2個・50秒
  • 平均は5個・125秒
  • 最も広い変更は35個・875秒
  • 全部作ると60個・1500秒

変更の中央値は2個で済むのに、最も広い変更は35個を巻き込んだ

作り直す範囲は変更ごとに大きく違います。平均で決めると、両側を外します。

モノレポでは、部品を変えるたびにどこまで作り直すかが問題になります。実際に計算しました。

部品を60個作り、互いに依存させました。1つあたりの組み立ては25秒で、全部作ると1500秒です。

1つの部品を変えたとき、それに間接的にでも依存しているものは作り直しになります。60通りすべてを数えました。

影響範囲を数える

text
部品 60個。1つあたりの組み立ては 25秒。全部作ると 1500秒

見方                    作り直す部品  かかる時間  全部作る場合との比
最も狭い変更                            1個         25秒                1.7%
中央値                               2個         50秒                3.3%
平均                                5個        125秒                8.3%
90%点                             17個        425秒               28.3%
最も広い変更                           35個        875秒               58.3%

中央値は2個です。半分以上の変更は、2個作り直せば済みます。

ところが最も広い変更は35個で、全部作る場合の58.3%にあたります。

平均で決めない

平均は5個ですが、中央値は2個です。少数の重い変更が平均を引き上げています

90%点は17個です。10回に1回は、17個以上を作り直すことになります。

出典もこの問題を作業場が大きくなるにつれ、すべての企画を再試験し、再構築し、再検査するのは遅くなりすぎるとしています。

半分の変更は2個で済む。ただし裾は35個まで伸びる。

中央値の変更(2個)作り直す作り直さない14501500秒90%点の変更(17個)42510751500秒最も広い変更(35個)8756251500秒部品60個・1個25秒での計算。全部作ると1500秒になる。
図1 ── 作り直す部品の数
出典Nx Docs「Run Only Tasks Affected by a PR」2026-08-18 確認
As your workspace grows, re-testing, re-building, and re-linting all projects becomes too slow.
原文Nx Docs「Run Only Tasks Affected by a PR」 この内容の有効期限2027-02-18

絞り込みには、依存の一覧が要る

変更した部品から、それに依存しているものをたどります。一覧がなければ計算できません。

モノレポで作り直す範囲を絞るには、部品どうしの依存が分かっている必要があります。

出典も手順の1つを変更した企画に依存している企画がどれかを判定すると説明しています。

たどり方

  1. 変わった部品を特定する。差分から求める
  2. 直接依存を集める。その部品を使っているもの
  3. さらにその先へ。増えなくなるまで繰り返す
  4. 集まった範囲だけ動かす。それ以外は前の結果を使う

3番目が要点です。間接的な依存も巻き込みます。この計測でも、35個まで広がる変更がありました。

そろえておくもの

  1. 依存の宣言。どの部品が何を使うかを書いてある
  2. 前回の結果。作り直さない部品の成果物
  3. 比べる相手。どの時点からの差分を見るか
  4. 部品の境目。ファイルがどの部品に属するか

1番目が実態と違っていると、本当は影響するのに作り直さないことが起きます。宣言していない依存が危険です。

3番目も決めておきます。前回うまくいった時点からの差分にしないと、範囲が広がったり狭まったりします

出典Nx Docs「Run Only Tasks Affected by a PR」2026-08-18 確認
Determine which projects depend on the projects you modified.
原文Nx Docs「Run Only Tasks Affected by a PR」 この内容の有効期限2027-02-18

依存を増やすと、絞り込みの効き目が消えていく

絞り込みは依存が薄いほど効きます。1部品あたりの依存を増やすと、範囲が広がります。

モノレポの絞り込みは、依存の薄さに支えられています。依存を増やしたときの変化を測りました。

同じ60個の部品で、1部品あたりの依存の上限だけを変えます。1個までから8個まで振りました。

依存の数を動かす

text
1部品の依存の上限  影響範囲の平均  中央値  99%点  全部作る場合との比
1個まで                        1.7個      1個     12個                2.9%
2個まで                        3.2個      1個     23個                5.4%
3個まで                        4.7個      2個     35個                7.8%
5個まで                       10.5個      4個     48個               17.5%
8個まで                       13.9個      8個     47個               23.1%

依存を1個までに抑えると、平均は1.7個です。全部作る場合の2.9%で済みます。

5個まで許すと平均10.5個、99%点は48個です。60個中48個なので、ほぼ全部作り直しています。

効き目が消える

依存が濃くなるほど、絞り込んでも全部作るのと変わらなくなります。仕組みを入れても速くなりません

出典は絞り込みの効果をこれは自動実行の速さを大きく改善し、必要な計算量を減らすとしています。改善の幅は、依存の薄さで決まります。

つまり手を打つ順番は、依存を減らすほうが先です。仕組みを入れるのはそのあとです。自動実行そのものの並べ方はCI/CDの記事で測っています。

依存が濃いと、絞り込んでも全部作るのと変わらない。

p50 ─ p99(個)依存1個まで1/12依存2個まで1/23依存3個まで2/35依存5個まで4/48依存8個まで8/47部品60個での計算。全部作り直す場合は60個にあたる。
図2 ── 依存の数と影響範囲の幅
余談 この計測での注意

依存関係は式で作った有向グラフです。自分より前の部品にだけ依存する形にしてあり、循環はありません。実際のモノレポでは共通の土台に多くがぶら下がるので、影響範囲はもっと偏ります。1部品25秒という時間も置いた値です。ここで見せているのは、絞り込みの効き目が依存の濃さで決まるという関係です。

出典Nx Docs「Run Only Tasks Affected by a PR」2026-08-18 確認
This drastically improves the speed of your CI and reduces the amount of compute needed.
原文Nx Docs「Run Only Tasks Affected by a PR」 この内容の有効期限2027-02-18

よくある質問

モノレポでは毎回全部を作り直しますか
その必要はありません。この計測では中央値で2個、平均でも5個の作り直しで済みました。
どの変更が重いのですか
多くの部品から依存されているものです。この計測では最も広い変更が35個、全体の58.3%を巻き込みました。
依存を増やすとどうなりますか
影響範囲が広がります。1部品あたりの依存を3個から5個に増やすと、平均が4.7個から10.5個になりました。
絞り込みには何が要りますか
どの部品が何に依存しているかの一覧です。これがないと、変更から作り直す範囲を出せません。

まとめ

  • 複数の部品を1か所にまとめる
  • 作り直すのは影響した範囲だけ
  • 範囲は変更する部品で決まる
  • 依存を増やすと範囲が広がる

今日から始められること

  1. 部品どうしの依存を一覧にする
  2. 各部品を変えたときの影響範囲を数える
  3. 影響範囲が広い部品を見つける
  4. その部品の依存を減らせないか検討する

実務で組んだモノレポのワークフローには、値段が付きます

同じ課題を持つ会社にとって、動いている設定は「作る時間」を買えるということです。ServiceDockは自作のワークフローやテンプレートを出品できるマーケットプレイスです。手数料や出品の流れは出品者向けページにまとまっています。

出品の仕組みを見る