Ruby
自分はXcode開発においてパッケージマネージャとしてSPMばかり利用しているのでRubyを必要とする機会はあまり多くないのですが、今回たまたまGemfileを利用しているコードがあり、その対応のためにRubyをインストールしようとしてコケた話と解決方法を載せておきます。
環境構築
まずはhomebrewをインストールします。
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
その後、ruby-buildとrbenvをインストールします。
brew install ruby-build, rbenv
で、ここまでは問題ありません。
エラー内容
rbenvでRubyをインストールしようとすると以下のエラーが出てコケる人が対象です。
$ rbenv install 2.7.6
Downloading openssl-1.1.1n.tar.gz...
-> https://dqw8nmjcqpjn7.cloudfront.net/40dceb51a4f6a5275bde0e6bf20ef4b91bfc32ed57c0552e2e8e15463372b17a
Installing openssl-1.1.1n...
BUILD FAILED (macOS 12.0 using ruby-build 20220415)
Inspect or clean up the working tree at /var/folders/6y/6m_84_f16cn458b9myctdsp80000gn/T/ruby-build.20220420172334.9649.UrADEQ
Results logged to /var/folders/6y/6m_84_f16cn458b9myctdsp80000gn/T/ruby-build.20220420172334.9649.log
ポイントとしてはopenssl関連の辺りでコケていることが重要です。
更に、ログを見ると
apps/bf_prefix.c:10:10: fatal error: crypto/aes/aes_ecb.c:10:10: apps/s_socket.c'stdio.h' file not found
fatal error:11:crypto/aes/aes_core.capps/s_cb.c:: 10:11 :'assert.h' file not found:10: fatal error39apps/apps.cfatal error: : 'stdio.h' file not found
:'stdio.h' file not found
このようにassert.h
とstdio.h
が見つからないというエラーが出ている必要があります。
原因
環境変数に不要なPATHが通っていることが原因です。
.zshrc
.zshrc
で不要なパスを通している可能性があるのでチェックしましょう。
export PATH=/usr/local/opt/openssl@3/bin:$PATH
みたいにopenssl@3にパスを通すような内容が書き込まれているとダメなので消しましょう。
source ~/.zshrc
で反映させた設定を読み込むことができます。
環境変数
export -p
として全ての環境変数一覧を見てみます。
export -T PATH path=( /opt/homebrew/opt/openssl@3/bin /opt/homebrew/bin /opt/homebrew/sbin /usr/local/bin /usr/bin /bin /usr/sbin /sbin /opt/devkitpro/tools/bin /Library/Apple/usr/bin )
するとこんな感じで/opt/homebrew/opt/openssl@3/bin
というところにPATHが通っている場合があります。どうも.zshrc
以外でもなにかの拍子にPATHが通ってしまう場合があるみたいなので、この場合も削除しましょう。
対策後
$ rbenv install 2.7.6
Downloading openssl-1.1.1n.tar.gz...
-> https://dqw8nmjcqpjn7.cloudfront.net/40dceb51a4f6a5275bde0e6bf20ef4b91bfc32ed57c0552e2e8e15463372b17a
Installing openssl-1.1.1n...
Installed openssl-1.1.1n to /Users/devonly/.rbenv/versions/2.7.6
Downloading ruby-2.7.6.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.7/ruby-2.7.6.tar.bz2
Installing ruby-2.7.6...
ruby-build: using readline from homebrew
Installed ruby-2.7.6 to /Users/devonly/.rbenv/versions/2.7.6
無事にインストールができました。
$ rbenv versions
* system
2.7.6
このままだとシステムのRubyを使ってしまうのでrbenvでユーザが管理するRubyを使うようにします。
$ rbenv global 2.7.6
このコマンドで2.7.6のRubyが使われるようになります
$ rbenv versions
system
* 2.7.6 (set by /Users/devonly/.rbenv/version)
ただし、このままではコマンドから実行したときにシステムのRubyが使われてしまうので、rbenvのRubyが使われるようにパスを通します。
[[ -d ~/.rbenv ]] && \
export PATH=${HOME}/.rbenv/bin:${PATH} && \
eval "$(rbenv init -)"
source ~/.zshrc
で忘れずに設定を反映させましょう。
$ which gem
$ which ruby
のようなコマンドでrbenvのパスが表示されれば成功です。