Homebrewを使ってrbenvからRuby2.7.1をMac OS Mojaveに設定する際につまずいたこと

時間が空いたので、Safecastというシビックテックのお手伝いをしようかなと思い、Ruby on Railsの勉強をCourseraでやろうとしていたところ、最新のRuby,Railsの設定でつまずき1~2日ほどかかってしまったので、備忘録的にまとめようかと思います。

この記事は環境構築までを色々な記事を見ながら1人で試せる方向けです。もし、細かいところが分からない場合は、単語レベルで調べてみてください。正直細かい文言は不正確かもしれません。

#Ruby2.7.1の設定：rbenvを使って

2020年5月現在では、[3月末にアップデートされた](https://www.ruby-lang.org/ja/news/2020/03/31/ruby-2-7-1-released/)Ruby2.7.1が安定版だということだったので、

Ruby2.7.1をインストールしようと試みます。

基本的にコマンドライン(Macのターミナル)で、一つ一つ打ち込んでいくスタイルで設定を試しました。

Rubyのバージョン管理をするのに便利だという噂のrbenvというツールを以下よりダウンロードします。↓

[rbenv:Installation](https://github.com/rbenv/rbenv#installation)

有名なツールはだいたいGithubにライブラリや説明が細かくまとまっていますので、順番にお試しいただくと良いかと思います。

Qiitaでは以下の辺りを参考にしました。

[【2018年版】macにrbenvを入れてrubyを管理できるようにしちゃう](https://qiita.com/Alex_mht_code/items/d2db2eba17830e36a5f1)
[rbenvを利用してローカル環境にrubyをインストールする]
(https://qiita.com/sea_ship/items/195466a666cfd94f0225)

#rbenvの設定手順(Githubに準拠)

1:rbenvをHomebrewよりインストール

コマンドラインで以下のコマンドを叩きます。

```
brew install rbenv
```

rbenvのインストールは出来ました。

2~3:rbenvをコマンドラインにセットし、一度コマンドラインを閉じる。

インストール後以下のコマンドを叩きます。

```
rbenv init
```

なんらかのライブラリを活用する際、どこ(どのPATH)にライブラリが置かれているかが重要ですが、
基本的には↑のコマンドを叩けば、問題ないようなことがrbenvの[サイト](https://github.com/rbenv/rbenv#how-rbenv-hooks-into-your-shell)には書かれていますが、
本当にその通りかどうかは、次の4で確かめることが出来るようです。

4:rbenv-doctorを用いて、きちんとrbenvが設定されているかを確認する。

以下のコマンドを叩くことで、確認ができます。

```
$ curl -fsSL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-doctor | bash
```

もし正常であれば、以下のような結果が帰ります。

```
Checking for `rbenv' in PATH: /usr/local/bin/rbenv
Checking for rbenv shims in PATH: OK
Checking `rbenv install' support: /usr/local/bin/rbenv-install (ruby-build 20170523)
Counting installed Ruby versions: none
  There aren't any Ruby versions installed under `~/.rbenv/versions'.
  You can install Ruby versions like so: rbenv install 2.2.4
Checking RubyGems settings: OK
Auditing installed plugins: OK
```

しかし、私の場合は、2行目のChecking for rbenv shims in PATH: が`not found`になって
いたため、なんらかの追加設定が必要だろうことが分かりました。

因みに、[Basic Github Checkout](https://github.com/rbenv/rbenv#basic-github-checkout)では、Githubから直接インストールする方法も書いてあります。

5:Homebrewからrbenvを使って、Rubyを設定する際のコマンドを書く

以下のコマンドを叩きます。

```
brew upgrade rbenv ruby-build
```

ruby-buildまでは設定できました。


#Ruby2.7.1のインストール：Openssl絡みでつまずく

rbenvを使ってインストールする場合、以下のようなコマンドを打ちます。

```
rbenv install 2.7.1
```

すると、以下のような結果(コマンドはStackoverflowのものを拝借)が返ったまま、なかなか次に進みません。

```
Downloading openssl-1.1.1d.tar.gz...
-> https://dqw8nmjcqpjn7.cloudfront.net/1e3a91bc1f9dfce01af26026f856e064eab4c8ee0a8f457b5ae30b40b8b711f2
Installing openssl-1.1.1d...
```

Opensslという通信プロトコル経由でダウンロードを試みているのですが、毎回Openssl自体をコンパイルしてしまうために時間がかかってしまうようです。

これは、Ruby2.7.0の段階でOpenssl回りの設定に変更があった為にこうなってしまうようです。

以下の記事を参照しました。

[ruby-build が Homebrew の openssl に依存しなくなった](https://blog.manabusakai.com/2020/01/no-longer-depends-on-homebrew-openssl/)

そこで、以下のコマンドを入力し、再度rbenv install~~を試すと、opensslをコンパイルすることはなくなりました。

```
export RUBY_CONFIGURE_OPTS="--with-openssl-dir=$(brew --prefix openssl@1.1)"
```

#ruby-buildから動かない

しかし、ruby-buildから次になかなか進みません。

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

ターミナルが動いている時は、ターミナルのバーがClangやらRubyやら色々動いているので分かるのですが、
しばらくすると何も動かなくなります。

Ctrl+Cでなんども抜けてやり直したが、うまくいかず、rbenvのFAQフォーラムを探したところ、OS Catalinaで同じ
状態になっている人を発見した為、同じことを試してみました。

かいつまんでいうと、以下の通り

`
①brew install readline opensslというコマンドを実行
②コマンドラインをbashからzshに切り替える
③.zshrcというコマンドラインの設定ファイルを新たに作り、
HomebrewからOpenSSL経由でrbenvのコマンドを実行するように設定ファイルを書き換える
④再度rbenv install 2.7.1を試す`

詳細は、こちらに書かれています。

https://github.com/rbenv/ruby-build/issues/1409#issuecomment-615509777

zshとは何かについては、以下のブログが詳しいです。(2020/5/6更新なので新しいです)

[【Mac/Linux】zshとは？インストール方法を超丁寧に解説](https://suwaru.tokyo/%E3%80%90mac-linux%E3%80%91zsh%E3%81%A8%E3%81%AF%EF%BC%9F%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E6%96%B9%E6%B3%95%E3%82%92%E8%B6%85%E4%B8%81%E5%AF%A7%E3%81%AB%E8%A7%A3%E8%AA%AC/)

また、色々と便利だという噂も聞きました。

そして、Mac OS Catalinaからデフォルトのコマンドラインがbashからzshに変わるようです。

https://creepfablic.site/2019/10/13/bash-zsh/#index_id7

なので、これを機にzshに乗り換えようと思い、乗り換えてみました。

#zshへの乗り換え方法

まず、Homebrew経由で以下のコマンドを実行します。

```
brew install zsh
```
次に、```chsh -s `which zsh```というコマンドを叩きます。

```
chsh -s `which zsh`
Changing shell for (ユーザー名).
Password for (ユーザー名): 
chsh: which zsh: non-standard shell
$ 
```
この時点ではまだzshがデフォルトになっていません。そのため、一度コマンドラインを閉じて、再度開きます。

```
$SHELL --version
zsh 5.8 (x86_64-apple-darwin18.7.0)
```

となり、zshのバージョンが5.3から更新されていたので、おそらく問題ないと判断します。

ここで、vim ~/.zshrcと記述して、　.zshrcという設定ファイルを新たに書きます。

vimを使ったファイル作成のコマンドは,i(insert)→以下をコピペ→:wで保存→:qでvim終了という流れです。

```
# Setup Compiler paths for readline and openssl
local READLINE_PATH=$(brew --prefix readline)
local OPENSSL_PATH=$(brew --prefix openssl)
export LDFLAGS="-L$READLINE_PATH/lib -L$OPENSSL_PATH/lib"
export CPPFLAGS="-I$READLINE_PATH/include -I$OPENSSL_PATH/include"
export PKG_CONFIG_PATH="$READLINE_PATH/lib/pkgconfig:$OPENSSL_PATH/lib/pkgconfig"

# Use the OpenSSL from Homebrew instead of ruby-build
# Note: the Homebrew version gets updated, the ruby-build version doesn't
export RUBY_CONFIGURE_OPTS="--with-openssl-dir=$OPENSSL_PATH"

# Place openssl@1.1 at the beginning of your PATH (preempt system libs)
export PATH=$OPENSSL_PATH/bin:$PATH

# Load rbenv
eval "$(rbenv init -)"

# Extract the latest version of Ruby so you can do this:
# rbenv install $LATEST_RUBY_VERSION
export LATEST_RUBY_VERSION=$(rbenv install -l | grep -v - | tail -1)

~                                                                                                    
~                                                                                                    
~                                                                                                    
~                                                                                                    
~                                                                                                    
~                                                                                                    
"~/.zshrc" xxL, xxxxC
```

↑を終了したのちに、設定ファイルを反映する為に、```source .zshrc```と記述、その後以下の流れで、
実行すると、Ruby2.7.1がインストールできました。

```
vim ~/.zshrc
% source .zshrc
% rbenv install $LATEST_RUBY_VERSION
Downloading ruby-2.7.1.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.7/ruby-2.7.1.tar.bz2
Installing ruby-2.7.1...
ruby-build: using readline from homebrew
Installed ruby-2.7.1 to /Users/(ユーザー名)/.rbenv/versions/2.7.1
```

ということで、長くなりましたが、最近Ruby2.7系を入れようとした方で、困った場合、この記事を参考にしてみてください。