強欲で謙虚なツボツボ

趣味の読書の書の方

【Rails】Macでの環境構築(エラー対応も)

概要

macOSRailsの開発作業ができるようにするまでの手順。
macには元からrubyとbundlerが入っているが、バージョン管理をしたいのでrbenvでrubyをインストールしてそちらを適用させる。
あと、途中のrbenv installの時にエラーが出たのでその対応。

 

環境

macOS Big Sur 11.4
MacBook Air(Retina, 13-inch, 2019)
プロセッサ Intel Core i5
メモリ 8GB

 

手順

バージョン管理用のrbenvをインストール
rbenvで好きなバージョンのrubyをインストール
gemで好きなバージョンのrailsをインストール

rbenvをインストール

brew install rbenv ruby-build

brew installできたら.bashrcや.zshrcに下記を追記

PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"

.bashrcや.zshrcを再読み込みして(source ~/.bashrc)、rbenv -vでrbenvのバージョンを確認できたらOK

rubyをインストール

rbenvでインストールできるrubyのバージョンを確認する

rbenv install --list
2.6.10
2.7.6
3.0.4
3.1.2
jruby-9.3.6.0
mruby-3.1.0
picoruby-3.0.0
rbx-5.0
truffleruby-22.1.0
truffleruby+graalvm-22.1.0

Only latest stable releases for each Ruby implementation are shown.
Use 'rbenv install --list-all / -L' to show all local versions.

今回は一番新そうな3.1.2をインストールする(そこそこ時間かかります)

rbenv install 3.1.2

私はここでエラーが出ました。

これだけ見てもわからないのでログ全文を確認する(/var/folders/....../.log)。
下のスクショはログの前半部分、残りはエラー解決に関係なさそう。

デカデカと表示されているOpenSSL関連に問題がありそう。
インストールされているOpenSSLを確認していく。

$ which openssl
/usr/bin/openssl

$ openssl version -a
LibreSSL 2.8.3
built on: date not available
platform: information not available
options:  bn(64,64) rc4(16x,int) des(idx,cisc,16,int) blowfish(idx)
compiler: information not available
OPENSSLDIR: "/private/etc/ssl"

LibreSSLとでているが、これはmacOSに標準搭載されているものらしい。
以前、homebrewでインストールした気がするのでそちらの状態も確認する。

$ brew list
==> Formulae
autoconf ca-certificates gettext git m4 openssl@1.1	pcre2 pkg-config pyenv rbenv readline ruby-build xz

$ brew info openssl@1.1
openssl@1.1: stable 1.1.1q (bottled) [keg-only]
Cryptography and SSL/TLS Toolkit
https://openssl.org/
/usr/local/Cellar/openssl@1.1/1.1.1m (8,081 files, 18.5MB)
  Poured from bottle on 2021-12-15 at 23:34:25
/usr/local/Cellar/openssl@1.1/1.1.1q (8,097 files, 18.5MB)
  Poured from bottle on 2022-07-13 at 12:40:34
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/openssl@1.1.rb
License: OpenSSL
==> Dependencies
Required: ca-certificates ✔
==> Caveats
A CA file has been bootstrapped using certificates from the system
keychain. To add additional certificates, place .pem files in
  /usr/local/etc/openssl@1.1/certs

and run
  /usr/local/opt/openssl@1.1/bin/c_rehash

openssl@1.1 is keg-only, which means it was not symlinked into /usr/local,
because macOS provides LibreSSL.

If you need to have openssl@1.1 first in your PATH, run:
  echo 'export PATH="/usr/local/opt/openssl@1.1/bin:$PATH"' >> ~/.zshrc

For compilers to find openssl@1.1 you may need to set:
  export LDFLAGS="-L/usr/local/opt/openssl@1.1/lib"
  export CPPFLAGS="-I/usr/local/opt/openssl@1.1/include"

For pkg-config to find openssl@1.1 you may need to set:
  export PKG_CONFIG_PATH="/usr/local/opt/openssl@1.1/lib/pkgconfig"

==> Analytics
install: 1,225,966 (30 days), 3,060,362 (90 days), 11,394,164 (365 days)
install-on-request: 51,798 (30 days), 122,474 (90 days), 473,105 (365 days)
build-error: 1,766 (30 days)

openssl@1.1を使うには色々と環境変数を設定しなければいけないようだ。
まとめて.zshrcに追記してしまう。

export PATH="/usr/local/opt/openssl@1.1/bin:$PATH"
export LDFLAGS="-L/usr/local/opt/openssl@1.1/lib"
export CPPFLAGS="-I/usr/local/opt/openssl@1.1/include"
export PKG_CONFIG_PATH="/usr/local/opt/openssl@1.1/lib/pkgconfig"

.zshrcを読み込んでOpenSSLがどうなったか確認する。

$ which openssl
/usr/local/opt/openssl@1.1/bin/openssl

$ openssl version -a
OpenSSL 1.1.1q  5 Jul 2022
built on: Tue Jul  5 09:08:33 2022 UTC
platform: darwin64-x86_64-cc
options:  bn(64,64) rc4(16x,int) des(int) idea(int) blowfish(ptr)
compiler: clang -fPIC -arch x86_64 -O3 -Wall -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DRC4_ASM -DMD5_ASM -DAESNI_ASM -DVPAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DX25519_ASM -DPOLY1305_ASM -D_REENTRANT -DNDEBUG
OPENSSLDIR: "/usr/local/etc/openssl@1.1"
ENGINESDIR: "/usr/local/Cellar/openssl@1.1/1.1.1q/lib/engines-1.1"
Seeding source: os-specific

これでrbenv install 3.1.2をしてもエラーが変わりませんでした。
調べてみると--with-openssl-dirというオプションでrubyをインストールするときのopensslを指定できるらしい。

# ディレクトリは$ which opensslで確認したopenssl@1.1までのパス
export RUBY_CONFIGURE_OPTS="--with-openssl-dir=/usr/local/opt/openssl@1.1"

やっとインストールできました。

$ rbenv install 3.1.2
Downloading ruby-3.1.2.tar.gz...
-> https://cache.ruby-lang.org/pub/ruby/3.1/ruby-3.1.2.tar.gz
Installing ruby-3.1.2...
ruby-build: using readline from homebrew
Installed ruby-3.1.2 to /Users/otam/.rbenv/versions/3.1.2

$ rbenv versions
* system
  3.1.2

作業ディレクトリ内で3.1.2を適用する。

$ rbenv local 3.1.2
$ rbenv rehash

$ rbenv versions
  system
* 3.1.2

$ ruby -v
ruby 3.1.2

railsをインストール

$ gem install rails
$ rails -v
Rails 7.0.3.1

アプリケーションを作成する。

$ rails new hatena

アプリケーション起動

$ cd hatena
$ rails s
=> Booting Puma
=> Rails 7.0.3.1 application starting in development
=> Run `bin/rails server --help` for more startup options
Puma starting in single mode...
* Puma version: 5.6.4 (ruby 3.1.2-p20) ("Birdie's Version")
*  Min threads: 5
*  Max threads: 5
*  Environment: development
*          PID: 15596
* Listening on http://127.0.0.1:3000
* Listening on http://[::1]:3000
Use Ctrl-C to stop

 

エラーの対応で結構時間がかかった。
もう深夜3時だ、明日は平日だから問題あるね。
でもエラー解決できたのは嬉しかったからよし。