mise で `deprecated [idiomatic_version_file_enable_tools]:` となったら

mise を使ってる環境で `.python-version` が存在するディレクトリへ移動した際に

> mise WARN deprecated [idiomatic_version_file_enable_tools]:

を目にすることがあります。
特別な理由が無ければ

```shell-session
mise settings add idiomatic_version_file_enable_tools python
```

と指定しましょう。
これで以下の優先順位でバージョンが選択されます。

1. `./mise.toml`
2. `./.python-version`
3. `$HOME/.config/mise/config.toml`

## どういうことか

```shell-session
$ mise version
2025.5.2 linux-x64 (2025-05-07)

$ uv --version
uv 0.7.2

$ uv init python_app_dir
Initialized project `python-app-dir` at `/home/USER/python_app_dir`

$ ls python_app_dir/.python-version
python_app_dir/.python-version

$ cd python_app_dir/
mise WARN  deprecated [idiomatic_version_file_enable_tools]:
Idiomatic version files like ~/python_app_dir/.python-version are currently enabled by default. However, this will change in mise 2025.10.0 to instead default to disabled.

You can remove this warning by explicitly enabling idiomatic version files for python with:

    mise settings add idiomatic_version_file_enable_tools python

You can disable idiomatic version files with:

    mise settings add idiomatic_version_file_enable_tools "[]"

See https://github.com/jdx/mise/discussions/4345 for more information.

```

これは `.python-version` といった、ランタイムのバージョン指定ファイルが存在している時に mise が出力している WARN です。この背景は書いてある通りで

> 今は `.python-version` で指定されたランタイムのバージョンを有効化したよ。でも mise 2025.10.0 からは無視するよ。だから mise の `idiomatic_version_file_enable_tools` オプションを指定してね。

というものです。
具体的には、以下のどちらかを指定しましょうとなっています。

1. `mise settings add idiomatic_version_file_enable_tools python(ランタイム名)`
2. `mise settings add idiomatic_version_file_enable_tools "[]"`

実際の挙動と、今後困らないようにするためのベストプラクティスを探ってみました。

## 設定毎の挙動の違い

#### `mise settings add idiomatic_version_file_enable_tools python(ランタイム名)` を指定した場合

`.python-version` で指定されているバージョンが選択されます。

```shell-session
$ mise settings add idiomatic_version_file_enable_tools python
$ mise settings get idiomatic_version_file_enable_tools
["python"]

$ cat .python-version
3.12

$ python3 --version
Python 3.12.10

$ mise ls python
Tool    Version  Source                            Requested
python  3.12.10  ~/python_app_dir/.python-version  3.12
python  3.13.3
```

ちなみに `idiomatic_version_file_enable_tools` の設定は `~/.config/mise/config.toml` に書かれています。

#### `mise settings add idiomatic_version_file_enable_tools "[]"` を指定した場合

`$HOME/.config/mise/config.toml` (= `mise use -g python@VERSION`) で指定されているバージョンが選択されます。 `.python-version` は無視されます。

```shell-session
$ mise settings set idiomatic_version_file_enable_tools "[]"
$ mise settings get idiomatic_version_file_enable_tools
[]

$ cat .python-version
3.12

$ python3 --version
Python 3.13.3

$ mise ls python
Tool    Version  Source                      Requested
python  3.12.10
python  3.13.3   ~/.config/mise/config.toml  latest
```

※ 確実に上書きするため `mise settings set` で指定しています。

#### ちなみに１: `idiomatic_version_file_enable_tools` にランタイムが指定されているが `.python-version` が無い場合

`$HOME/.config/mise/config.toml` で指定されているバージョンが選択されます。mise のデフォルト挙動ですね（あたりまえだな）。

```shell-session
$ mise settings add idiomatic_version_file_enable_tools python
$ mise settings get idiomatic_version_file_enable_tools
["python"]

$ cat .python-version
cat: .python-version: No such file or directory

$ python3 --version
Python 3.13.3

$ mise ls python
Tool    Version  Source                      Requested
python  3.12.10
python  3.13.3   ~/.config/mise/config.toml  latest
```

#### ちなみに２：`idiomatic_version_file_enable_tools` にランタイムが指定されていて `.python-version` と `mise.toml` が同時に存在した場合

`mise.toml` は `mise use python@VERSION` すると作成されます。

```shell-session
$ mise settings get idiomatic_version_file_enable_tools
["python"]

$ cat .python-version
3.12

$ cat mise.toml
[tools]
python = "3.13"

$ python3 --version
Python 3.13.3

$ mise ls python
Tool    Version  Source                      Requested
python  3.12.10
python  3.13.3   ~/python_app_dir/mise.toml  3.13
```

`mise.toml` が優先されます。

## 目的と対応すべき事

`.python-version` があるということは使ってほしい意図があると考えられるため、それが適用されるべきかと思います。
しかし mise は今後 `.python-version` を無視する挙動がデフォルトになるので、理由が無ければ

```shell-session
mise settings add idiomatic_version_file_enable_tools python
```

と、`.python-version` を参照する設定が良いでしょう。
これで冒頭にも書いた通り、

1. `./mise.toml`
2. `./.python-version`
3. `$HOME/.config/mise/config.toml`

の順番でバージョンが選択されます。

## あとがき

今回は Python を対象にしましたが、Ruby や Go などでも同様です。

※ idiomatic version file って言うんですね、今回初めて知った。

[EoT]