Intelから移行したM3 MacでRbenvでのRubyインストールエラー

Homebrew

最近、Intel搭載のMacからApple Silicon搭載のM3 Macへ乗り換えました。
ただ、Rubyのバージョンマネージャーであるrbenvを使って新しいRubyのバージョンをインストールしようとした際に問題が発生しました。

調査してみると、Homebrewに原因があったのですが、Intel→Arm(Apple Silicon)の移行特有の内容だったので、メモしておきます。
(M1、M2チップといった他のArm系のチップでも発生しうると思います)

結論

M3 Macへ移行するとき、データ移行等はMacの移行アシスタントを使いました。
アプリケーションなど全てを簡単な操作で移行できたのですが、ここに思わぬ落とし穴がありました。

Intel用のHomebrewがそのまま移行されていたのです。

$ brew config
HOMEBREW_VERSION: 4.4.15
ORIGIN: https://github.com/Homebrew/brew
HEAD: b6fafba4864d65acabf966415e14b2dd86d81e1a
Last commit: 3 days ago
Branch: stable
Core tap JSON: 08 Jan 00:34 UTC
Core cask tap JSON: 08 Jan 00:34 UTC
HOMEBREW_PREFIX: /usr/local
HOMEBREW_REPOSITORY: /usr/local/Homebrew
HOMEBREW_CELLAR: /usr/local/Cellar
HOMEBREW_CASK_OPTS: []
HOMEBREW_MAKE_JOBS: 8
Homebrew Ruby: 3.3.6 => /usr/local/Homebrew/Library/Homebrew/vendor/portable-ruby/3.3.6/bin/ruby
CPU: octa-core 64-bit westmere
Clang: 16.0.0 build 1600
Git: 2.47.0 => /usr/local/bin/git
Curl: 8.6.0 => /usr/bin/curl
macOS: 14.5-x86_64
CLT: 16.2.0.0.1.1733547573
Xcode: N/A
Rosetta 2: true

macOS: 14.5-x86_64 についてx86_64 となっており、これはIntel向けであることを指しています。
Armならarm64 のものを使うのがベターであり、現にrbenvでのRubyインストールでエラーの原因となってしまっていました…

パッケージがArm系のCPUに対応していないなど、Arm系のCPUが出始めたころは必要なことも多かったでしょうが、今となっては必要ない(対応されていないパッケージは使わないと決めた)と判断して、今回は完全に移行させようと思います。
(2種類のHomebrewを共存できるようにもできるみたいですが、ここでは割愛します)

移行手順

1. 現在HomeBrewに入っているパッケージをバックアップ

まず、現在インストールされているパッケージの一覧をBrewfileとして出力します。

$ brew bundle dump

これにより、カレントディレクトリにBrewfileが作成されます。
Brewfileは、現在インストールされているパッケージやCaskアプリケーションの一覧が記載されており、新しいHomebrewにパッケージを再インストールする際に使用します。

2. Inter用のHomebrewをアンインストール

Intel用のHomebrewをアンインストールするため、以下のコマンドを実行します。

$ curl -fsSLO https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh
$ /bin/bash uninstall.sh --path /usr/local

3. Arm用のHomebrewをインストール

Arm用のHomebrewをインストールするため、以下のコマンドを実行します。

$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

インストール後はPATHも通しておきます。(以下は私の環境のものなので、適宜読み替えて下さい)

$ echo 'export PATH="/opt/homebrew/bin:$PATH"' >> ~/.zshrc
$ source ~/.zshrc

4. Brewfileを読み込んでパッケージをインストール

最後に1.で出力したBrewfileを使って、パッケージを一括インストールします。

$ brew bundle

rbenvで発生したエラー

そもそもRubyのインストールで発生したのは以下のエラーでした。

$ rbenv install 3.2.2

ruby-build: using openssl@3 from homebrew
==> Downloading ruby-3.2.2.tar.gz...
-> curl -q -fL -o ruby-3.2.2.tar.gz <https://cache.ruby-lang.org/pub/ruby/3.2/ruby-3.2.2.tar.gz>
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 19.5M  100 19.5M    0     0  24.8M      0 --:--:-- --:--:-- --:--:-- 24.8M
==> Installing ruby-3.2.2...
ruby-build: using readline from homebrew
ruby-build: using libyaml from homebrew
ruby-build: using gmp from homebrew
-> ./configure "--prefix=$HOME/.rbenv/versions/3.2.2" --with-openssl-dir=/usr/local/opt/openssl@3 --enable-shared --with-readline-dir=/usr/local/opt/readline --with-libyaml-dir=/usr/local/opt/libyaml --with-gmp-dir=/usr/local/opt/gmp --with-ext=openssl,psych,+
-> make -j 8

BUILD FAILED (macOS 14.5 on arm64 using ruby-build 20241225.2)

You can inspect the build directory at /var/folders/7y/vhlwk8w92bsgz4lbswgddywh0000gn/T/ruby-build.20250107221259.97134.0X2Dxh
See the full build log at /var/folders/7y/vhlwk8w92bsgz4lbswgddywh0000gn/T/ruby-build.20250107221259.97134.log

ログを見ると以下のようなエラーが出ていて、

readline.c:1903:37: error: use of undeclared identifier 'username_completion_function'; did you mean 'rl_username_completion_function'?
 1903 |                                     rl_username_completion_function);
      |                                     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                                     rl_username_completion_function

色々試しながら調べてみると、この記事と同じ原因でした。
Mac(M1)でrbenv install時に BUILD FAILEDになった場合の対処法 #Ruby – Qiita

他にも同じようにIntel用のアプリケーションのままのものがあると思うので、また調べてみようと思います…

タイトルとURLをコピーしました