Ubuntuでのrbenv,ruby-buildの使い方と事前準備に必要なaptパッケージ

# この記事について

Linux に rbenv, ruby-build を使う機会が多いが、rbenv install x.y.z してからパッケージが足りないことに気が付がついて1つずつインストールしていると時間の無駄なので備忘録としてまとめたもの。

<font color="gray">'19/02/05 追記</font>
[ruby-build の wiki](https://github.com/rbenv/ruby-build/wiki)に各OSに応じてインストールを推奨するシステムパッケージ一覧が紹介されていました。そのため、本記事のメインであるまとめは無用と分かりました。orz
皆さん、本家を参照しましょう。

(本記事を参照して頂いた人への共有の意味を込めてパッケージインストール部の記事は残しますが、将来的に本家wikiへのリンクのみへ修正する予定です)

# はじめに - rbenv, ruby-build とは

## rbenv とは

rbenv とは Ruby を使った製品において、必要となる Ruby バージョンを固定するための Ruby バージョン管理ツールである。
(Ruby 以外にも `irb`, `gem`, `rake`, `rails` のバージョンも固定できる)

rbenv をインストールするとファイル `.ruby-version` が存在するディレクトリ配下において Ruby コマンドを実行した時のバージョンを指定する。(rbenv をローカル指定でバージョン固定する場合)

## rbenv の仕組み

特定のディレクトリに寄らず利用する Ruby バージョンを固定する場合はシェル単位又はグローバルに設定することも可能である。シェル単位で指定する場合は環境変数 `RBENV_VERSION` 又は `rbenv shell X.Y.Z` により指定する。グローバルに指定する場合は、 `rbenv global` 又は `~/.rbenv/version` により指定する。
(優先順位は [rbenv#choosing-the-ruby-version](https://github.com/rbenv/rbenv#choosing-the-ruby-version) を参照)

rbenv は環境変数 PATH に Ruby インストール先よりも優先度の高い順番として仮 ruby コマンドを指定し、その中でバージョンの制御を行う。(詳細な動作は[rbenv#how-it-works](https://github.com/rbenv/rbenv#how-it-works)を参照)

rbenv はあくまで Ruby バージョンを固定するためのアプリケーションなので、その他、任意のバージョンの Ruby をインストールするためには別途 Ruby を ruby-build を使ってビルドする必要がある。
(rbenv をインストール → ruby インストール → rbenv によるバージョン指定という流れ)

## ruby-build とは

ruby-build は Ruby をバージョンごとに異なるディレクトリにビルドするためのツールであり、rbenv の plugin としても動作させることが出来る。

# rbenv, ruby-build をインストールする対象の環境

Ubuntu Server 16系で確認。
Windows の WSL 環境の Ubuntu でも同様。

# インストールしておく必要のある apt パッケージ

## インストールコマンド

<font color="gray">'19/02/05 追記</font>
[ruby-build の wiki](https://github.com/rbenv/ruby-build/wiki)に各OSに応じてインストールを推奨するシステムパッケージ一覧が紹介されていました。

```bash:インストールコマンド
# Depending on your version of Ubuntu/Debian/Mint, libgdbm5 won't be available. In that case, try with libgdbm3.
$ apt-get install autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm5 libgdbm-dev
```

# rbenv, ruby-build のインストール方法

```sh:rbenvのインストール方法
$ git clone https://github.com/rbenv/rbenv.git ~/.rbenv
$ git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
$ ~/.rbenv/bin/rbenv init  # 出力される指示に従う
$ source ~/.bash_profile
```

# rbenv コマンドリスト

## Rubyインストール・アンインストール

```sh:インストールされたRubyバージョン一覧を確認する
$ rbenv versions
```

```sh:インストールできるRubyバージョン一覧を確認する
$ rbenv install -l
```

```sh:インストールできるRubyバージョン一覧を更新する
$ cd $(dirname `which rbenv`) && git pull  # rbenv のリポジトリを最新化している ※bashで動作確認済
```

```sh:特定のRubyバージョンをインストールする
$ rbenv install X.Y.Z
```

```sh:特定のRubyバージョンをアンインストールする
$ rbenv uninstall X.Y.Z
```
※ ~/.rbenv/versions/X.Y.Z を消してもよい

## Rubyバージョン指定

```sh:特定のディレクトリ配下で実行するRubyバージョンを固定する
$ cd ${固定化したいディレクトリへのパス}
$ rbenv local X.Y.Z  # ./.ruby-version ファイルが作成される
```

```sh:実行しているシェル単位で実行するRubyバージョンを固定する
$ rbenv shell X.Y.Z  # 環境変数 `RBENV_VERSION` が設定される
```

```sh:グローバルに実行するRubyバージョンを固定する(ユーザ単位)
$ rbenv global X.Y.Z  # ~/.rbenv/version ファイルが作成される
```

## Rubyバージョン確認

```sh:現在のディレクトリで実行されるRubyバージョンを確認する
$ cd ${調べたい対象のディレクトリ配下へ移動する}
$ ruby -v
```

```sh:特定のディレクトリ配下で固定化されているRubyバージョンを確認する
$ cd ${固定化したいディレクトリへのパス}
$ rbenv local
```

```sh:実行しているシェル単位で固定化されているRubyバージョンを確認する
$ rbenv shell
```

```sh:グローバルで固定化されているRubyバージョンを確認する(ユーザ単位)
$ rbenv global
```

# 関連情報

- https://github.com/rbenv/rbenv
- https://github.com/rbenv/ruby-build
- https://dev.classmethod.jp/server-side/language/build-ruby-environment-by-rbenv/

# 本記事に対する編集リクエストを受けて修正した履歴とお礼

編集リクエストを頂いた皆様に感謝致します。

* nak1114 さんより libyaml-dev が必要なVersionがあるとのリクエストを頂きました