mise runを省略してタスクを直接実行したい

mise.tomlにタスクを定義するとmise run <task>で実行できるが、プロジェクトのcontributorに./bin/testのような見慣れたコマンドとして使わせたい場合がある。mise generate task-stubsは、定義済みの各タスクに対応する実行ファイル(シム)を生成するコマンドである。

mise generate task-stubsの基本

[tasks.test]
run = "echo running tests"

[tasks.build]
run = "echo building"
$ mise generate task-stubs
Wrote to bin/build
Wrote to bin/build.cmd
Wrote to bin/test
Wrote to bin/test.cmd

$ ./bin/test
[test] $ echo running tests
running tests

デフォルトではbin/配下にタスクと同名のシムを生成する。中身はmise run <task>を呼び出すだけの短いシェルスクリプトである。

$ cat bin/test
#!/bin/sh
# generated by mise task-stubs
exec mise run test "$@"

Windows向けの.cmdファイルも常にあわせて生成される。--windows-launcher exeを指定すると、Windows専用のバイナリ形式のランチャーに切り替えられる。

親子関係を持つタスクは_defaultという名前になる

lintlint:fixのように、あるタスク名が別のタスクの接頭辞になっている場合、bin/lintlint:fix用のディレクトリとして使われるため、lint自体のシムはbin/lintではなくbin/lint/_defaultとして生成される。

$ mise generate task-stubs
Wrote to bin/build
Wrote to bin/lint/_default
Wrote to bin/lint/fix
Wrote to bin/test

$ ./bin/lint/_default
[lint] $ echo linting
linting

$ ./bin/lint/fix
[lint:fix] $ echo lint fix
lint fix

-d/–dirで出力先ディレクトリを変更する

デフォルトのbin/以外に出力したい場合は-d(--dir)を指定する。

$ mise generate task-stubs --dir scripts
Wrote to scripts/build
Wrote to scripts/test

-m/–mise-binでmise未インストール環境でも動く構成にする

生成されたシムは、デフォルトではPATH上のmiseコマンドをそのまま呼び出す。-mはこの呼び出し先を任意のパスに差し替えるオプションで、以下の記事で生成した./bin/miseと組み合わせて使う。

【mise】mise generate install-scriptでmiseを自動インストールするスクリプトを生成する

こうしておくと、contributorがmiseを一切インストールしていなくてもタスク用のシムを実行できる。この場合、シムの実行だけでmiseの自動インストールからタスク実行までが完結する。

$ mise generate install-script --write ./bin/mise --localize --windows
Wrote to ./bin/mise
Wrote to ./bin/mise.cmd

$ mise generate task-stubs --mise-bin ./bin/mise
Wrote to bin/test
Wrote to bin/test.cmd

$ cat bin/test
#!/bin/sh
# generated by mise task-stubs
exec ./bin/mise run test "$@"

このように生成したbin/testは、システムにmiseコマンドが一切無い状態で実行しても、./bin/miseが自動的にmiseをダウンロード・インストールしてからタスクを実行する。

$ PATH="/usr/bin:/bin" ./bin/test
mise: installing mise...
mise: installed successfully to ./.mise/mise-2026.9.2
[test] $ echo running tests
running tests

--mise-binにファイルパスを指定した場合、対応するWindows用ランチャーが同じ場所に無いと警告が表示される。mise generate install-script側で--windowsを付けて.cmdもあわせて生成しておく必要がある。

$ mise generate task-stubs --mise-bin ./bin/mise
mise WARN  ./bin/mise is a path with no Windows launcher beside it, so the generated launchers cannot run it. Write one with `mise generate install-script --write ./bin/mise --windows`, or drop --mise-bin to resolve mise off PATH.