rbenvおよびbundlerの基本的な使用方法
[履歴] [最終更新] (2015/09/13 04:23:37)
1
作品
369
技術情報
最近の投稿
ここは
趣味の電子工作を楽しむ人のためのハードウェア情報共有サイト

技術情報や作品の投稿機能、リアルタイム遠隔操作 API をご利用いただけます。
新着作品

概要

rubyは他の言語と比較してバージョンによる差異が大きく、異なるバージョンのrubyを使用している複数のプロジェクト業務をあるPCで行う場合に、プロジェクト毎に適切なバージョンのrubyを有効化および実行する必要が発生します。この要求はrbenvというツールを使用することで満たすことができます。つまり、rbenvは複数バージョンのrubyが同一システム内に共存することを可能にします。

rubyのライブラリであるgemについてもバージョンによる差異が大きいものがあり、異なるバージョンのgem (rails等) を使用している複数のプロジェクト業務をあるPCで行う場合に、プロジェクト毎に適切なバージョンのgemを有効化および実行する必要が発生します。この要求はbundlerというツールを使用することで満たすことができます。つまり、bundlerは複数バージョンのgemが同一rubyに対して共存することを可能にします。

rbenvの基本

システムにはrubyとgemがそれぞれインストール済みであると仮定して話を進めていますが、インストールされていなくても手順としては同じです。

インストール

rbenvはホームディレクトリ内にインストールします。つまり、同一PCを使用する他のユーザに影響を与えることがありません。具体的な手順としては、yum等のパッケージ管理ツールは使用せず、以下のようにgitレポジトリをクローンします。rbenvのプラグインとしてruby-buildもクローンしておくのを忘れないでください。rbenv自体にはインストール済みのrubyを管理する機能しかなく、ruby-buildでrubyをインストールする機能を追加する必要があります。

$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
$ mkdir ~/.rbenv/plugins
$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

クローン後は「~/.bashrc」等にrbenv用の設定を追記します。

~/.bashrc

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

追記したら

$ source ~/.bashrc

によって設定を反映させましょう。

システム全体にインストールする手順 (補足)

「/usr/local/rbenv」にシステムインストールする手順については、こちらを参照してみてください。

必要な関連ソフトウェアのインストール

rbenvはその動作のためにいくつかのソフトウェアに依存しているため、それらをシステムのパッケージ管理ツール (yum,homebrew等) でインストールする必要があります。

$ sudo yum install gcc
$ sudo yum install openssl-devel
$ sudo yum install readline-devel

rbenvを用いたrubyのインストール

インストール可能なrubyの一覧を表示してみましょう。

$ rbenv install -l

例えば「2.0.0-p481」のrubyをインストールしたい場合は以下のコマンドを実行します。

$ rbenv install 2.0.0-p481
$ rbenv rehash

インストールが正常に完了したら、確かにインストールされていることを確認してみましょう。

$ rbenv versions
* system (set by /home/username/.rbenv/version)
  2.0.0-p481

システムにインストールされていたrubyの他に、先程インストールしたバージョンのrubyが存在しています。「*」が付いているものが有効化されているrubyです。「system」から「2.0.0-p481」に切り替えるためには以下のようにします。

$ rbenv global 2.0.0-p481

戻すためには

$ rbenv global system

とします。ある特定のディレクトリにおいて自動的に有効なバージョンが切り替わるようにするためには

$ rbenv local system

とします。「.ruby-version」というファイルが生成されるだけです。内容もシンプルで

$ cat .ruby-version
system

となっています。なお、rbenvでバージョンを切り替えると、rubyだけでなくgemコマンドのバージョンも対応したものに自動で切り替わりますので、改めてgemコマンドのバージョンを切り替える必要はありません。

bundlerの基本

gemコマンドでインストールするにせよ、bundleコマンドでインストールするにせよ、インストールされたgemパッケージはruby毎に管理されます。同一ruby内で異なるバージョンのgemパッケージを共存させることができるかどうかというところに、gemコマンドとbundleコマンドの違いがあります。

インストール

ややこしいですが、bundleコマンドはgemコマンドでインストールします。"rbenv exec" は「システムrubyのgem」ではなく「rbenvで現在有効なrubyのgem」であることを明記する表記です。"gem" がrbenvで有効なrubyのgemを指している場合は省略可能ではあります。

$ rbenv exec gem install bundler
$ rbenv rehash

これで、以下のコマンドで確認される通り、rbenvで有効なrubyについてbundlerというgemパッケージがインストールされました。

$ rbenv exec gem which bundler
/home/username/.rbenv/versions/2.0.0-p481/lib/ruby/gems/2.0.0/gems/bundler-1.7.2/lib/bundler.rb

あるいは以下のコマンドでもよいです。

$ rbenv exec gem list | grep bundler
bundler (1.7.2)

bundlerを用いたrailsのインストール

設定ファイルを作成します。コマンドは、bundlerではなくbundleです。

$ rbenv exec bundle init

システムrubyのgemパッケージにbundlerは存在しないため、"rbenv exec" で明記する必要も薄く

$ bundle init

とすることが多いです。生成された設定ファイルを編集します

$ vi Gemfile

Gemfile

# A sample Gemfile
source "https://rubygems.org"

gem "rails", "4.0.2"

以下のコマンドで、Gemfileにしたがい「./vendor/bundle」内にrailsをインストールします。

$ bundle install --path vendor/bundle

確かに、railsがインストールされていることが確認できます。

$ bundle exec rails new myApp --skip-bundle

