モノレポ内のサブプロジェクト同士の依存関係を把握したい

npm workspacesやCargo workspaceでモノレポを組んでいると、どのサブプロジェクトがどのサブプロジェクトに依存しているか把握しづらくなる。mise tasks graphは、モノレポ内のサブプロジェクトとその依存関係を可視化するコマンドである。2026年9月時点では実験的機能に位置づけられている。

実験的機能を有効にしmonorepo_root = trueを設定する

mise tasks graphは実験的機能なので、MISE_EXPERIMENTAL=1またはmise settings experimental=trueで有効化していないと、そもそも実行できない。有効化の方法は【mise】mise depsでロックファイルの更新を検知して依存関係を自動インストールする と同じである。

$ mise tasks graph
mise ERROR workspace project graph is experimental. Enable it with `mise settings experimental=true`

有効化したうえで、リポジトリルートのmise.tomlmonorepo_root = trueを設定しておく必要がある。設定していない状態で実行すると別のエラーになる。

$ MISE_EXPERIMENTAL=1 mise tasks graph
mise ERROR no config file in scope sets monorepo_root = true
monorepo_root = true

以降の例は、実験的機能を有効にした前提で進める。

プロジェクトはワークスペースマニフェストから推論される

ここが最も分かりにくい点だが、mise tasks graphが表示する「プロジェクト」はmise.toml[monorepo].config_roots(タスクの名前空間を分割する設定)とは無関係で、package.jsonworkspacesフィールドやCargo.tomlのワークスペースなど、実際のパッケージマネージャのワークスペースマニフェストから推論される。config_rootsだけを設定して各ディレクトリにmise.tomlしか置いていない状態では、プロジェクトは1件も検出されない。

npm workspacesを例にすると、以下のような構成で動作を確認できる。

// package.json (ルート)
{
  "name": "root",
  "private": true,
  "workspaces": ["apps/*"]
}
// apps/api/package.json
{ "name": "api", "version": "1.0.0" }
// apps/web/package.json
{ "name": "web", "version": "1.0.0", "dependencies": { "api": "*" } }
$ mise tasks graph
node:api  apps/api  -         {"workspace_source":"package.json"}
node:web  apps/web  node:api  {"workspace_source":"package.json"}

webapiをローカル依存として持っているため、node:webの依存先にnode:apiが表示される。

–jsonで詳細な情報を取得する

--jsonを付けると、プロジェクトごとの依存関係に加えて、どのファイルから推論されたか(provenance)まで含めた詳細なJSONが得られる。

$ mise tasks graph --json
{
  "projects": [
    {
      "id": "node:api",
      "root": "apps/api",
      "metadata": { "workspace_source": "package.json" },
      "dependencies": [],
      "provenance": { "provider": "node", "source": "apps/api/package.json" },
      "dependency_provenance": {},
      "tasks": {}
    },
    {
      "id": "node:web",
      "root": "apps/web",
      "metadata": { "workspace_source": "package.json" },
      "dependencies": ["node:api"],
      "provenance": { "provider": "node", "source": "apps/web/package.json" },
      "dependency_provenance": {
        "node:api": { "provider": "node", "source": "apps/web/package.json" }
      },
      "tasks": {}
    }
  ]
}

–explainで推論の根拠を確認する

--explainを付けると、各プロジェクト・依存関係がどのプロバイダー・どのファイルから推論されたかを人が読みやすい形式で表示する。

$ mise tasks graph --explain
Project: node:api
  Provider: node
  Source: apps/api/package.json

Project: node:web
  Provider: node
  Source: apps/web/package.json
  Dependencies:
    node:api — node (apps/web/package.json)

依存関係の向きが期待と違う場合や、意図しないプロジェクトが検出された場合に、原因のファイルを特定するのに使える。