mise activateを恒久的に組み込まずにmiseを使いたい

【mise】mise activateでシェルにmiseを組み込む はシェルの設定ファイルに追記して恒久的にmiseを有効化する方法である。CIの1回のジョブ実行時など、シェルの設定ファイルを恒久的に変更したくない場面もある。mise envを使うと、mise.tomlに応じてmiseが設定するPATHや環境変数を出力し、その場だけ有効化できる。

mise envの基本

jq = "1.7.1"と書かれたmise.tomlがあるディレクトリでmise envを実行する。

$ mise env
export PATH='/root/.local/share/mise/installs/jq/1.7.1:/root/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'

jqのインストールパスを先頭に追加したPATHが、シェルにそのままexportできる形式で出力される。この出力をevalに渡すと、現在のシェルにその場限りで反映できる。

$ eval "$(mise env -s bash)"
$ jq --version
jq-1.7.1

-s(--shell)でシェルの種類を指定する。bashzshのほか、fishnuなども指定できる。mise activateを設定していないシェルでも、この方法でmise.tomlに書いたツールをその場だけ使える。

ツール固有の環境変数も出力される

ツールによってはPATH以外の環境変数も設定される。mise.tomlgoを追加すると、GOROOTGOBINも出力に含まれる。

[tools]
jq = "1.7.1"
go = "1.25"
$ mise env --json
{
  "GOBIN": "/root/.local/share/mise/installs/go/1.25.14/bin",
  "GOROOT": "/root/.local/share/mise/installs/go/1.25.14",
  "PATH": "/root/.local/share/mise/installs/go/1.25.14/bin:/root/.local/share/mise/installs/jq/1.7.1:/root/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
}

出力形式を変更する

--jsonを付けると、上記のようにJSON形式で出力する。シェルに直接読み込ませるのではなく、他のツールで環境変数を加工したい場合に使う。

--dotenvを付けると、.envファイルにそのまま書き込めるKEY=VALUE形式で出力する。

$ mise env --dotenv
GOBIN=/root/.local/share/mise/installs/go/1.25.14/bin
GOROOT=/root/.local/share/mise/installs/go/1.25.14

PATH.envファイルのKEY=VALUE形式では既存のPATHへの追加を表現できないため、--dotenvの出力からは除外される。PATHも含めて出力したい場合は--jsonかデフォルトのexport形式を使う。