2
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

初心者の初心者による初心者のための開発環境セットアップツール mise 入門(updated from rtx)

Last updated at Posted at 2024-09-10

はじめに

バージョン管理ツール rtx がリリースされてからざっと 1 年半が経過しました。その間、このツールは度重なるアップデートを重ね、利便性を向上させていきました。また、名称も検索のしづらい rtx から mise (mise-en-place) へと変更しました。
こうして変遷を重ねていく中で、私が以前執筆した入門記事の内容もだいぶ古くなってきたと思うので、改めて公式ドキュメントを参考に使い方をまとめてみようと思います(ユーザーが増える中で私の記事も一定数読まれているようです。ありがとうございます)。

mise とは

"The front-end to your dev env"(開発環境のフロントエンド

もともとこのツールは asdfrust クローンとして開発されたものでしたが、今では

  • asdf のように(あるいは nvmpyenv のように、どの言語でも)、nodepythoncmaketerraform など数百もの開発ツールを管理する。
  • direnv のように、様々なプロジェクトディレクトリの環境変数を管理する。
  • make のように、プロジェクトのビルドやテストに使うタスクを管理する。

と、よりマルチに開発環境を整えることができるようになっています(本稿では以前のようにバージョン管理機能を中心に扱います)。
ちなみに、正式名称は "mise-en-place" で "MEEZ ahn plahs" と発音するそうです。

注意事項

以下の説明は私の環境における現時点での最新版(2024.9.1 linux-x64)での説明になります。ご了承ください。

sh
$ mise --version
2024.9.1 linux-x64 (2024-09-10)

導入方法

公式ドキュメントにある導入方法をまとめていきたいと思います。

mise CLI のインストール

スタンドアローン

パッケージマネージャを使わない場合はこちらの方法を用います。

sh
$ curl https://mise.run | sh
$ ~/.local/bin/mise --version
mise 2024.x.x

"~/.local/bin" が PATH にある必要はありません。mise は自動的に自身のディレクトリを PATH に追加します。

シェルスクリプトを使いたくない場合は以下のコマンドを実行します。

sh
curl https://mise.jdx.dev/mise-latest-macos-arm64 > ~/.local/bin/mise
chmod +x ~/.local/bin/mise

置き場所はどこでもいいので、適宜 ~/bin, /usr/local/bin, ~/.local/bin などと読み替えてください。また、ダウンロード先の URL も os やアーキテクチャに応じて適宜読み替えてください。対応している os・アーキテクチャは以下のとおりです。

  • macos-x64
  • macos-arm64
  • linux-x64
  • linux-x64-musl
  • linux-arm64
  • linux-arm64-musl
  • linux-armv6
  • linux-armv6-musl
  • linux-armv7
  • linux-armv7-musl

それ以外が必要な場合は cargo install mise でコンパイルしてください(後述)。

apk

Alpine Linux でのインストール

sh
apk add mise

mise はコミュニティレポジトリに登録されています。

apt

Ubuntu/Debian でのインストール

sh
# amd64
apt update -y && apt install -y gpg sudo wget curl
sudo install -dm 755 /etc/apt/keyrings
wget -qO - https://mise.jdx.dev/gpg-key.pub | gpg --dearmor | sudo tee /etc/apt/keyrings/mise-archive-keyring.gpg 1> /dev/null
echo "deb [signed-by=/etc/apt/keyrings/mise-archive-keyring.gpg arch=amd64] https://mise.jdx.dev/deb stable main" | sudo tee /etc/apt/sources.list.d/mise.list
sudo apt update
sudo apt install -y mise
sh
# arm64
apt update -y && apt install -y gpg sudo wget curl
sudo install -dm 755 /etc/apt/keyrings
wget -qO - https://mise.jdx.dev/gpg-key.pub | gpg --dearmor | sudo tee /etc/apt/keyrings/mise-archive-keyring.gpg 1> /dev/null
echo "deb [signed-by=/etc/apt/keyrings/mise-archive-keyring.gpg arch=arm64] https://mise.jdx.dev/deb stable main" | sudo tee /etc/apt/sources.list.d/mise.list
sudo apt update
sudo apt install -y mise

aur

Arch Linux でのインストール

sh
git clone https://aur.archlinux.org/mise.git
cd mise
makepkg -si

AUR ヘルパーを使ったインストールも可能です。

Cargo

Cargo によるソースコードからのビルド

sh
cargo install mise

cargo-binstal による高速化

sh
cargo install cargo-binstall
cargo binstall mise

main における最新のコミットからのビルド

sh
cargo install mise --git https://github.com/jdx/mise --branch main

dnf

Fedora、CentOS、Amazon Linux、RHEL、その他 dnf ベースのディストリビューションでのインストール

sh
dnf install -y dnf-plugins-core
dnf config-manager --add-repo https://mise.jdx.dev/rpm/mise.repo
dnf install -y mise

Docker

sh
docker run jdxcode/mise x node@20 -- node -v

Homebrew

sh
brew install mise

npm

mise は npm においてコンパイル済みバイナリとして利用可能です。これは単に npm によって配布されているだけであり Node.js パッケージではありません。これは、package.jsonnpx を使って mise をセットアップしたい JS プロジェクトにおいて有用です。

sh
npm install -g @jdxcode/mise

フルインストールすることなく単一のコマンドを試したい場合は npx を用いてください。

sh
npx @jdxcode/mise exec python@3.11 -- python some_script.py

GitHub Releases

GitHub からの最新バージョンのダウンロード

sh
curl https://github.com/jdx/mise/releases/download/v2024.1.0/mise-v2024.1.0-linux-x64 > /usr/local/bin/mise
chmod +x /usr/local/bin/mise

MacPorts

sh
sudo port install mise

nix

Nix パッケージマネージャーの 23.05 リリース以降

sh
nix-env -iA mise

直接 mise-flake.packages.${system}.mise を用いることによりパッケージをインポートすることもできます。これはすべてのデフォルト Nix システムをサポートします。

yum

sh
yum install -y yum-utils
yum-config-manager --add-repo https://mise.jdx.dev/rpm/mise.repo
yum install -y mise

Windows

最新のリリースを GitHub からダウンロードし、バイナリを PATH に追加し、PATH が shims ディレクトリを含むよう編集します(デフォルトでは %USERPROFILE%\.local\share\mise\shims)。
Windows のサポートは現在のところ非常に限定的であることに留意してください。

mise を使用可能にする

以下のいずれかの方法を用います

方法その 1:mise activate を用いる

mise activate を rc ファイルに書き込み、アクティベートします。シェルに応じて以下のコマンドを実行します。実行後はシェルを再起動してください。

bash
echo 'eval "$(~/.local/bin/mise activate bash)"' >> ~/.bashrc
zsh
echo 'eval "$(~/.local/bin/mise activate zsh)"' >> ~/.zshrc
fish
echo '~/.local/bin/mise activate fish | source' >> ~/.config/fish/config.fish

方法その 2:shims を PATH に追加する

以下の方法を用いることで mise をアクティベートせずに利用することができます。書き込む先として .bashrc/.zshrc を .bash_profile/.zprofile の代わりに用いることも可能です。

bash
echo 'export PATH="$HOME/.local/share/mise/shims:$PATH"' >> ~/.bash_profile
zsh
echo 'export PATH="$HOME/.local/share/mise/shims:$PATH"' >> ~/.zprofile
fish
fish_add_path ~/.local/share/mise/shims

基本的な使い方

バージョンの確認

まず、無事にインストールできたかの検証もかねて試しにバージョンを確認してみます。

sh
$ mise --version
2024.9.1 linux-x64 (2024-09-10)

このような表示が出れば成功です。

実際に開発ツールをインストールしてみる

実際に開発ツールをインストールします。ここでは前回同様 Python を例にします。

プラグイン一覧の表示

インストール可能なプラグインを確認します。

sh
$ mise plugins ls-remote
1password-cli
aapt2
act

...

zola
zoxide
zprint

なお、mise plugins install name_of_plugin によってプラグインを単独でインストールできますが、他のコマンド実行時に必要であれば自動でインストールされますのであまり気にしなくても大丈夫です。また、コミュニティ開発プラグインをインストールする際は確認画面が出ますのでその際は Yes を選択してください。

インストール可能なバージョンの表示

インストール可能なバージョンを確認します。

sh
$ mise ls-remote python
activepython-2.7.14
activepython-3.5.4
activepython-3.6.0

...

3.13t-dev
3.14-dev
3.14t-dev

特定の Python のインストール

特定のバージョンの Python をインストールします。

sh
mise install python@3.12.6 # 特定のバージョンをインストールする場合
mise install python@3.12 # プレフィックスに一致するバージョンをインストールする場合
mise install python@latest # 最新のバージョンをインストールする場合

使用するバージョンの設定

特定のバージョンをグローバルに適用する場合、以下のコマンドを実行します。

sh
mise use -g python@3.12

また、現在のディレクトリにのみ適用する場合、以下のコマンドを実行します。

sh
mise use python@3.12

なお、これらのコマンドはまだインストールしていないバージョンに対して実行した場合も実行されるため、インストールしたバージョンをすぐにグローバルあるいはローカルに適用したい場合、mise install の実行は不要です。

インストールしたバージョンの一覧は以下のコマンドで確認できます。

sh
$ mise ls
Tool    Version  Config Source                         Requested
python  3.11.9   /path/to/working/directory/.mise.toml 3.11
python  3.12.6   ~/.config/mise/config.toml            latest

Config Source で示されているファイルにコマンドで指定した内容が書き込まれています。ファイル形式は mise use で指定した場合 toml 形式です。こちらのファイルを直接編集したり、削除したりすることで設定を変更することも可能です。その場合、mise install の実行によって不足したバージョンをインストールすることもできます。

asdf のように mise local mise global によってバージョンの指定をすることも可能ですが、その場合生成される設定ファイルが .tool-versions になり、プレーンテキスト形式となるためあまりおすすめしません(公式で非推奨となっています)。

バージョン・プラグインの削除

バージョンの削除をしたい場合、以下のコマンドを実行します。

sh
rtx uninstall python@3.12

プラグインの削除をしたい場合、以下のコマンドを実行します。

sh
rtx plugins uninstall name_of_plugin

bun、deno、erlang、go、java、node、python、ruby、zig に関してはプラグインが組み込まれているため、明示的にに上書きしない限りはプラグインのインストールがされることはありません。同様に、アンインストールもできません。

コマンド一覧

最後に mise --help と入力して mise のコマンドを概観してみようと思います。

sh
$ 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]
  backends     Manage backends [aliases: b]
  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]
  generate     [experimental] Generate files for various tools/services [aliases: gen]
  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
  registry     [experimental] List available 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

  -P, --profile <PROFILE>
          Set the profile (environment)

  -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

