Claude Codeをwslで使おうと思ったため、Fish Shell上でnvmをインストールしようとしたら詰まったので備忘録を残す。
インストールできない
通常bashの場合
通常のbashでnvmをインストールするコマンドは次のとおりである。
$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash
このコマンドでは、nvmのインストールコマンドをダウンロードして実行している。
そして、install.shでは、~/.profileに次の環境変数を書き込んでいる。
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
内容としては、nvmのインストールしている場所をNVM_DIRという変数に置き、その後$NVM_DIR/nvm.shを実行することで、wsl起動時にnvmを読み込んでいる。
しかしfish shellでは...
シェルをbashからfishに変更すると、wsl起動時に.profileが読み込まれなくなる(代わりに.config/fish/config.fishが使用される)ので、起動時にnvm.shを実行できなくなってしまう。
解決
有志がnvm.fishというパッケージを公開してくれているのでそれを使用する。
(.config/fish/config.fishにnvm.shを読み込む設定を書き込んでもいけるかも?未検証)
nvm.fishインストール
$ fisher install jorgebucaran/nvm.fish
これでnvmコマンドがfish shellでも実行できるようになる。
次のコマンドで最新版のnpmをインストール&切り替え
$ nvm install latest # 最新版インストール
$ nvm use latest # 最新版に切り替え
シェルログイン時にlatestのnpmを選択する
npmを使うのに毎回nvm use latestを実行するのは面倒なので、config.fishに自動で実行するようにするコードを追記する
合わせて、npmを環境変数に追加する
if type -q nvm # nvmがインストールされていたら
nvm use latest --silent # --silent : ログ出力無しで実行
end
set PATH $(dirname (which npm)) $PATH # そのバージョンのbinディレクトリを環境変数に追加
参考