RVMでRubyのマルチユーザーインストールを試す

## これはなに

`rbenv`を使ってRubyマルチユーザーで使えるようにインストールしようと思って調べてみたところ、`rbenv`だと少し面倒そうだった。
その最中に`RVM`なるものを見つけて、楽にインストールできたのでインストール手順を書いておく。

## rbenvでマルチユーザーインストールする場合

以下の記事などのように、

https://qiita.com/dawn_628/items/2fb2be24e7ba08d9a5fa

- `/usr/local/`などにrbenvを配置
- sudoerもrbenvを呼べるようにPATHを通す
- `RBENV_ROOT`環境変数を設定、sudo時に渡すようにする

をしなければならない。

どうやってマルチユーザーで使えるようにしてるか後から触る時に忘れそうだなと思って、以下の記事を読んでいたら、

https://komiyak.hatenablog.jp/entry/20150603/1433364444

> rbenv と同じバージョン管理ツールの RVM には、「Multi-User installations」というインストール方法があります。

とあったので試してみた。

## RVMのインストール

https://rvm.io/

[RVM: Ruby Version Manager - Installing RVM](https://rvm.io/rvm/install) を参考にインストールする。

僕の環境はUbuntuだったので、ドキュメント通りUbuntuのインストール方法で進める。

https://github.com/rvm/ubuntu_rvm

```console
$ sudo apt-get install software-properties-common

$ sudo apt-add-repository -y ppa:rael-gc/rvm
$ sudo apt-get update
$ sudo apt-get install rvm
```

インストール後、ユーザーを`rvm`グループに追加する必要がある。

```console
$ sudo usermod -a -G rvm $USER
```

`/etc/profile.d/rvm.sh`を読み込めば使えるようになる。（すごい簡単！）

```console
$ echo 'source "/etc/profile.d/rvm.sh"' >> ~/.bashrc
```

:warning: Ubuntu以外の場合は、https://rvm.io/rvm/install#any-other-system を参照。
なお、Ubuntu以外の場合でマルチユーザーインストールをしたい場合はインストールスクリプトを`sudo`付きで実行する必要がある。

> Note: The Multi-User install instructions must be prefixed with the sudo command. However, once the install is complete, and the instructions to add users to the rvm group is followed, the use of either sudo or rvmsudo is no longer required. The sudo command is only to temporarily elevate privileges so the installer can complete its work. If you need to use sudo or rvmsudo after the install is complete, some part of the install directions were not properly followed. This usually is because people execute the install as root, rather than executing the installation instructions from a non-privileged user account.

（https://rvm.io/rvm/install#1-download-and-run-the-rvm-installation-script より引用）

## 本当にマルチユーザーで使えるのか確認

とりあえずRubyをインストールする。

```console
$ rvm install 3.1.2
略...

$ which ruby
/usr/share/rvm/rubies/ruby-3.1.2/bin/ruby

$ ruby --version
ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-linux]
```

rubocopをグローバルにインストールしておいて、別のユーザーで使えるのか確かめる。

```console
$ gem install rubocop
略...

$ which rubocop
/usr/share/rvm/gems/ruby-3.1.2/bin/rubocop

$ rubocop --version
1.32.0
```

準備ができたので、新しくユーザーを作ってRubyを使えるか確認する。

```console
$ sudo useradd -m -G rvm -s $(which bash) test-user
$ sudo su - test-user
$ whoami
test-user

$ which ruby
/usr/share/rvm/rubies/ruby-3.1.2/bin/ruby

$ ruby --version
ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-linux]

$ echo 'puts("Hello World")' > main.rb
$ ruby main.rb
Hello World
```

rubocopも使える。

```console
$ which rubocop
/usr/share/rvm/gems/ruby-3.1.2/bin/rubocop

$ rubocop --version
1.32.0

$ rubocop -A main.rb
略...
1 file inspected, 3 offenses detected, 3 offenses corrected
```

## さいごに

ほぼ何もせずにマルチユーザーでRubyが使えるようになった。RVMすごい。
どんな仕組みなのかは調べてみたい。

## Refs

- [RVM: Ruby Version Manager - RVM Ruby Version Manager - Documentation](https://rvm.io/)
- [ユーザではなく、システムワイドにRuby(rbenv)をインストールする方法　※自分用メモ - Qiita](https://qiita.com/dawn_628/items/2fb2be24e7ba08d9a5fa)
- [ruby, rbenv, System Wide Install (どのユーザーでも、rbenv を利用できるようにする) - #tech](https://komiyak.hatenablog.jp/entry/20150603/1433364444)
- [[ruby][rbenv][System Wide Install]全ユーザーrubyを使えるようにする – ADACHIN SERVER LABO](https://blog.adachin.me/archives/2182)
- [RubyとRuby on RailsをRbenvでインストール(システムワイド編) | 雑廉堂の雑記帳](https://www.rough-and-cheap.jp/linux/ruby_rbenv_install_systemwide_on_ubuntu18_04/)
- [RVMとは？(RVMを利用したRubyのインストール) - Qiita](https://qiita.com/yunzeroin/items/f685c66a5455d354f6b6)
- [RVM - ArchWiki](https://wiki.archlinux.jp/index.php/RVM)