はじめに
mise を使っていて idiomatic_version_file_enable_tools という設定を知り、地味ながらもかなり便利だなと感じたので紹介します。
一言でいうと、.nvmrc や .python-version のような、nvmやpyenvなど従来のバージョンマネージャで使われてきたファイルを、miseでもそのまま読み込めるようにする設定 です。nvmやpyenvからmiseへ移行する際、既存のファイルを書き換えずに済むので地味に助かります。この記事ではこの設定が何をするものか、なぜ便利なのかを整理します。
「イディオマティックなバージョンファイル」とは
mise は基本的に mise.toml(または asdf 互換の .tool-versions)でツールのバージョンを管理しますが、それとは別に各言語エコシステムに古くから存在する「その言語固有のバージョンファイル」も読み取れるようになっています。これを mise では idiomatic version files(イディオマティックなバージョンファイル) と呼んでいます。
対応ツールは公式ドキュメントに一覧表として掲載されており、実際には20近いツールが対象になっています。ここではよく使われそうなものを抜粋します(詳しくはConfiguration | mise-en-placeを参照してください)。
| ファイル(抜粋) | 対応ツール |
|---|---|
.nvmrc / .node-version / package.json(devEnginesフィールド) |
Node.js |
.python-version / .python-versions
|
Python(pyenv 互換) |
.ruby-version / Gemfile(Rubyバージョン指定がある場合) |
Ruby(rbenv 互換) |
.go-version |
Go |
.java-version / .sdkmanrc
|
Java(sdkman 互換) |
rust-toolchain.toml |
Rust |
.terraform-version |
Terraform |
global.json |
.NET |
なお asdf ではこれらを「legacy version files(レガシーなバージョンファイル)」と呼んでいますが、mise の開発者はこの呼び方に否定的で、「asdf/mise専用ではなく他のツールでも使われる、言語として自然な形式のファイル」という意味を込めて "idiomatic" という表現を採用しています。
何が嬉しいのか
1. チームやリポジトリの移行がスムーズになる
nvm や pyenv からmiseへの移行を考えたとき、リポジトリに大量に存在する .nvmrc や .python-version を書き換えずに、そのままmiseに読ませることができます。移行期間中は「nvm派・pyenv派のメンバー」と「mise派のメンバー」が同じファイルを見ながら共存できるため、一斉移行を強制する必要がありません。
2. 既存ツールとの互換性を保ったまま使える
.nvmrc はエイリアス表記(lts/hydrogen など)にも対応しており、nvm でもmiseでも同じ意味で解釈されます。つまり「mise専用の書き方」を新たに覚えてもらう必要がなく、既存のワークフローを崩さずに導入できるのが大きな利点です。
使い方
特定のツールに対して有効化するには、mise settings add コマンドを使います。
# Node.js の .nvmrc / .node-version を読み込めるようにする
mise settings add idiomatic_version_file_enable_tools node
# 複数指定も可能
mise settings add idiomatic_version_file_enable_tools python
グローバル設定ファイル ~/.config/mise/config.toml に直接書いても構いません。
[settings]
idiomatic_version_file_enable_tools = ["node", "python"]
まとめ
idiomatic_version_file_enable_tools は、一言でいえば 「miseの世界に一気に全部寄せなくても、既存の .nvmrc などをそのまま活かしながら段階的に移行できるようにする」 ための設定です。特に、
- 大量のリポジトリを抱えていて
.tool-versionsや.nvmrcを一斉に書き換えたくない - チーム内でまだ全員がmiseに移行しきれていない
といった状況では非常に有効です。逆に新規プロジェクトで最初から mise.toml だけで統一する場合は、無理に有効化する必要はありません。プロジェクトやチームの状況に応じて、必要なツールだけピンポイントで有効化するのがおすすめです。