【Ruby環境構築】AlmaLinuxでRubyのバージョンを指定してインストールする

# 環境

- OS:AlmaLinux8.9

```
# cat /etc/almalinux-release
AlmaLinux release 8.9 (Midnight Oncilla)
```

# Rubyのインストール

今回は`dnfモジュール`からインストールする方法と、`rbenv`を利用してインストールする方法の2つを紹介します。

## dnfモジュールからインストール

### インストール可能なRubyのバージョンを確認

`dnf module list <パッケージ名>`でdnfのモジュールリストからインストール可能なパッケージを探します。

今回の場合`ruby2.5`～`ruby3.1`が利用でき、デフォルトで`ruby2.5`がインストールされる設定なっています。

```
# dnf module list ruby
AlmaLinux 8 - BaseOS                                       4.3 kB/s | 3.8 kB     00:00    
AlmaLinux 8 - BaseOS                                       3.5 MB/s | 8.3 MB     00:02    
AlmaLinux 8 - AppStream                                    6.0 kB/s | 4.2 kB     00:00    
AlmaLinux 8 - AppStream                                    3.4 MB/s |  13 MB     00:03    
AlmaLinux 8 - Extras                                       6.2 kB/s | 3.8 kB     00:00    
AlmaLinux 8 - Extras                                        30 kB/s |  21 kB     00:00    
AlmaLinux 8 - AppStream
Name     Stream      Profiles       Summary                                                
ruby     2.5 [d]     common [d]     An interpreter of object-oriented scripting language   
ruby     2.6         common [d]     An interpreter of object-oriented scripting language   
ruby     2.7         common [d]     An interpreter of object-oriented scripting language   
ruby     3.0         common [d]     An interpreter of object-oriented scripting language   
ruby     3.1         common [d]     An interpreter of object-oriented scripting language   

ヒント: [d]efault, [e]nabled, [x]disabled, [i]nstalled
```

### インストールしたいバージョンの有効化

今回は`ruby3.0`を有効化してインストールしてみます。

```
# dnf module enable ruby:3.0
メタデータの期限切れの最終確認: 0:00:20 前の 2024年04月22日 11時24分46秒 に実施しました。
依存関係が解決しました。
===========================================================================================
 パッケージ           アーキテクチャー    バージョン            リポジトリー         サイズ
===========================================================================================
モジュールストリームの有効化中:
 ruby                                     3.0                                             

トランザクションの概要
===========================================================================================

これでよろしいですか? [y/N]: y
完了しました!
```

有効化設定後、再度モジュールリストを確認すると`enable`の記号が追加され有効化されていることがわかります。

```
# dnf module list ruby
メタデータの期限切れの最終確認: 0:00:38 前の 2024年04月22日 11時24分46秒 に実施しました。
AlmaLinux 8 - AppStream
Name     Stream      Profiles       Summary                                                
ruby     2.5 [d]     common [d]     An interpreter of object-oriented scripting language   
ruby     2.6         common [d]     An interpreter of object-oriented scripting language   
ruby     2.7         common [d]     An interpreter of object-oriented scripting language   
ruby     3.0 [e]     common [d]     An interpreter of object-oriented scripting language   
ruby     3.1         common [d]     An interpreter of object-oriented scripting language   

ヒント: [d]efault, [e]nabled, [x]disabled, [i]nstalled
```

### Rubyをインストール

最後に`dnf install <パッケージ名>`のコマンドでRubyをインストールします。

```
# dnf install ruby
メタデータの期限切れの最終確認: 0:00:56 前の 2024年04月22日 11時24分46秒 に実施しました。
依存関係が解決しました。
===========================================================================================
 パッケージ           Arch     バージョン                                Repo        サイズ
===========================================================================================
インストール:
 ruby                 x86_64   3.0.4-141.module_el8.6.0+3263+41cde0c0    appstream    88 k
依存関係のインストール:
 ruby-libs            x86_64   3.0.4-141.module_el8.6.0+3263+41cde0c0    appstream   3.2 M
 rubygem-json         x86_64   2.5.1-141.module_el8.6.0+3263+41cde0c0    appstream   100 k
 rubygem-psych        x86_64   3.3.2-141.module_el8.6.0+3263+41cde0c0    appstream    98 k
弱い依存関係のインストール:
 ruby-default-gems    noarch   3.0.4-141.module_el8.6.0+3263+41cde0c0    appstream    80 k
 rubygem-bigdecimal   x86_64   3.0.0-141.module_el8.6.0+3263+41cde0c0    appstream   101 k
 rubygem-bundler      noarch   2.2.33-141.module_el8.6.0+3263+41cde0c0   appstream   449 k
 rubygem-io-console   x86_64   0.5.7-141.module_el8.6.0+3263+41cde0c0    appstream    72 k
 rubygem-rdoc         noarch   6.3.3-141.module_el8.6.0+3263+41cde0c0    appstream   459 k
 rubygems             noarch   3.2.33-141.module_el8.6.0+3263+41cde0c0   appstream   327 k

トランザクションの概要
===========================================================================================
インストール  10 パッケージ
(省略)
```

指定したバージョンのRubyがインストールされました。

```
# ruby -v
ruby 3.0.4p208 (2022-04-12 revision 3fa771dded) [x86_64-linux]
```

## rbenvを利用してインストール

