ビルドグラフとは何か?
ビルドグラフは、すべてのbuildタスクと、それが何に依存しているかを示すマップです。これにより、buildツールは何を、どの順序で実行し、何をスキップできるかを把握します。
現代のbuildツールは、ハードコードされた順序でタスクを実行しません。タスクと依存関係の有向グラフを構築し、それをたどります - 独立したブランチを並列に実行し、入力が変わっていないノードをスキップします。
ノードとエッジ
各ノードはタスク(compile、bundle、test)であり、各エッジは依存関係("testはcompileが先に完了する必要がある")です。実際のbuildはサイクルを含むことができないため、このグラフはDAG - 有向非巡回グラフ - です。
グラフが可能にすること
- 正しい順序付け: タスクはその依存関係の後にのみ実行されます。
- 並列化: 独立したブランチが同時に実行されます。
- インクリメンタルビルド: 変更のないノードは完全にスキップされます。
小さな例
bundleがcompileに依存し、compileがgenerate-typesに依存する場合、ツールはその順序で実行します - しかし、無関係な2つのパッケージのcompileタスクの間にはエッジがないため、並列に実行されます。
影響範囲の分析
モノレポでは、グラフが "この変更は何に影響するか?" に答えます - 変更されたノードとそれより下流のすべてを見つけ、リポジトリ全体ではなくそのサブグラフだけをbuildします。
なぜサイクルは禁止されるのか
サイクル("AはBを必要とし、BはAを必要とする")には有効な順序がないため、buildツールはこれを拒否します。サイクルエラーが発生した場合、通常は2つのモジュールが互いをimportしており、依存関係を切り離すか反転させる必要があることを意味します。
重要なポイント
- ビルドグラフは、タスクとその依存関係からなるDAGです。
- 正しい順序付け、並列化、インクリメンタルなスキップを可能にします。
- モノレポにおける影響範囲のみのbuildの基盤となります。
関連ガイド
What Is an Incremental Build?An incremental build rebuilds only the parts affected by a change, reusing earlier outputs for the rest. Lear…
What Is a Monorepo?A monorepo keeps many projects in one repository with shared tooling and history. Learn the CI implications:…
What Is Parallelism in CI?Parallelism in CI means running independent jobs or tests at once to cut wall-clock time. Learn the differenc…