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という名前になる
lintとlint:fixのように、あるタスク名が別のタスクの接頭辞になっている場合、bin/lintはlint: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と組み合わせて使う。
こうしておくと、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.
