【M1チップ】Homebrew経由でのRubyインストールに苦戦した

# 概要

プログラミング勉強真っ只中の私ですが、先日M1チップ搭載のMacbook Proを購入しました。
そこでRuby on Railsの環境構築をしようとしたところ苦戦しましたが、初心者の私でもなんとか出来たのでやったことを残しておきます。
~~（最初はHomebrewって何？美味しいの？ってレベルでした）~~

参考にさせていただいた記事
https://qiita.com/aiorange19/items/5ffaefc85f912f60c2fa



# 動作環境

・Macbook Pro (13-inch, M1, 2020)
・macOS Big Sur (ver11.0.1)

Xcodeをインストールして無い人は予めインストールしておくと幸せになれるかもしれません。
（App StoreからDL出来ます）
容量約12GBなのでめっちゃ時間かかった。


# Homebrewのインストール

Homebrewをインストールします。
https://brew.sh/index_ja

公式ドキュメントにも記載があるように、M1チップのMacでは「/opt/homebrew」にインストールすることが推奨されているので、そうしましょう。
自分の場合は何も考えずに公式サイトのコードをコピペして自動的に「/opt/homebrew」にインストールされましたが...。

>（訳）
ただし、macOSIntelでは/ usr / local、macOSARMでは/ opt / homebrew、Linuxでは/home/linuxbrew/.linuxbrewにインストールしてください。

予めディレクトリを作っておいて、インストール先を指定した方が良いかもしれません。

```
% cd /opt
/opt % sudo mkdir homebrew
/opt % curl -L https://github.com/Homebrew/brew/tarball/master | tar xz --strip 1 -C homebrew
```


#### brewコマンドが打てない
しかし、このままだとbrewコマンドが打てなかった

```
% brew -v
zsh: command not found: brew
```

で、ここで最初の壁にぶち当たりましたが、どうやらPATHというものを通さなければならないらしい。
PATHを通すためには`「.zshrc」`というファイルにその旨のコードを記述する必要があるっぽいんですけど...

```
% ls -a
.				Documents			Music				Public				Downloads
..				Dropbox				.DS_Store			Movies				Pictures
Library			Desktop				.adobe				.zsh_history		.cups
.zsh_sessions	.dropbox			.Trash				Creative Cloud Files
.local
```
**そのファイルが無い＼(^o^)／**

無くて焦りましたが、なかったら作れば良いということで作りました。
作成したら、PATHを通すコードを記述します。

```
% touch .zshrc
% open ~/.zshrc

# .zshrcに下記を記述
export PATH=/opt/homebrew/bin:$PATH

# またはコマンドラインで下記を実行
% echo 'export PATH=/opt/homebrew/bin:$PATH' >> .zshrc

# .zshrcが編集できたら設定を反映させるために下記を実行
% source .zshrc
```

brewコマンドが使えるか確認してみる。

```
% brew -v
Homebrew 2.7.5	# Homebrewのバージョンが表示されればOK
```
無事PATHを通せました。



# rbenvでRubyのインストール

Homebrewがインストール出来たら、Rubyのバージョン管理ができるようにrbenvをインストールします。

```
% brew install rbenv
```
これも先ほどと同じようにPATHを通す必要があるので、`.zshrc`に追記します。

```
% open ~/.zshrc
# 下記を記述
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"

# またはコマンドラインで下記を実行
% echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> .zshrc
% echo 'eval "$(rbenv init -)"' >> .zshrc

# 設定を反映
% source .zshrc
```
これでRubyインストールの準備完了です。


### Rubyのインストール

```
# 公開されている（DL可能な）Rubyのバージョン一覧を確認
% rbenv install -l
2.5.8
2.6.6
2.7.2
3.0.0
jruby-9.2.14.0
mruby-2.1.2
rbx-5.0
truffleruby-21.0.0
truffleruby+graalvm-21.0.0
```

2020年12月25日に`Ruby 3.0.0`が公開されましたが、ここでは2.7.2
をインストールしました。
Ruby 3.0.0はなんか動作が早くなったとか...。
もうちょっと勉強したらアップデートしようと思います。

ということでRubyをインストール

```
% rbenv install 2.7.2
```
、、、しようとしましたがなぜか上手くいかない。

いろいろ調べると、`openssl`関連で上手くいっていないようでした。
とりあえずインストールを試みましたが...

