M1 macでRubyインストール時のBUILD FAILEDエラーの解決法

RubyをM1 macにインストールする際にBUILD FAILED が表示されインストールできなかったので解決法を調べました。

結論

下記コマンドでインストールできる。

$ RUBY_CFLAGS="-w" rbenv install x.x.x

原因とエラー詳細は後述します。

環境

今回インストールした環境は以下の通りです。

❯ rbenv -v
rbenv 1.2.0

❯ ruby-build --version
ruby-build 20220324

❯ brew config
HOMEBREW_VERSION: 3.6.20
ORIGIN: https://github.com/Homebrew/brew
HEAD: 344d32bf7f40183359592ef81ca6486e0587981b
Last commit: 2 days ago
Core tap ORIGIN: https://github.com/Homebrew/homebrew-core
Core tap HEAD: 2f5b7cc08e4d44c28495d37844f9c44d66567d2e
Core tap last commit: 5 hours ago
Core tap branch: master
HOMEBREW_PREFIX: /opt/homebrew
HOMEBREW_BAT_THEME: Nord
HOMEBREW_BROWSER: open
HOMEBREW_CASK_OPTS: []
HOMEBREW_EDITOR: vim
HOMEBREW_MAKE_JOBS: 8
Homebrew Ruby: 2.6.8 => /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/bin/ruby
CPU: octa-core 64-bit arm_firestorm_icestorm
Clang: 14.0.0 build 1400
Git: 2.38.0 => /opt/homebrew/bin/git
Curl: 7.79.1 => /usr/bin/curl
macOS: 12.6-arm64
CLT: 14.0.0.0.1.1661618636
Xcode: N/A
Rosetta 2: false

エラーの状況

ruby 2.6.3 のインストールがBUILD FAILED で失敗する。

❯ rbenv install 2.6.3
Downloading openssl-1.1.1n.tar.gz...
-> https://dqw8nmjcqpjn7.cloudfront.net/40dceb51a4f6a5275bde0e6bf20ef4b91bfc32ed57c0552e2e8e15463372b17a
Installing openssl-1.1.1n...
Installed openssl-1.1.1n to /Users/karlley/.rbenv/versions/2.6.3

Downloading ruby-2.6.3.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.3.tar.bz2
Installing ruby-2.6.3...
ruby-build: using readline from homebrew

BUILD FAILED (macOS 12.6 using ruby-build 20220324)

Inspect or clean up the working tree at /var/folders/0h/359pvrbs6dqczrdwg5tl48nr0000gn/T/ruby-build.20230121055131.6942.PCBKZ8
Results logged to /var/folders/0h/359pvrbs6dqczrdwg5tl48nr0000gn/T/ruby-build.20230121055131.6942.log

Last 10 log lines:
transform_mjit_header: SKIPPED to transform __inline_isinff
transform_mjit_header: SKIPPED to transform __inline_isfinitel
transform_mjit_header: SKIPPED to transform __inline_isfinited
transform_mjit_header: SKIPPED to transform __inline_isfinitef
transform_mjit_header: SKIPPED to transform __darwin_fd_clr
transform_mjit_header: SKIPPED to transform __darwin_fd_set
transform_mjit_header: SKIPPED to transform __darwin_fd_isset
transform_mjit_header: SKIPPED to transform __darwin_check_fd_set
transform_mjit_header: SKIPPED to transform __sputc
ln -sf ../../../.ext/include/-darwin21/rb_mjit_min_header-2.6.3.h include/ruby-2.6.0/-darwin21/rb_mjit_min_header-2.6.3.h

解決法

RUBY_CFLAGS="-w" オプションを追加することでインストールできる。

RUBY_CFLAGS="-w" rbenv install 2.6.3
Downloading openssl-1.1.1n.tar.gz...
-> https://dqw8nmjcqpjn7.cloudfront.net/40dceb51a4f6a5275bde0e6bf20ef4b91bfc32ed57c0552e2e8e15463372b17a
Installing openssl-1.1.1n...
Installed openssl-1.1.1n to /Users/karlley/.rbenv/versions/2.6.3

Downloading ruby-2.6.3.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.3.tar.bz2
Installing ruby-2.6.3...
ruby-build: using readline from homebrew
Installed ruby-2.6.3 to /Users/karlley/.rbenv/versions/2.6.3

❯ rbenv versions
  system
  2.6.3
  3.0.3
* 3.1.1

RUBY_CFLAGS="-w" オプションとは?

デフォルトのCFLAGSへ追加オプションを渡すことを可能にしてくれます。

ruby-build | rbenv日本語リファレンス | Ruby STUDIO

環境変数$RUBY_CFLAGSは、環境変数$CFLAGSの追加オプションを設定します。環境変数$CFLAGSは、CおよびC++コードをコンパイルするときにビルド・システムにコンパイラー・オプションを指定するために従来から使用されている環境変数の1つです。

【Rails】M1チップ搭載MacでRuby on Railsの開発環境構築 - AUTOVICE | 坂井光太郎のポートフォリオサイト

コンパイル時のエラーを環境変数$CFLAGSへ渡せるようにすることでエラーを吐かずにインストールできるようになるってことで良いのかな?(全く自信がありません...)

まとめ

有益な情報を共有していただいたお陰でスピード解決できて良かった! 環境構築はすぐ忘れてしまうので記事にして残しておくべきだなと感じました。 忘れがちなRubyのバージョン指定等も時間を作ってまとめておこうと思います。

参照

【Rails】M1チップ搭載MacでRuby on Railsの開発環境構築 - AUTOVICE | 坂井光太郎のポートフォリオサイト

ruby-build | rbenv日本語リファレンス | Ruby STUDIO

[m1 mac]rbenvでRubyをインストールするとBUILD FAILEDが出た際の解決方法 - Qiita