Ruby 3.3.0のインストールエラー

背景

Ruby3.3.0が2023年12月にリリースされました。
Railsを使った簡単なアプリを作成するために、せっかくなので、最新の3.3.0を使おうと思って、rbenvでインストールしようとしました。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ rbenv install 3.3.0
ruby-build: using openssl@1.1 from homebrew
==> Downloading ruby-3.3.0.tar.gz...
-> curl -q -fL -o ruby-3.3.0.tar.gz https://cache.ruby-lang.org/pub/ruby/3.3/ruby-3.3.0.tar.gz
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 21.0M 100 21.0M 0 0 15.6M 0 0:00:01 0:00:01 --:--:-- 15.6M
==> Installing ruby-3.3.0...
ruby-build: using readline from homebrew
-> ./configure "--prefix=$HOME/.anyenv/envs/rbenv/versions/3.3.0" --with-openssl-dir=/usr/local/opt/openssl@1.1 --enable-shared --with-readline-dir=/usr/local/opt/readline --with-ext=openssl,psych,+
-> make -j 8
*** Following extensions are not compiled:
psych:
Could not be configured. It will not be installed.
Check /var/folders/vs/21c14yw15wngfp0fn50h2zkw0000gp/T/ruby-build.20240116222001.35871.p9E1v4/ruby-3.3.0/ext/psych/mkmf.log for more details.

BUILD FAILED (macOS 13.6 on x86_64 using ruby-build 20231225-2-g3b79c29)

You can inspect the build directory at /var/folders/vs/21c14yw15wngfp0fn50h2zkw0000gp/T/ruby-build.20240116222001.35871.p9E1v4
See the full build log at /var/folders/vs/21c14yw15wngfp0fn50h2zkw0000gp/T/ruby-build.20240116222001.35871.log

psychというextensionがコンパイルできなかったとして、エラーになってしまいました。
ログを見るとわかると思うのですが、インテルMacを利用しています。

原因

エラーメッセージをよく見ると、

1
2
3
4
*** Following extensions are not compiled:
psych:
Could not be configured. It will not be installed.
Check /var/folders/vs/21c14yw15wngfp0fn50h2zkw0000gp/T/ruby-build.20240116222001.35871.p9E1v4/ruby-3.3.0/ext/psych/mkmf.log for more details.

より詳細な情報がmkmf.logに記載されていると書かれているので、それを見てみます。
Rubyインストール前のrbenvでのコンパイル処理のディレクトリは/var/folders/あたりを利用しているんですね。

mkmf.log

1
2
3
4
5
6
pkg_config: checking for pkg-config for yaml-0.1... -------------------- not found

package configuration for yaml-0.1 is not found
--------------------

find_header: checking for yaml.h... -------------------- no

yaml.hが見つからないとなってエラーになっています。
ヘッダファイルが見つからない場合はだいたいlibヘッダファイル名のライブラリがインストールされていないのが原因です。

対策

調べてみるとRuby3.2.0以降ではlibyamlが必須になっているようでした。
homebrewでインストールします。

1
2
3
4
5
6
7
8
9
10
11
12
13
$ brew install libyaml
Running `brew update --auto-update`...
(省略)
==> Downloading https://ghcr.io/v2/homebrew/core/libyaml/manifests/0.2.5
################################################################################### 100.0%
==> Fetching libyaml
==> Downloading https://ghcr.io/v2/homebrew/core/libyaml/blobs/sha256:b49e62f014b3e7d85a16
################################################################################### 100.0%
==> Pouring libyaml--0.2.5.ventura.bottle.tar.gz
🍺 /usr/local/Cellar/libyaml/0.2.5: 10 files, 330KB
==> Running `brew cleanup libyaml`...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).

インストールできました。
再度Ruby3.3.0のインストールを行います。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ rbenv install 3.3.0
ruby-build: using openssl@1.1 from homebrew
==> Downloading ruby-3.3.0.tar.gz...
-> curl -q -fL -o ruby-3.3.0.tar.gz https://cache.ruby-lang.org/pub/ruby/3.3/ruby-3.3.0.tar.gz
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 21.0M 100 21.0M 0 0 6361k 0 0:00:03 0:00:03 --:--:-- 6371k
==> Installing ruby-3.3.0...
ruby-build: using readline from homebrew
ruby-build: using libyaml from homebrew
-> ./configure "--prefix=$HOME/.anyenv/envs/rbenv/versions/3.3.0" --with-openssl-dir=/usr/local/opt/openssl@1.1 --enable-shared --with-readline-dir=/usr/local/opt/readline --with-libyaml-dir=/usr/local/opt/libyaml --with-ext=openssl,psych,+
-> make -j 8
-> make install
==> Installed ruby-3.3.0 to /Users/user/.anyenv/envs/rbenv/versions/3.3.0

NOTE: to activate this Ruby version as the new default, run: rbenv global 3.3.0

無事インストールできました。
エラーが起こったときとconfigureオプションも異なっていて、libyamlがインストールされたことで、--with-libyaml-dir=/usr/local/opt/libyamlが追加されています。

まとめ

久しぶりにRubyのインストールを行いましたが、躓いてしまいました。
3.2.0からの変更点だったということで、今更ここで躓く方はそれほど多くないと思います。
やはり新しい情報は常にキャッチアップしていかないといけないと思いました。