AR ホームベーカリー

オイラのアウトプット用ホームベーカリー!

M1 MacbookPro で Ruby 2.5 とか古い環境を用意する

追記

こちらで書いたけど、 RUBY_CFLAGS="-w" を付与して rbenv install を叩くのが一番ラク、という結論にたどり着いた。

donbulinux.hatenablog.jp

以前の本文

rbenv install で古いバージョンを入れようとするとこうなる (僕の環境の出力)。

  • ロケ地
    • MacBookPro 14inch(2021)
    • macOS Ventura
    • rbenv 1.2.0-48-g6717c62
❯ rbenv install 2.5.1
To follow progress, use 'tail -f /var/folders/np/w6ml9cp529j92kms59xq43lr0000gn/T/ruby-build.20221208211932.10900.log' or pass --verbose
Downloading openssl-1.1.1s.tar.gz...
-> https://dqw8nmjcqpjn7.cloudfront.net/c5ac01e760ee6ff0dab61d6b2bbd30146724d063eb322180c6f18a6f74e4b6aa
Installing openssl-1.1.1s...
Installed openssl-1.1.1s to /Users/donbulinux/.anyenv/envs/rbenv/versions/2.5.1

Downloading ruby-2.5.1.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.1.tar.bz2
Installing ruby-2.5.1...

WARNING: ruby-2.5.1 is past its end of life and is now unsupported.
It no longer receives bug fixes or critical security updates.

ruby-build: using readline from homebrew
ruby-build: using gmp from homebrew

BUILD FAILED (macOS 13.0.1 using ruby-build 20221123)

Inspect or clean up the working tree at /var/folders/np/w6ml9cp529j92kms59xq43lr0000gn/T/ruby-build.20221208211932.10900.nZn8qM
Results logged to /var/folders/np/w6ml9cp529j92kms59xq43lr0000gn/T/ruby-build.20221208211932.10900.log

Last 10 log lines:
../.././ext/psych/yaml/api.c:1320:32: warning: implicit conversion loses integer precision: 'long' to 'int' [-Wshorten-64-to-32]
    return document->nodes.top - document->nodes.start;
    ~~~~~~ ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
compiling ../.././ext/psych/yaml/emitter.c
compiling ../.././ext/psych/yaml/parser.c
linking shared-object -test-/string.bundle
5 warnings generated.
1 warning generated.
linking shared-object psych.bundle
make: *** [build-ext] Error 2

ググればいっぱい情報が出てくるけど、以下のようにすると回避できるとのこと。

github.com

2.5.9

2.5.9 なら通る、みたいな話もあるので試してみる。

blog.n-z.jp

❯ rbenv install 2.5.9
To follow progress, use 'tail -f /var/folders/np/w6ml9cp529j92kms59xq43lr0000gn/T/ruby-build.20221208213315.82591.log' or pass --verbose
Downloading openssl-1.1.1s.tar.gz...
-> https://dqw8nmjcqpjn7.cloudfront.net/c5ac01e760ee6ff0dab61d6b2bbd30146724d063eb322180c6f18a6f74e4b6aa
Installing openssl-1.1.1s...
Installed openssl-1.1.1s to /Users/donbulinux/.anyenv/envs/rbenv/versions/2.5.9

Downloading ruby-2.5.9.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.9.tar.bz2
Installing ruby-2.5.9...

WARNING: ruby-2.5.9 is past its end of life and is now unsupported.
It no longer receives bug fixes or critical security updates.

ruby-build: using readline from homebrew
ruby-build: using gmp from homebrew

BUILD FAILED (macOS 13.0.1 using ruby-build 20221123)

Inspect or clean up the working tree at /var/folders/np/w6ml9cp529j92kms59xq43lr0000gn/T/ruby-build.20221208213315.82591.6G9fvh
Results logged to /var/folders/np/w6ml9cp529j92kms59xq43lr0000gn/T/ruby-build.20221208213315.82591.log

Last 10 log lines:
    return document->nodes.top - document->nodes.start;
    ~~~~~~ ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
26 warnings generated.
compiling ../.././ext/psych/yaml/emitter.c
linking shared-object zlib.bundle
compiling ../.././ext/psych/yaml/parser.c
5 warnings generated.
1 warning generated.
linking shared-object psych.bundle
make: *** [build-ext] Error 2

だめだった。 このあたり使わないと行けない理由のプロジェクトあるので、素直にオプション渡しとうございます。

別件でめちゃくちゃ忙しいので、バージョンアップは正月にちまちまやるか……。