```
% brew install openssl
Error: /opt/homebrew/opt/openssl@1.1 is not a valid keg
```
なんやこれ...
このエラー解消に結構時間がかかってしまいました。

結果、`/opt/homebrew/Cellar`に作られてた`openssl@1.1`というフォルダが空だったので、一度削除したらインストール出来ました。
![スクリーンショット 2021-01-25 0.48.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/928852/803a4538-2d73-562e-0993-e1f7686ed190.png)

インストール出来ましたが、また`.zshrc`を編集してPATHを通します。

```
% which openssl
/usr/bin/opensl　　# homebrewへPATHを通しましょう

# .zshrcに下記を追記
export PATH="/opt/homebrew/opt/openssl@1.1/bin:$PATH"
export LDFLAGS="-L/opt/homebrew/opt/openssl@1.1/lib"
export CPPFLAGS="-I/opt/homebrew/opt/openssl@1.1/include"
export PKG_CONFIG_PATH="/opt/homebrew/opt/openssl@1.1/lib/pkgconfig"
export RUBY_CONFIGURE_OPTS="--with-openssl-dir=/opt/homebrew/opt/openssl@1.1"

# 設定を反映
% source .zshrc

# 再度opensslの場所を確認
% which openssl
/opt/homebrew/opt/openssl@1.1/bin/openssl

% openssl version
OpenSSL 1.1.1i  8 Dec 2020　　# ちゃんとインストール出来てる

# homebrewへリンクを通す
% brew link openssl
```
これでようやくRubyをインストールできるはず！

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

BUILD FAILED (macOS 11.0.1 using ruby-build 20210119)

Inspect or clean up the working tree at /var/folders/p8/krxwz5vn6ld7l4_bc2g1xnbr0000gn/T/ruby-build.20210124030531.27274.KLMWnZ
Results logged to /var/folders/p8/krxwz5vn6ld7l4_bc2g1xnbr0000gn/T/ruby-build.20210124030531.27274.log

Last 10 log lines:
checking for off_t... yes
checking char bit... 8
checking size of int... 4
checking size of short... 0
checking size of long... 0
checking size of long long... configure: error: in `/var/folders/p8/krxwz5vn6ld7l4_bc2g1xnbr0000gn/T/ruby-build.20210124030531.27274.KLMWnZ/ruby-2.7.2':
configure: error: cannot compute sizeof (long long)
See `config.log' for more details

You have not agreed to the Xcode license agreements, please run 'sudo xcodebuild -license' from within a Terminal window to review and agree to the Xcode license agreements.
```
**...あれ？**
最後を見ると、Xcodeインストールしとけや！って書いてありますね。
はい。自分は最初にインストールしてなかったのでここでまた無駄なダウンロード待ち時間が発生しました。

#### 3度目の正直
Xcodeをインストールし、再度実行。さすがに頼む。

```
% rbenv install 2.7.2
Downloading ruby-2.7.2.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.7/ruby-2.7.2.tar.bz2
Installing ruby-2.7.2...
ruby-build: using readline from homebrew
Installed ruby-2.7.2 to /opt/homebrew/opt/rebind/versions/2.7.2
```
出来たーーー！！

あとは下記の流れに沿って...

```
% rbenv versions
* system (set by /opt/homebrew/opt/rebind/version)
  2.7.2

% rbenv rehash

% rbenv global 2.7.2

% rbenv versions
  system
* 2.7.2 (set by /opt/homebrew/opt/rebind/version)

% ruby -v
ruby 2.7.2p137 (2020-10-01 revision 5445e04352) [arm64-darwin20]
```
これでRubyのバージョン切り替えができるようになりました！



# Ruby on Railsのインストール

Railsもインストールしておきましょう。

```
% gem install rails
# バージョン指定しなければ最新版がインストールされる...と思います。

# 最後に一通り更新しておく
% rbenv rehash
% source ~/.zshrc

# Railsのバージョン確認
% rails -v
Rails 6.1.1
```
これでRuby on Railの環境も整いました！

ここまで長かった...



# 環境構築って大変

プログラミングを挫折する人が多い理由の一つに環境構築が大変、というのをよく目にしますが、よく分かった気がします。笑
しかし、色々根気強く調べながらやっていけばなんとかなる！とも思いました。
先輩エンジニアの方々の情報にはとても感謝です。

まだまだ駆け出しの駆け出しですが、もっと頑張るぞ〜