👨💻
開発環境管理はとりあえずmiseで
Mac限定です(Windowsサポート外)
開発しているとpython, nodejs, ruby, perl, golang...といろいろな言語の実行環境が必要になると思います。
それぞれの言語環境に閉じて見れば、pyenvとかrbenvとか、色々な管理ツールがありますが、それぞれ当然別個のものなのでだんだん混乱してきます。
そしてそれすら使っていない場合は brew install で乱暴にインストールしてもはやカオスなローカル環境ができがちでした...
半年前くらいにasdf
という開発環境管理ツールを見つけて適当に使っていたのですが、最近ではさらにasdfの課題も解消したmise
というのが出てきて、これを使っています。
メリット
複数の言語の複数のバージョンを一つのツールmiseだけで管理、切り替えできる。
利用方法がシンプルで簡単。
miseについて
読み方は「ミーズ」(pronounced "meez")
開発環境セットアップツール。
インストールする
% brew install mise
パス通す
bashの場合
echo 'eval "$(~/.local/bin/mise activate bash)"' >> ~/.bashrc
zshの場合
echo 'eval "$(~/.local/bin/mise activate zsh)"' >> ~/.zshrc
help見ておく
% mise help
mise is a tool for managing runtime versions. https://github.com/jdx/mise
It's a replacement for tools like nvm, nodenv, rbenv, rvm, chruby, pyenv, etc.
that works for any language. It's also great for managing linters/tools like
jq and shellcheck.
It is inspired by asdf and uses asdf's plugin ecosystem under the hood:
https://asdf-vm.com/
Usage: mise [OPTIONS] <COMMAND>
Commands:
activate Initializes mise in the current shell session
alias Manage aliases [aliases: a]
bin-paths List all the active runtime bin paths
cache Manage the mise cache
completion Generate shell completions
config [experimental] Manage config files [aliases: cfg]
current Shows current active and installed runtime versions
deactivate Disable mise for current shell session
direnv Output direnv function to use mise inside direnv
doctor Check mise installation for possible problems [aliases: dr]
env Exports env vars to activate mise a single time [aliases: e]
exec Execute a command with tool(s) set [aliases: x]
implode Removes mise CLI and all related data
install Install a tool version [aliases: i]
latest Gets the latest available version for a plugin
link Symlinks a tool version into mise [aliases: ln]
ls List installed and active tool versions [aliases: list]
ls-remote List runtime versions available for install
outdated Shows outdated tool versions
plugins Manage plugins [aliases: p]
prune Delete unused versions of tools
reshim rebuilds the shim farm
run [experimental] Run a tasks [aliases: r]
self-update Updates mise itself
set Manage environment variables
settings Manage settings
shell Sets a tool version for the current session [aliases: sh]
sync Add tool versions from external tools to mise
tasks [experimental] Manage tasks [aliases: t]
trust Marks a config file as trusted
uninstall Removes runtime versions [aliases: remove, rm]
unset Remove environment variable(s) from the config file
upgrade Upgrades outdated tool versions [aliases: up]
usage Generate a usage CLI spec
use Install tool version and add it to config [aliases: u]
version Show mise version
watch [experimental] Run a tasks watching for changes [aliases: w]
where Display the installation path for a runtime
which Shows the path that a bin name points to
help Print this message or the help of the given subcommand(s)
Options:
-C, --cd <DIR>
Change directory before running command
-q, --quiet
Suppress non-error messages
-v, --verbose...
Show extra output (use -vv for even more)
-y, --yes
Answer yes to all confirmation prompts
-h, --help
Print help (see a summary with '-h')
-V, --version
Print version
pythonを入れてみる
インストール可能なバージョンの確認
% mise ls-remote python
activepython-2.7.14
activepython-3.5.4
activepython-3.6.0
anaconda-1.4.0
anaconda-1.5.0
anaconda-1.5.1
anaconda-1.6.0
anaconda-1.6.1
anaconda-1.7.0
anaconda-1.8.0
...
3.12.1
3.12.2
3.12.3
3.12.4
3.13.0b2
3.13-dev
3.14-dev
最新版の確認
% mise latest python
3.12.4
バージョン指定してpythonをインストール
@のあとにバージョン指定
% mise install python@3.12.4
Downloading Python-3.12.4.tar.xz...
-> https://www.python.org/ftp/python/3.12.4/Python-3.12.4.tar.xz
Installing Python-3.12.4...
Installed Python-3.12.4 to /Users/knziiy/.local/share/mise/installs/python/3.12.4
mise python@3.12.4 ✓ installed
入っているpython確認
(実施した環境ではもともと3.12.2を入れていたので表示されている)
% mise list python
Plugin Version Config Source Requested
python 3.12.2 ~/.config/mise/config.toml 3.12.2
python 3.12.4
使うバージョンを切り替え(現在のディレクトリが対象)
% mise use python@3.12.4
mise ~/dev/git/xxxx/.mise.toml tools: python@3.12.4
※カレントディレクトリに .mise.toml
という設定ファイルが生成され、python@3.12.4 を利用する旨が自動的に反映される
使うバージョンを切り替え(ローカル環境全体のデフォルト)
% mise use python@3.12.4 --global
mise python is defined in ~/dev/git/xxxx/.mise.toml which overrides the global config (~/.config/mise/config.toml)
mise ~/.config/mise/config.toml tools: python@3.12.4
色々入れた結果
現状の環境。jqもバージョン管理できる。ruby outdatedしてる
% mise list
Plugin Version Config Source Requested
go 1.22.2 ~/.config/mise/config.toml 1.22.2
jq 1.7.1 ~/.tool-versions latest
node 20.12.2 ~/.config/mise/config.toml 20.12.2
node 21.7.3
perl 5.38.0 ~/.config/mise/config.toml 5.38.0
perl 5.38.2
python 3.12.2
python 3.12.4 ~/dev/git/xxxx/.mise.toml 3.12.4
ruby 3.3.1 (outdated) ~/.tool-versions latest
最後に
環境に応じた環境変数の管理もできるようですがそれはまだ未確認です。
pyenv、nvm、plenv、goenv...さよなら。
Discussion