👨‍💻

開発環境管理はとりあえずmiseで

2024/06/23に公開

Mac限定です(Windowsサポート外)

開発しているとpython, nodejs, ruby, perl, golang...といろいろな言語の実行環境が必要になると思います。

それぞれの言語環境に閉じて見れば、pyenvとかrbenvとか、色々な管理ツールがありますが、それぞれ当然別個のものなのでだんだん混乱してきます。

そしてそれすら使っていない場合は brew install で乱暴にインストールしてもはやカオスなローカル環境ができがちでした...

半年前くらいにasdfという開発環境管理ツールを見つけて適当に使っていたのですが、最近ではさらにasdfの課題も解消したmiseというのが出てきて、これを使っています。

メリット

複数の言語の複数のバージョンを一つのツールmiseだけで管理、切り替えできる。
利用方法がシンプルで簡単。

miseについて

読み方は「ミーズ」(pronounced "meez")

https://github.com/jdx/mise

開発環境セットアップツール。

インストールする

% 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