続いて、`rbenv`を利用してRubyをAlmaLinuxにインストールする方法を解説します。

### rbenvとは

`rbenv`はRubyのバージョン管理ツールの一つです。
1つのマシン上で複数のRubyのバージョンを扱えます。

https://github.com/rbenv/rbenv.git

### rbenvのインストール

ますは、リポジトリからクローンしてきます。

```
# git clone https://github.com/rbenv/rbenv.git ~/.rbenv
```

次に`rbenv`のパスを通します。

```
# echo 'eval "$(~/.rbenv/bin/rbenv init - bash)"' >> ~/.bash_profile
```

再起動、または`source`コマンドで変更を反映させます。

```
# source ~/.bash_profile
```

バージョンを確認し、インストールできたことがわかります。

```
# rbenv --version
rbenv 1.2.0-87-ge8b7a27
```

インストール後、`rbenv init`コマンドで初期設定を行います。

```
[root@localhost ~]# rbenv init
# Please add the following line to your `~/.bash_profile' file,
# then restart your terminal.

eval "$(rbenv init - bash)"
```

出力されたコマンドを実行します。

```
# eval "$(rbenv init - bash)"
```

実行後、ターミナル ウィンドウを閉じて新しいウィンドウを開き、変更を有効にします。 

### ruby-buildのインストール

`ruby-build`をインストールすることで`rbenv install`コマンドが使えるようになり、Rubyを楽にインストールできるようになります。

https://github.com/rbenv/ruby-build.git

リポジトリからクローンしてきます。

```
# git clone https://github.com/rbenv/ruby-build.git ./.rbenv/plugins/ruby-build
```

### Rubyをインストール

下記サイトを参考に、必要なパッケージを各種インストールします。

https://github.com/rbenv/ruby-build/wiki#suggested-build-environment

```
dnf install -y autoconf gcc patch bzip2 openssl-devel libyaml-devel libffi-devel readline-devel zlib-devel gdbm-devel ncurses-devel tar
```

:::note warn
今回の環境では、上記のパッケージに加え、`gcc-c++`をインストールする必要がありました。
また、`libyaml-devel`パッケージに関しては下記コマンドを実行することでインストールできました。
```
sudo dnf --enablerepo=powertools install libyaml-devel
```
インストールが必要なパッケージはお使いの環境ごとに代わるので、都度必要なものをインストールする必要があります。
:::


`rbenv install --list`コマンドでインストール可能なバージョンを表示できます。

```
# rbenv install --list
3.0.7
3.1.5
3.2.4
3.3.1
jruby-9.4.6.0
mruby-3.3.0
picoruby-3.0.0
truffleruby-24.0.1
truffleruby+graalvm-24.0.1

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

:::note info
`rbenv install -l`コマンドでlatest stableバージョンを表示できます。
また、`rbenv install -L`コマンドでローカルの全てのバージョンを表示できます。
:::


`rbenv install <ruby version>`コマンドで指定したバージョンのRubyをインストールできます。
今回は`ruby3.0.7`をインストールします。

```
# rbenv install 3.0.7
==> Downloading ruby-3.0.7.tar.gz...
-> curl -q -fL -o ruby-3.0.7.tar.gz https://cache.ruby-lang.org/pub/ruby/3.0/ruby-3.0.7.tar.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 20.2M  100 20.2M    0     0  7449k      0  0:00:02  0:00:02 --:--:-- 7447k
==> Installing ruby-3.0.7...
-> ./configure "--prefix=$HOME/.rbenv/versions/3.0.7" --enable-shared --with-ext=openssl,psych,+
-> make -j 1
-> make install
==> Installed ruby-3.0.7 to /root/.rbenv/versions/3.0.7

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

`Installed ~`の文字列が表示されたインストール成功です。

:::note warn
インストールできない場合は、`Build FAILED`の文字列と共に、ログファイルのパスが出力されるので、ログと下記サイトを参考にエラーを解消してください。

```
# rbenv install 3.0.7
==> Downloading ruby-3.0.7.tar.gz...
-> curl -q -fL -o ruby-3.0.7.tar.gz https://cache.ruby-lang.org/pub/ruby/3.0/ruby-3.0.7.tar.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 20.2M  100 20.2M    0     0  7303k      0  0:00:02  0:00:02 --:--:-- 7300k
==> Installing ruby-3.0.7...
-> ./configure "--prefix=$HOME/.rbenv/versions/3.0.7" --enable-shared --with-ext=openssl,psych,+

BUILD FAILED (AlmaLinux 8.9 on x86_64 using ruby-build 20240423)

You can inspect the build directory at /tmp/ruby-build.20240424115716.108349.vxYFve
See the full build log at /tmp/ruby-build.20240424115716.108349.log
```
:::

https://github.com/rbenv/ruby-build/discussions/categories/build-failures

インストール完了後、`rbenv global <ruby versoin>`または`rbenv local <ruby version>`コマンドで使用するRubyのバージョンを設定します。

```
# マシンのデフォルトの Ruby バージョンを設定します 
rbenv global 3.0.1

# or

# ディレクトリの Ruby バージョンを設定します
rbenv local 3.0.1
```

最後に`ruby -v`コマンドでRubyのバージョンを表示してインストール出来たことを確認します。

```
# ruby -v
ruby 3.0.7p220 (2024-04-23 revision 724a071175) [x86_64-linux]
```