Techioz Blog

Mac M1 で Ruby のバージョンを切り替える

概要

Mac M1 で Ruby のバージョンを切り替えたいと考えています。私の理解では、Mac には Ruby のプリインストール バージョンが付属していると考えています (私の場合、ruby -v を実行すると次の結果が得られます)

Ruby 2.6.10p210 (2022-04-12 リビジョン 67958) [universal.arm64e-darwin23]

Rubyをbrewでインストールしました:

Ruby 3.3.1 はすでにインストールされており、最新の状態です。

このバージョンに切り替えるにはどうすればよいですか?これまでオンラインで見つけて試したものは何も役に立ちませんでした。

構成ファイルのいずれかがどこかで競合を引き起こしており、バージョンを切り替えることができないような気がします。

これが私の.zshrcです:

if [ -d "/opt/homebrew/opt/ruby/bin" ]; then
  export PATH=/opt/homebrew/opt/ruby/bin:$PATH
  export PATH=⁠ gem environment gemdir ⁠/bin:$PATH
fi

#export PATH="/opt/homebrew/opt/ruby/bin:$PATH"

#[ -f "/Users/xxx/.ghcup/env" ] && source "/Users/xxx/.ghcup/env" # ghcup-env
export PATH=/usr/local/bin:$PATH
export PATH="$PATH:/Users/xxx/Library/Application Support/Coursier/bin"


export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/Users/xxx/opt/anaconda3/bin/conda' 'shell.zsh' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
    eval "$__conda_setup"
else
    if [ -f "/Users/xxx/opt/anaconda3/etc/profile.d/conda.sh" ]; then
        . "/Users/xxx/opt/anaconda3/etc/profile.d/conda.sh"
    else
        export PATH="/Users/xxx/opt/anaconda3/bin:$PATH"
    fi
fi

unset __conda_setup
# <<< conda initialize <<<

[ -f "/Users/xxx/.ghcup/env" ] && source "/Users/xxx/.ghcup/env" # ghcup-env

if [ "$ARCH" = '' ]
then
  ARCH=⁠ arch ⁠
fi
export TOOLDIR=$HOME/c-tools
export PATH="$TOOLDIR/bin:$TOOLDIR/bin/$ARCH:$PATH"
if [ "$MANPATH" = '' ]
then
  export MANPATH=$TOOLDIR/man
else
  export MANPATH=${MANPATH}:$TOOLDIR/man
fi

export PATH="$PATH:/Users/xxx/flutter/flutter-2/bin"

# The next line updates PATH for the Google Cloud SDK.
if [ -f '/Users/xxx/google-cloud-sdk/path.zsh.inc' ]; then . '/Users/xxx/google-cloud-sdk/path.zsh.inc'; fi

# The next line enables shell command completion for gcloud.
if [ -f '/Users/xxx/google-cloud-sdk/completion.zsh.inc' ]; then . '/Users/xxx/google-cloud-sdk/completion.zsh.inc'; fi

export JAVA_HOME=$(/usr/bin/java)

#THIS MUST BE AT THE END OF THE FILE FOR SDKMAN TO WORK!!!
export SDKMAN_DIR="$HOME/.sdkman"
[[ -s "$HOME/.sdkman/bin/sdkman-init.sh" ]] && source "$HOME/.sdkman/bin/sdkman-init.sh"

これが私の .bash_profile です。

# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/Users/xxx/opt/anaconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
    eval "$__conda_setup"
else
    if [ -f "/Users/xxx/opt/anaconda3/etc/profile.d/conda.sh" ]; then
        . "/Users/xxx/opt/anaconda3/etc/profile.d/conda.sh"
    else
        export PATH="/Users/xxx/opt/anaconda3/bin:$PATH"
    fi
fi
unset __conda_setup
# <<< conda initialize <<<

. "$HOME/.cargo/env"

# >>> coursier install directory >>>
export PATH="$PATH:/Users/xxx/Library/Application Support/Coursier/bin"
# <<< coursier install directory <<<

#THIS MUST BE AT THE END OF THE FILE FOR SDKMAN TO WORK!!!
export SDKMAN_DIR="$HOME/.sdkman"
[[ -s "$HOME/.sdkman/bin/sdkman-init.sh" ]] && source "$HOME/.sdkman/bin/sdkman-init.sh"

export PATH=${PATH}:/Users/xxx/prolog/bin/sicstus-4.7.0

これが私の.profileです:

export PATH=$PATH:/usr/local/go/bin

# >>> coursier install directory >>>
export PATH="$PATH:/Users/xxx/Library/Application Support/Coursier/bin"
# <<< coursier install directory <<<

上記のほとんどが無関係であることは理解していますが、問題の原因となっている競合がどこかにあるのではないかと感じたので、これらを記載しました。

解決策

個人的には、ruby-install を使用して Ruby のバージョンをダウンロードし、chruby を切り替え用に使用しています。他の一般的なバージョン マネージャーには RVM と RBenv があり、どちらも Ruby のインストールと切り替えの機能をオールインワンで備えています。ただし、私は chruby と Ruby-install の軽量性の方が好きです。

Ruby-install/chruby の場合は次のようになります。

# first install via homebrew
brew install ruby-install 
brew install chruby 

chruby をインストールした後、.zshrc ファイルに次の数行を追加します。

source /opt/homebrew/opt/chruby/share/chruby/chruby.sh
source /opt/homebrew/opt/chruby/share/chruby/auto.sh

次に、コマンドラインで次のように実行します。

# download ruby 
ruby-install ruby-3.3.1 # or whichever version

# Switch ruby version
chruby ruby-3.3.1