mise のパス設定の不具合修正(再修正) : hkob の雑記録 (372)

はじめに

hkob の雑記録の第372回目(通算769日目)は、昨日とりあえず不具合を修正した mise のパス設定をよりよく解決する方法を解説します。

昨日の解決案

昨日は、conf.d で mise の設定が入っているので、それを無効化すればいいのではという解決策でした。具体的には vendor_conf.d の中に mise-activate.fish というファイルがあり、この処理の前に MISE_FISH_AUTO_ACTIVATE を 0 にすれば activate は呼ばれないという解決法でした。

if [ "$MISE_FISH_AUTO_ACTIVATE" != "0" ]
  /opt/homebrew/opt/mise/bin/mise activate fish | source
end

翌朝のひらめき

翌朝、起きるとこの brew パッケージを作成した人のメッセージに気づきました。そもそも conf.d で mise を設定できるのであれば、brew の設定をこの前に実行すればいいだけです。そもそも config.fish にこのような設定を書くべきではなく、システムに関するものは conf.d に書くべきだという主張が見えてきます。「conf.d という仕組みがあるんだからちゃんと使えよ」と言われた気がしました。

そうとわかれば、Notion AI に教えてみましょう。早速「ユーザーの提案の方が優れています。」と言われてしまいました。

Notion AI の再提案

ということで更新されたエージェントログは以下のようになりました。

問題

macOSでbrew install miseを使用した際、Homebrewの設定後にmise activate fishを実行してもPATHの順序が意図通りにならない。

/opt/homebrew/binmiseのパスより前に配置されてしまう。

原因

/opt/homebrew/Cellar/mise/2025.12.6/share/fish/vendor_conf.d/mise-activate.fishで自動activateが設定されている。

if [ "$MISE_FISH_AUTO_ACTIVATE" != "0" ]
    /opt/homebrew/opt/mise/bin/mise activate fish | source
end

Fish shellの読み込み順序:

  1. conf.d/*.fish
  2. vendor_conf.d/*.fish ← miseのauto activateはここ
  3. config.fish ← Homebrewの設定はここ

この順序により、miseが先にPATHを設定し、その後Homebrewが/opt/homebrew/binをPATHの先頭に追加してしまう。

解決策(推奨)

Homebrewの設定をconf.dに移動

~/.config/fish/conf.d/00-brew.fishを作成:

# Homebrewの設定
eval (/opt/homebrew/bin/brew shellenv)

~/.config/fish/config.fishからHomebrewの設定を削除し、miseはそのまま:

# mise
mise activate fish | source

# ~/bin
set -gx PATH ~/bin $PATH

メリット: miseの機能を無効化せず、読み込み順序で自然に解決。

読み込み順序

  1. conf.d/00-brew.fish → Homebrew設定
  2. vendor_conf.d/mise-activate.fish → miseのauto activate
  3. config.fish → 追加設定

代替案(非推奨)

auto activateを無効化する方法:

~/.config/fish/conf.d/00-mise.fish:

set -gx MISE_FISH_AUTO_ACTIVATE 0

config.fishで明示的に設定:

# Homebrewの設定
eval (/opt/homebrew/bin/brew shellenv)

# miseのactivate
mise activate fish | source

デメリット: miseの機能を無効化する必要がある。

確認方法

echo $PATH | tr ' ' '\n'

miseのパスが/opt/homebrew/binより上に表示されれば成功。

実際の修正

~/.config/fish/conf.d/00-mise.fish を 00-brew.fish に変更しました。

mv ~/.config/fish/conf.d/00-{mise,brew}.fish

このファイルには指摘通り brew の設定に書き換えました。

# Homebrewの設定
eval (/opt/homebrew/bin/brew shellenv)

これで再度ターミナルを再起動しました。PATH を調べると無事に mise の PATH が前に来ています。

printenv PATH
/Users/hkob/bin:/Users/hkob/.local/share/mise/installs/python/3.14.2/bin:/Users/hkob/.local/share/mise/installs/ruby/4.0.0/bin:/opt/homebrew/opt/mise/bin:/opt/homebrew/bin:/opt/homebrew/sbin:/opt/homebrew/opt/postgresql@16/bin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/opt/pmk/env/global/bin:/opt/X11/bin:/Library/Apple/usr/bin:/Library/TeX/texbin:/Applications/Wireshark.app/Contents/MacOS:/Applications/Ghostty.app/Contents/MacOS

おわりに

最初からこちらの案に気づくべきでしたね。まだまだ修行が足りないです。

hkob.notion.site