Examples:

    $ mise install node@20.0.0       Install a specific node version
    $ mise install node@20           Install a version matching a prefix
    $ mise install node              Install the node version defined in config
    $ mise install                   Install all plugins/tools defined in config

    $ mise install cargo:ripgrep            Install something via cargo
    $ mise install npm:prettier             Install something via npm

    $ mise use node@20               Use node-20.x in current project
    $ mise use -g node@20            Use node-20.x as default
    $ mise use node@latest           Use latest node in current directory
    $ mise use -g node@system        Use system node everywhere unless overridden

    $ mise up --interactive          Show a menu to upgrade tools

    $ mise x -- npm install          `npm install` w/ config loaded into PATH
    $ mise x node@20 -- node app.js  `node app.js` w/ config + node-20.x on PATH

    $ mise set NODE_ENV=production   Set NODE_ENV=production in config

    $ mise run build                 Run `build` tasks
    $ mise watch build               Run `build` tasks repeatedly when files change

    $ mise settings                  Show settings in use
    $ mise settings set color 0      Disable color by modifying global config file

いくつかめぼしいコマンドだけピックアップしておきます。

sh
mise alias # エイリアスを管理する
mise doctor # mise の問題点を確認する
mise self-update # mise をアップデートする
mise upgrade # 古くなったツールのバージョンを上げる

