miseで環境変数がうまく設定されないときの対応

miseのEnvironments機能を使えば、そのディレクトリ内だけの環境変数を設定できます。今回はmiseによる環境変数がうまく設定できないときの解決方法を紹介します。

現状の確認

タイトルのとおり、miseで設定したはずの環境変数が使えてませんでした。
さくっと状況をまとめておきます。

echo $FOOで環境変数の確認

該当するディレクトリ内で環境変数を表示しようとしても、表示されませんでした。

Terminal window
cd foo-dir
echo $FOO

miseがインストールされているか確認

念の為、そもそもmiseがインストールされているかどうかを確認しました。

Terminal window
type mise
# which mise

別環境でインストールし忘れてたという訳ではなかったようです。

miseがenvを認識しているかで確認

次のようにmise setを使うと、現在のディレクトリにてmiseで設定している環境変数の一覧を表示できます。

Terminal window
mise set
key value source
FOO /mnt/z/foo ~/foo-dir/mise.local.toml

ちゃんとtomlには書けているようです。

原因

ここまで確認してもだめだったため、自分の.zshrcを確認してみました。

.zshrc
if [[ -e ~/.local/bin/mise ]]; then
eval "$(~/.local/bin/mise activate zsh)"
fi

もしやと思い~/.local/bin/miseがあるか確認したところ、ありませんでした。どうやら自分の環境では/home/linuxbrew/.linuxbrew/bin/miseにインストールされていたようです。

別のPCとは違った場所にインストールされていたため、気づきませんでした。

解決方法

自分の環境に合わせてインストールmiseでactivateすれば解決です。

インストール場所に依存するのはなんだかな~と思って公式ドキュメントを読んだところ、なんと設定方法が変わったようです。

Zshの場合は次のように書かれていました。たしかに、パスが通っているならわざわざ〇〇/bin/miseとか必要ないですもんね。

Terminal window
echo 'eval "$(mise activate zsh)"' >> "${ZDOTDIR-$HOME}/.zshrc"

そんなわけで.zshrcを更新しました。

.zshrc
if type mise > /dev/null; then
eval "$(mise activate zsh)"
fi

以上、miseのenvがうまく設定されていないときの解決方法でした。