Xcode(CommandLineTools)14系を使っていると古めのRubyがインストールできない問題

こんにちはRUNTEQで開発TA(エンジニア & 講師の補佐)をしているふぁらおです
最新版のXcode(についてくるCommandLineTools)の14系を使っているとrbenv経由でrubyがインストール出来ないという問題が発生しているみたいなので対処法を書いていきます

## 実行結果
```
❯❯❯rbenv install 2.6.3                                                                               +[21_admin_login]
Downloading openssl-1.1.1q.tar.gz...
-> https://dqw8nmjcqpjn7.cloudfront.net/d7939ce614029cdff0b6c20f0e2e5703158a489a72b2507b8bd51bf8c8fd10ca
Installing openssl-1.1.1q...
patching file test/v3ext.c
Installed openssl-1.1.1q to /Users/kenchaso/.anyenv/envs/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 20220726)

Inspect or clean up the working tree at /var/folders/kx/g8d12w2x353c1lqh93cvl2380000gn/T/ruby-build.20220927104044.36659.2Yluin
Results logged to /var/folders/kx/g8d12w2x353c1lqh93cvl2380000gn/T/ruby-build.20220927104044.36659.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
```

## 対処法1

### 2022/11/9追記(homebrewのパスの関係でM1・M2用です)

#### 一旦シェルを再起動してrubyがインストール出来るか確認する

```
exec $SHELL -l
RUBY_CFLAGS="-w" rbenv install 2.6.10
```

インストール出来なかったら以下の手順を試してみてください

#### libffiのインストール
`brew list libffi`で確認してlibffiが入っていなかったらインストールしてください

```
brew install libffi
```

#### 環境変数の設定

```
export optflags="-Wno-error=implicit-function-declaration"
export LDFLAGS="-L$(brew --prefix libffi)/lib"
export CPPFLAGS="-I$(brew --prefix libffi)/include"
export PKG_CONFIG_PATH="$(brew --prefix libffi)/lib/pkgconfig"
```

で環境変数の設定をします

#### インストールの実行

```
RUBY_CFLAGS="-w" rbenv install 2.6.10
```

(どのオプションが関係するかは分かってないのでわかる人いたら教えてください)

## 対処法2
venturaを使っているとCLTの13系がインストール出来ないのでこの方法は使えません

### 自分のCommandLineToolsのバージョンを確認する
`brew --config`か`pkgutil --pkg-info=com.apple.pkg.CLTools_Executables`というコマンドを使って確認出来ます
CommandLineTools(CTLって書いてあるやつ)のバージョンが14系かどうか確認してください

```
❯❯❯brew --config
HOMEBREW_VERSION: 3.6.3
ORIGIN: https://github.com/Homebrew/brew
HEAD: d5b6b068c15a8df60f0f5e34a4ca80dcf82c48e3
Last commit: 16 hours ago
Core tap ORIGIN: https://github.com/Homebrew/homebrew-core
Core tap HEAD: 65d11ec6b84ef4f4ab513db3c69dd7824a586510
Core tap last commit: 3 hours ago
Core tap branch: master
HOMEBREW_PREFIX: /opt/homebrew
HOMEBREW_CASK_OPTS: []
HOMEBREW_DISPLAY: /private/tmp/com.apple.launchd.oQNKZJBazk/org.xquartz:0
HOMEBREW_MAKE_JOBS: 8
Homebrew Ruby: 2.6.8 => /opt/homebrew/Library/Homebrew/vendor/portable-ruby/2.6.8_1/bin/ruby
CPU: octa-core 64-bit arm_firestorm_icestorm
Clang: 13.1.6 build 1316
Git: 2.37.2 => /opt/homebrew/bin/git
Curl: 7.79.1 => /usr/bin/curl
macOS: 12.6-arm64
CLT: 13.4.0.0.1.1651278267
Xcode: 14.0
Rosetta 2: false
```

### 一旦CommandLineToolsを消す
```
sudo rm -rf /Library/Developer/CommandLineTools
```

### CommandLineToolsの13系をインストールする
https://developer.apple.com/download/all/
から`Command Line Tools for Xcode 13.4`を探してダウンロード
その後ダウンロードしたインストーラーに従ってインストールする

### rubyを入れましょう
```
rbenv install 2.6.3
```

## 最後に
何か間違っていたりしたら教えてくださると助かります

## 参考
https://bugs.ruby-lang.org/issues/18912#note-11
http://voidptr.seesaa.net/article/397330524.html
https://zenn.dev/noraworld/articles/ruby-installation-m1-mac