Skip to content
Latchkey

ビルドグラフとは何か?

ビルドグラフは、すべてのbuildタスクと、それが何に依存しているかを示すマップです。これにより、buildツールは何を、どの順序で実行し、何をスキップできるかを把握します。

現代のbuildツールは、ハードコードされた順序でタスクを実行しません。タスクと依存関係の有向グラフを構築し、それをたどります - 独立したブランチを並列に実行し、入力が変わっていないノードをスキップします。

ノードとエッジ

各ノードはタスク(compile、bundle、test)であり、各エッジは依存関係("testはcompileが先に完了する必要がある")です。実際のbuildはサイクルを含むことができないため、このグラフはDAG - 有向非巡回グラフ - です。

グラフが可能にすること

  • 正しい順序付け: タスクはその依存関係の後にのみ実行されます。
  • 並列化: 独立したブランチが同時に実行されます。
  • インクリメンタルビルド: 変更のないノードは完全にスキップされます。

小さな例

bundlecompileに依存し、compilegenerate-typesに依存する場合、ツールはその順序で実行します - しかし、無関係な2つのパッケージのcompileタスクの間にはエッジがないため、並列に実行されます。

影響範囲の分析

モノレポでは、グラフが "この変更は何に影響するか?" に答えます - 変更されたノードとそれより下流のすべてを見つけ、リポジトリ全体ではなくそのサブグラフだけをbuildします。

なぜサイクルは禁止されるのか

サイクル("AはBを必要とし、BはAを必要とする")には有効な順序がないため、buildツールはこれを拒否します。サイクルエラーが発生した場合、通常は2つのモジュールが互いをimportしており、依存関係を切り離すか反転させる必要があることを意味します。

重要なポイント

  • ビルドグラフは、タスクとその依存関係からなるDAGです。
  • 正しい順序付け、並列化、インクリメンタルなスキップを可能にします。
  • モノレポにおける影響範囲のみのbuildの基盤となります。

関連ガイド