mise で asdf のような開発言語のバージョン管理と direnv のようなディレクトリごとの環境変数の適用を行う

node.js

mise (ミーズ) は asdf と direnv とタスクランナーを合わせたツール。Rust製。

$ brew install mise
$ mise --version
              _                                        __              
   ____ ___  (_)_______        ___  ____        ____  / /___ _________
  / __ `__ \/ / ___/ _ \______/ _ \/ __ \______/ __ \/ / __ `/ ___/ _ \
 / / / / / / (__  )  __/_____/  __/ / / /_____/ /_/ / / /_/ / /__/  __/
/_/ /_/ /_/_/____/\___/      \___/_/ /_/     / .___/_/\__,_/\___/\___/
                                            /_/                 by @jdx
2025.7.4 macos-arm64 (2025-07-11)

node をインストールしてみる。なお asdf のプラグインが利用できる

$ mise use --global node@22
mise WARN  gpg not found, skipping verification
mise [email protected] ✓ installed                                                                                                                                                                   mise ~/.config/mise/config.toml tools: [email protected]

$ cat ~/.config/mise/config.toml
[tools]
node = "22"

$ mise exec -- node --version
v22.17.0

mise activate すると環境変数が更新される。

$ which node
/usr/local/bin/node

$ echo 'eval "$(mise activate zsh)"' >> ~/.zshrc
$ source ~/.zshrc
$ mise env
export PATH='/Users/sambaiz/.local/share/mise/installs/node/22.17.0/bin:...'

$ which node
/Users/sambaiz/.local/share/mise/installs/node/22.17.0/bin/node

プロジェクトのディレクトリに設定ファイルを置くと親の設定とマージされる。

$ cat mise.toml 
[tools]
node = "18"
[env]
xxx = "yyy"
[tasks.build]
description = "Build"
run = "go build main.go"

$ mise i
mise [email protected] ✓ installed 

$ node --version
v18.20.8

$ echo $xxx
yyy

$ mise run build
[build] $ go build main.go

mise.${MISE_ENV}.toml で環境ごとの設定を記述することもできる。

$ cat mise.prd.toml 
[env]
aaa = "bbb"

$ MISE_ENV=dev mise env | grep aaa
$ MISE_ENV=prd mise env | grep aaa
export aaa=bbb

参考

mise ではじめる開発環境構築