Help us understand the problem. What is going on with this article?

rbenv や Bundler を用いた Ruby環境構築

More than 5 years have passed since last update.

前置き、概要説明

Rubyはバージョンによる差異が大きく、各バージョンで互換性がない場合もあります。その為、複数のプロジェクトに携わっている場合はプロジェクト毎にRubyのバージョンを切り替える必要があります。この問題を解決してくれるのがrbenvというツールです。

rbenvはシステム内に複数のバージョンを共存させることを可能にしてくれます。具体的には、特定のディレクトリ配下(プロジェクト)に特定のバージョンを適応するといった制限を掛けてくれます。つまり指定のディレクトリ外には影響を与えず、隔離することが可能な為にクリーンな環境が保てます。

これはRubyのライブラリであるgemにおいても同様です。バージョンによる差異が大きい場合がある為、プロジェクト毎に適切なバージョンのgemを利用する場合があります。これにはBundlerというツールを利用します。

Bundlerを用いることで、本来Rubyに紐づいてインスールされるgemライブラリを特定のディレクトリ配下(プロジェクト)にインストールすることが可能です。つまり、同一バージョンのRuby内でも複数のgemライブラリを共存させることが可能となります。

rbenvを用いたRubyインストール

1. rbenvをチェックアウトする

rbenvをGitHubリポジトリからチェックアウトします。

ターミナル
$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv

rbenv自体にはインストール済みのrubyを管理する機能しかありません。なので、rubyをインストールする機能であるruby-buildも併せてチェックアウトする必要があります。

ターミナル
$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

2. rbenv向けの設定を行う

rbenvを利用出来るようにする為にシェルの設定ファイル(~/.bashrcなど)に下記を追記します。

~/.bashrc
export PATH=$HOME/.rbenv/bin:$PATH
eval "$(rbenv init -)"

設定を追記したら設定を反映させます。

ターミナル
$ source ~/.bashrc

3. Rubyをインストールする

初めにインストール可能なRubyのバージョンを確認します。

ターミナル
$ rbenv install -l

バージョンを指定してインストールを実行します。

ターミナル
$ rbenv install 2.2.2

指定のバージョンが実際にインストールがされたかを確認します。

ターミナル
$ rbenv versions
* 2.1.0 (set by /home/ryo-as/.rbenv/version)
  2.2.2

「*」マークは現在適用されているRubyのバージョンです。今回の場合、システム(global)上でバージョン2.1.0が適用されております。
※この時点では先程インストールしたバージョン2.2.2はまだ適用されておりません

4.Rubyを適用する

特定のディレクトリにバージョンを指定して適用します。

ターミナル
$ cd project_dir
$ rbenv local 2.2.2

適用されたかを確認しましょう。

ターミナル
$ rbenv versions
  2.1.0
* 2.2.2 (set by /var/www/project_dir/.ruby-version)

$ ruby -v
ruby 2.2.2p0 (2014-12-25 revision 49005) [i686-linux]

5.Rubyをアンインストール

特定のバージョンをアンインストールする場合は下記のコマンドです。

ターミナル
$ rbenv uninstall 2.2.2

Bundlerを用いたgemライブラリ管理

6. Bundlerをインストールする

Bundler自体もgemライブラリなので、gemコマンドを用いてインストールを行います。

ターミナル
$ rbenv exec gem install bundler
$ rbenv rehash

今回、gemコマンドを「rbenv exec gem」として実行している点がポイントです。これはrbenvで適用されているRubyのgemを明示的に実行しております。

7. Bundlerの設定を行う

はじめに下記コマンドでBundlerの設定ファイルを生成します。

ターミナル
$ rbenv exec bundle init

※上記のコマンドが厳密ですが、システム側のRubyにBundlerをインストールしていない場合は混在しないので下記のようにrbenv execを省略することも可能です。

ターミナル
$ bundle init

bundle initを実行するとGemfileという設定ファイルが生成されます。このGemfileにインストールしたいgemライブラリを記載します。

Gemfile
gem "compass"

今回は試しにCompassをインストールしましょう。

7. Gemライブラリのインストールする

Gemfileに記載したgemライブラリを下記のように実際にインストールします。

ターミナル
$ bundle install --path=vendor/bundle

留意点は--pathオプションを用いて、プロジェクト配下にgemファイルをインストールしていることです。

このオプションを付け忘れてしまうとrbenvで指定したバージョンのRubyに紐付かれてインストールされてしまい、同じバージョンのRubyを利用している他プロジェクトに影響を与える可能性があります。

8. gemライブラリを使用する

bundleインストールされたgemライブラリを使用するには下記のようなコマンドを実行します。

ターミナル
$ bundle exec compass

bundle execを付けて実行することにより明示的に、bundleインストールされたgemライブラリを実行しています。

毎回bundle execを付けて実行するのは冗長ですので、direnvを用いてパスを通すと便利かと思います。

※direnvに関しては後日、別途記載します

HayneRyo
底辺エンジニアの備忘録としてQiitaを利用させて頂いております。
codecamp
現役エンジニアによるプログラミングのマンツーマンレッスンを提供するCodeCampを運営するスタートアップ
http://codecamp.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした