mise.tomlに何を書けるのか把握したい

miseはプロジェクトで使うツールのバージョンや環境変数、タスクをmise.tomlという設定ファイルで管理する。mise.tomlには[tools]以外にもいくつかのセクションがあり、書ける内容やファイルの置き場所にはルールがある。

mise.tomlの主なセクション

[tools] ツールのバージョンを指定する

[tools]セクションには、プロジェクトで使うツールとバージョンを記述する。

[tools]
jq = "1.7.1"
node = "20"

具体的な追記方法は【mise】mise useでプロジェクトに使うツールのバージョンを設定する を参照。インストール方法は【mise】mise installで設定ファイルに書いたツールをインストールする を参照。

[env] 環境変数を設定する

[env]セクションには、そのディレクトリ配下で有効になる環境変数を記述する。

[env]
GREETING = "hello"

mise activateでシェルに組み込んでおくと、mise.tomlのあるディレクトリへ移動した際、GREETING環境変数が自動的に設定される。

[tasks] タスクを定義する

[tasks]セクションには、mise runで実行できるタスクを定義する。

[tasks.hello]
run = "echo $GREETING"

タスクの詳細な使い方は【mise】mise runでタスクを定義して実行する を参照。

[settings] miseの挙動を設定する

[settings]セクションには、mise自体の挙動を変更する設定を記述する。たとえばツールの並列インストール数を変更するには次のように書く。

[settings]
jobs = 4

ファイル名にはいくつかバリエーションがある

設定ファイルの名前はmise.tomlのほかに、次のようなバリエーションが使える。

mise.toml
.mise.toml
mise/config.toml
.mise/config.toml
.config/mise.toml
.config/mise/config.toml

いずれも同じ内容を書けるファイルで、機能に違いはない。設定ファイルをリポジトリのルートで目立たせたくない場合はドット始まりの.mise.tomlを、他の設定ファイルと同様に.config/配下にまとめたい場合は.config/mise/config.tomlを使うといった選び方ができる。

ディレクトリ階層のmise.tomlはマージされる

miseはカレントディレクトリから親ディレクトリへとさかのぼってmise.tomlを探し、見つかった設定を全てマージする。より深い階層の設定ほど優先度が高い。

project/
├── mise.toml       [tools] jq = "1.7.1"
└── subdir/
    └── mise.toml    [tools] jq = "1.6"

subdirで有効なツールをmise config lsで確認すると、読み込まれている設定ファイルが階層順に並ぶ。

$ cd project/subdir
$ mise config ls
/path/to/project/mise.toml         jq
/path/to/project/subdir/mise.toml  jq

mise current jqで実際に有効なバージョンを確認すると、subdir/mise.tomlに書いた1.6が優先されている。

$ mise current jq
1.6

mise.local.tomlでローカル限定の設定を上書きする

mise.local.tomlは他のどのmise.tomlよりも優先度が高く、バージョン管理に含めない前提のファイルである。チーム全体で共有したくない個人設定を書くのに使う。

# mise.local.toml
[env]
GREETING = "hello from local"

mise.tomlGREETING = "hello"と書いてあっても、mise.local.tomlがあればmise.local.tomlの値で上書きされる。

$ mise env | grep GREETING
export GREETING='hello from local'

mise.local.tomlはコミットしない前提のファイルなので、.gitignoreに追加しておく。