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 | 坂井光太郎のポートフォリオサイト