ちょっとした小技

usage を入れておく

mise を利用する際にシェル補完機能に関するエラーが出ることがあります。これを回避するために mise の作者様が作った usage と呼ばれるツールを入れておきます。

sh
mise use -g usage

試験的機能を有効化する

上記のコマンド一覧の内、[experimental] 表示のされているものは試験的機能のため初期状態では無効化されています。以下のコマンドで有効化できます。

sh
mise settings set experimental true

asdf 以外のバックエンドも使える(試験的機能)

コマンド一覧の Examples を見ると cargo や npm などのバックエンドも使えるようです。実際に走らせてみると以下のようになります。

sh
$ mise install npm:prettier
$ mise ls
Tool          Version  Config Source  Requested

...

npm:prettier  3.3.3

...

公式サイトの該当ページを見ると、現在対応しているバックエンドには CargoGonpmpipxSPMUbiVfox があるようです。将来的には brewnix などにも対応したいとのことです。
試しに pipx を用いて xonsh を入れてみます。

sh
mise use -g pipx # ここではコミュニティプラグインを用いてインストールしましたが、もちろん他の方法で pipx を導入しても構いません。
mise use -g pipx:xonsh

出力は省略しますが、これで実際に動作しました。

追記:pipx の代わりに uvx をバックエンドとして利用することもできるようです。最近 uv を使い始めたので個人的にはこっちを使っていきたいところ。以下のコマンドで導入できます。この場合 pipx はアンインストールしてしまっても構いません。

sh
mise use -g uv # uv 導入済みの場合は不要
mise settings set pipx_uvx true

おわりに

もともと私が rtx の解説記事を書き始めたのはまだ新しいツールだったため解説記事もロクになく、自分で公式ドキュメントに当たりながら試行錯誤する必要があったため、だったらその備忘録を記事に起こして公開してしまえという気持ちからでした。あれから rtx 改め mise のユーザーも増え、解説記事も調べればいくらでも出てくる状況になりました。そんな中で私が今更追加で記事を書く必要があるのかなとも思いましたが、いつまでも rtx asdf で検索したときにそれなりに上に上がってくるような記事が古いままでは個人的に収まりが悪かったので重い腰を上げてこの記事を書くことにしました。とはいえバージョン管理機能以外のところに関してはほとんど手つかずなので、そのあたりも今後は触ってみようかなと思います。この記事が今後新規に mise を使い始める方の助けになれば幸いです。

参考文献


2
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?