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

More than 1 year has passed since last update.

現在、ruby kaigi2016が京都で開催中ですね。ということで、rubyを超高速でインストールする方法を紹介します。

インストールの高速化シリーズ第2弾です。(第1弾はこちら→ Nodebrewを使ってNode.jsを超高速にインストールする方法

Rubyをインストールするのに時間がかかるのは、コンパイルに時間がかかるためです。

Vagrantのように何度も壊して使う開発環境の場合、構築の度にコンパイルを待たなければなりません。

構築の待ち時間を少しでも減らせたら・・・と、思っている方はたくさんいるのでは・・・?

今回紹介する方法を使うと、インストール時間が25秒以下になります(マシンスペック&ネットワークに依存しますが・・・)


検証環境

検証環境はVagrantを使っています。

OSとスペックは以下の通りです。


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にinstallunilstallコマンドが追加されます。


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



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を使ってインストール


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リポジトリで各バージョンのrpmが公開されていますので、自身の開発環境にあったバージョンを選びましょう。

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