その後

色々オプションつけたやつで無事 Ruby 2.5 がインストールできた。

export optflags="-Wno-error=implicit-function-declaration"; export LDFLAGS="-L/opt/homebrew/opt/libffi/lib"; export CPPFLAGS="-I/opt/homebrew/opt/libffi/include"; export PKG_CONFIG_PATH="/opt/homebrew/opt/libffi/lib/pkgconfig" | rbenv install 2.5.1

To follow progress, use 'tail -f /var/folders/np/w6ml9cp529j92kms59xq43lr0000gn/T/ruby-build.20221208235613.1669.log' or pass --verbose
Downloading openssl-1.1.1s.tar.gz...
-> https://dqw8nmjcqpjn7.cloudfront.net/c5ac01e760ee6ff0dab61d6b2bbd30146724d063eb322180c6f18a6f74e4b6aa
Installing openssl-1.1.1s...
Installed openssl-1.1.1s to /Users/donbulinux/.anyenv/envs/rbenv/versions/2.5.1

Downloading ruby-2.5.1.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.1.tar.bz2
Installing ruby-2.5.1...

WARNING: ruby-2.5.1 is past its end of life and is now unsupported.
It no longer receives bug fixes or critical security updates.

ruby-build: using readline from homebrew
ruby-build: using gmp from homebrew
Installed ruby-2.5.1 to /Users/donbulinux/.anyenv/envs/rbenv/versions/2.5.1


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

Your Ruby version is 2.6.10, but your Gemfile specified 2.5.1

2.6.10 なのは Ventura にバンドルされているバージョン。

上記手順で 2.5.1 をインストール後、 .ruby-version が存在するディレクトリで bundle install --path vendor/bundle を実行するも以下のようなエラーになる。

❯ bundle install --path vendor/bundle
Your Ruby version is 2.6.10, but your Gemfile specified 2.5.1

あーん?

❯ which bundler
/usr/bin/bundler

❯ whereis bundle
bundle: /usr/bin/bundle /usr/share/man/man1/bundle.1

❯ which gem
/Users/donbulinux/.anyenv/envs/rbenv/shims/gem

❯ ruby -v
ruby 2.5.1p57 (2018-03-29 revision 63029) [-darwin22]

あーなるほどね、システムの Ruby に付随してる bundler 向いてるのかこれ。

gem はちゃんと rbenv 配下かつ、 .ruby-version で指定したものになっているので、 bundler をインストールして rehash すれば治るはず。

❯ gem install bundler -v 1.17.1
Fetching: bundler-1.17.1.gem (100%)
Successfully installed bundler-1.17.1
Parsing documentation for bundler-1.17.1
Installing ri documentation for bundler-1.17.1
Done installing documentation for bundler after 5 seconds
1 gem installed

❯ which bundle
/usr/bin/bundle

❯ rbenv rehash

❯ which bundle
/Users/donbulinux/.anyenv/envs/rbenv/shims/bundle

できたー。

ちなみに、該当のプロジェクトは bundler のバージョンも古くて 1 系なので、 -v でバージョン指定しないと現行の 2 系が入って以下みたいなエラーで死ぬ。

❯ bundle install --path vendor/bundle
Traceback (most recent call last):
    2: from /Users/donbulinux/.anyenv/envs/rbenv/versions/2.5.1/bin/bundle:23:in `<main>'
  1: from /Users/donbulinux/.anyenv/envs/rbenv/versions/2.5.1/lib/ruby/2.5.0/rubygems.rb:308:in `activate_bin_path'
/Users/donbulinux/.anyenv/envs/rbenv/versions/2.5.1/lib/ruby/2.5.0/rubygems.rb:289:in `find_spec_for_exe': can't find gem bundler (>= 0.a) with executable bundle (Gem::GemNotFoundException)

この時代って Ruby に bundler 付属してなかったんだっけか。 いやぁ焦ったね。

追記

結局この環境の Gemfile.lock、 M1 だとうまいことコンパイルできないバージョンの gem を記載していたので、諦めてオプション無しで Ruby 2.7.6 をインストールした後、 .ruby-verison の更新と Gemfile.lock を削除して素直にマイナーバージョンアップを実施するなどした。

ユーザ画面向けの機能で依存している Gem の都合で、 Rails 5.x にとどまる必要があって、大改修の風を感じている。

Ruby 3.0 と思ったけど、 Rails 6.0.3 だかあたりからじゃないとサポートしていないはずなので色々衝突してウオオーッ。