タスクが増えると依存関係を把握しづらい
【mise】mise tasks lsでタスク一覧を詳しく確認する
では各タスクの一覧は分かるが、どのタスクがどのタスクに依存しているかまでは分からない。mise tasks depsは、タスクの依存関係をツリー形式で可視化するコマンドである。
mise tasks depsの基本
タスク名を省略すると、プロジェクト内の全タスクについて依存関係を表示する。
[tasks.build]
run = "echo building"
[tasks.lint]
run = "echo linting"
[tasks.test]
depends = ["build"]
run = "echo testing"
[tasks.check]
depends = ["test", "lint"]
run = "echo checking"
$ mise tasks deps
build
check
├── lint
└── test
└── build
lint
test
└── build
依存を持たないタスク(build/lint)は単独の行として表示され、依存関係を持つタスクはツリー状にインデントされる。タスク名を指定すると、そのタスクの依存関係だけに絞り込める。
$ mise tasks deps check
check
├── lint
└── test
└── build
–compactで重複するサブツリーをまとめる
複数のタスクが同じ依存タスクを共有していると、そのサブツリーが繰り返し表示される。--compactを付けると、2回目以降の出現は(already shown)に置き換えられる。
$ mise tasks deps ci
ci
├── check
│ ├── lint
│ └── test
│ └── build
└── test
└── build
$ mise tasks deps ci --compact
ci
├── check
│ ├── lint
│ └── test
│ └── build
└── test (already shown)
–dotでGraphviz形式に変換する
--dotを付けると、Graphvizのdotコマンドが読み込めるDOT形式を出力する。
$ mise tasks deps ci --dot
digraph {
0 [ label = "ci"]
1 [ label = "test"]
2 [ label = "check"]
3 [ label = "lint"]
4 [ label = "build"]
0 -> 1 [ ]
0 -> 2 [ ]
2 -> 1 [ ]
2 -> 3 [ ]
1 -> 4 [ ]
}
dot -TpngのようにGraphviz本体に渡せば、そのまま画像として描画できる。
$ mise tasks deps ci --dot | dot -Tpng -Gdpi=150 -o deps-graph.png

run配列内のタスク参照はグラフに現れない
runに{ task = "..." }の形式でタスクを直接呼び出している場合、実行時には呼び出し先のタスクも実際に動くが、mise tasks depsのグラフには現れない。ヘルプにも明記されている仕様で、あくまでdepends/depends_post/wait_forで宣言した依存関係だけが対象になる。
[tasks.sub]
run = "echo sub task"
[tasks.main]
run = [{ task = "sub" }, "echo main task"]
$ mise tasks deps
main
sub
$ mise run main
[sub] $ echo sub task
sub task
[main] $ echo main task
main task
mainとsubは依存関係のない独立したタスクとしてグラフに表示されるが、実際にmise run mainを実行するとsubも連動して実行される。
depends_postは実行順が後ろのタスクとして表示される
depends_postは、指定したタスクを自分自身の実行後に走らせる設定である。グラフ上では、対象タスク名の後ろに(post)が付いた別のエントリとして表示される。
[tasks.notify]
run = "echo notifying"
[tasks.deploy]
depends_post = ["notify"]
run = "echo deploying"
$ mise tasks deps
deploy
notify
notify (post)
└── deploy
notify (post)は「deployの完了後に実行されるnotify」を表しており、deployがnotifyより先に完了する必要があることを示している。
–hiddenで非表示タスクも含める
hide = trueを設定したタスクは、デフォルトではグラフに表示されない。--hiddenを付けると、非表示タスクも含めて表示する。
