rubyを超高速でインストールする方法

現在、ruby kaigi2016が京都で開催中ですね。ということで、rubyを超高速でインストールする方法を紹介します。
インストールの高速化シリーズ第2弾です。（第1弾はこちら→ [Nodebrewを使ってNode.jsを超高速にインストールする方法](http://qiita.com/yn-misaki/items/e92a47c662ea6d1236c1)）

Rubyをインストールするのに時間がかかるのは、コンパイルに時間がかかるためです。
Vagrantのように何度も壊して使う開発環境の場合、**構築の度にコンパイルを待たなければなりません。**

構築の待ち時間を少しでも減らせたら・・・と、思っている方はたくさんいるのでは・・・？
今回紹介する方法を使うと、インストール時間が25秒以下になります（マシンスペック&ネットワークに依存しますが・・・）

# 検証環境
検証環境はVagrantを使っています。
OSとスペックは以下の通りです。

```sh:centos
# OS
$ cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)

# memory
$ cat /proc/meminfo | grep Total
MemTotal:        1884064 kB

# core数
$ cat /proc/cpuinfo | grep "processor" | wc -l
2
```

# 事前準備
rbenvとruby-buildをインストールしておきます（バージョン管理しない場合は、不要）。
rbenvは、**Rubyのバージョン管理するツール**のことで、ruby-buildは、**rbenvのプラグインでRubyのインストールなど**を行います。
ruby-buildをインストールすると、rbenvに`install`・`unilstall`コマンドが追加されます。

```sh:rbenvをインストール
$ git clone https://github.com/rbenv/rbenv.git ~/.rbenv
$ cd ~/.rbenv && src/configure && make -C src

# 設定の書き込み・反映（今回は、~/.bash_profileに書き込みます）
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
$ source ~/.bash_profile
```

```sh:ruby-buildをダウンロード
$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
```

# インストール方法
今回は4種類のインストール方法を比較します。インストールするバージョンは`2.2.4`です。

* rbenv+ruby-buildでインストール
* rbenv+ruby-buildでインストール（rubyのドキュメントをインストールしない） ← **インストールを速くする有名な方法**
* rbenv+rubyをソースからビルド（rubyのドキュメントをインストールしない）
* パッケージ化されたrubyを使ってインストール


```sh:4種類のインストール方法
# rbenv+ruby-buildでインストール
$ rbenv install 2.2.4

# rbenv+ruby-buildでインストール（rubyのドキュメントをインストールしない）
$ CONFIGURE_OPTS="--disable-install-rdoc" rbenv install 2.2.4

# rbenv+rubyをソースからビルド（rubyのドキュメントをインストールしない）
$ sh ruby_install.sh
# ruby_install.sh という名前のシェルを作ります。↓中身はこちら
==================================================================
#!/bin/sh
curl -O https://cache.ruby-lang.org/pub/ruby/2.2/ruby-2.2.4.tar.bz2
tar jxvf ruby-2.2.4.tar.bz2
cd ruby-2.2.4/
./configure --disable-install-doc --prefix=$HOME/.rbenv/versions/2.2.4   # rbenvで使えるように、rbenvのversions配下にインストールする設定をする
make -j 2                # 【並列化】今回はマシンのコア数が2なので2を指定します。
sudo make instal
==================================================================

# パッケージ化されたrubyを使ってインストール
$ sudo yum install -y 
https://github.com/feedforce/ruby-rpm/releases/download/2.2.4/ruby-2.2.4-1.el7.centos.x86_64.rpm
```
では、実際にどのくらい時間差が出るか比較をしてみましょう。

# 比較結果
今回は、`time`コマンドを使って速度を計測しました。
`time`コマンドは、引数として指定したコマンドが実行にかかった時間を表示してくれます。

|インストール方法| 実行時間 |
|:------|:----:|
|  `rbenv install 2.2.4`  |  4分33秒 |
| `CONFIGURE_OPTS="--disable-install-rdoc" rbenv install 2.2.4`  |  3分10秒 |
| `sh ruby_install.sh` (rbenv+rubyをソースからビルド)  | 2分40秒 |
|  `sudo yum install -y https://github.com/feedforce/ruby-rpm/releases/download/2.2.4/ruby-2.2.4-1.el7.centos.x86_64.rpm` | 23秒 |

※ 実行結果の`real`項目の結果を表示しています。

# まとめ
上記の表からわかる通り、rpmを使う方法がダントツで速いです。
rubyをバージョン管理する必要がない場合は、rpmを使った方が良いですね。

[feedforceさんのGithubリポジトリ](https://github.com/feedforce/ruby-rpm/releases)で各バージョンのrpmが公開されていますので、自身の開発環境にあったバージョンを選びましょう。

また、rbenvでバージョン管理をしたい場合、rbenv+ruby-build（`--disable-install-rdoc`オプション付き）より、直接ソースからビルドする方が30秒ほど速くなります（**マシンの使用状況やスペックにも依存しますが**）。