なお、上の例のように、bundleでインストールした「./vendor/bundle」内のgemパッケージを利用する際には「bundle exec」というプレフィックスが必要です。また、「--skip-bundle」というオプションを指定しないとrbenvで現在有効なrubyに対してrailsがインストールされてしまいます。railsインストールは「./vendor/bundle」内に留めたいので、このオプションを忘れないようにしましょう。以上でrailsのローカルディレクトリ「./vendor/bundle」へのインストールは完了です。イメージとしては、「rbenv ∋ rubyおよびgem ∋ bundler ∋ rails」という関係にあります。

Railsのインストール続き

以下の内容は、bundlerの使用方法とは直接関係ありません。railsのインストール手順として、上述の内容は途中ですのでその続きを記載しておきます。概要としては、「./vendor/bundle」内にローカルインストールしたrailsで作成したmyApp内に、railsをローカルインストールするというトリッキーなことをします。まず、ローカルインストールしたrailsを削除します。

$ rm -f Gemfile
$ rm -f Gemfile.lock
$ rm -rf .bundle
$ rm -rf vendor/bundle

myApp内に移動し、自動生成されているGemfile内に記述のあるrailsを含め、gemパッケージをbundlerでローカルインストールします。

$ cd myApp
$ bundle install --path vendor/bundle

参考: Gemfile

source 'https://rubygems.org'

# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '4.0.2'  ← ここがポイント。gemパッケージrailsに関する記述があります。

# Use sqlite3 as the database for Active Record
gem 'sqlite3'

# Use SCSS for stylesheets
gem 'sass-rails', '~> 4.0.0'

# Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 1.3.0'
...

なお、git管理ファイルには「vendor/bundle」を含めないように「.gitignore」を編集しておくことをお勧めします。gemパッケージのインストールが完了したら

$ bundle exec rails server

としてからブラウザでアクセスしてみましょう。

参考情報

「An error occurred while installing sqlite3 (1.3.9), and Bundler cannot continue.」というエラーが出る場合、sqliteの開発ツールがインストールされていないのかもしれません。以下のコマンドを試してみてください。

$ sudo yum install sqlite-devel

「$ bundle exec rails server」の実行時に「Could not find a JavaScript runtime.」というエラーが出る場合、Gemfileにおける「therubyracer」のコメントアウトを外してみてください。

# gem 'therubyracer', platforms: :ruby (変更前)
gem 'therubyracer', platforms: :ruby (変更後)

その後の「therubyracer」のインストール

$ bundle install --path vendor/bundle

において、「An error occurred while installing libv8 (3.16.14.3), and Bundler cannot continue. Make sure that gem install libv8 -v '3.16.14.3' succeeds before bundling.」というエラーが出る場合、g++がない状況が原因かもしれませんので、インストールしてから試してみてください。g++がないので、gemパッケージのlibv8についてv8がコンパイルできない可能性があります。

$ sudo yum install gcc-c++
関連ページ
    概要 Chefを用いると、各種ソフトウェアのインストールや設定ファイルの更新といった、従来であればサーバにログインして手動で行うしかなかった作業を自動化できます。ここではChefの基本を理解することを目的として、『VirtualBoxでWindowsのゲストOSとしてCentOSを動作させる』の手順で用意した、ほぼまっさらな状態のCentOSに対して、『
    概要 Capistranoはサーバの遠隔操作を自動化する多目的なツールです。以下では特に Rails4 を Capistrano3 でデプロイする基本的な方法をまとめます。Rails の場合は Capistrano の設定が gem で提供されているため、Capistrano の知識がなくても基本的なデプロイはできます。独自にカスタマイズしたい場合など、本ページの内容を越えるものは
    概要 「rbenv および bundler の基本的な使用方法」の perl 版です。 plenv の基本 インストール GitHub からダウンロードしてインストールします。 $ git clone https://github.com/tokuhirom/plenv.git ~/.plenv $ git clone https://github.com/tokuhirom/Perl-
    概要 Puma は Ruby/Rack アプリケーションのための HTTP サーバです。Rails の場合に関する使用方法をまとめます。 事前準備 JRuby のインストール こちらのページを参考にして rbenv による ruby インストールを行います。公式ページによると、パフォーマンスを最大限に引き出すためには正式にスレッドをサポートしている Rubinius または
    概要 pyenv は こちらで紹介した rbenv および こちらで紹介した plenv の python 版です。ただし pyenv には rbenv/plenv の bundler/carton が存在しません。代わりに pyenv には virtualenv が存在します。bundler/carton は、あるバージョンの ruby/perl に gem/cpanm でモジュールを直接イン
    概要 Capistrano は複数のサーバーに ssh して何らかの処理を実行するための汎用ツールです。こちらのページでは Rails のデプロイツールとしての Capistrano 3 の使用方法をまとめました。Rails のデプロイに関しては Capistrano の設定が gem で提供されているため、独自に Capistrano の設定をする必要はありませんでした。ここでは Rails
    概要 インターネット上に自分の商品の販売ページを生成する方法は Amazon に出店、BASE、STORES.jp、SPIKE など様々です。そうではなく、ここでは商品ページは自サイトにあり、決済手段だけを導入したい場合を考えます。具体的には、審査が通った一部の法人向けに昨年から日本でも利用できるようになった Amazon ログイン&ペイメント
    概要 Maven, sbt, cmake, make 等と同様に、ビルドツールとして有名な Gradle の基本的な使い方を、特に Java をビルド対象としてまとめます。2017/05/08 現在、Android における標準のビルドツールです。 参考ドキュメント 環境構築 Installation Creating New Gradle Builds