モーダルを閉じる工作HardwareHub ロゴ画像

工作HardwareHubは、ロボット工作や電子工作に関する情報やモノが行き交うコミュニティサイトです。さらに詳しく

利用規約プライバシーポリシー に同意したうえでログインしてください。

rbenvおよびbundlerの基本的な使用方法

モーダルを閉じる

ステッカーを選択してください

お支払い手続きへ
モーダルを閉じる

お支払い内容をご確認ください

購入商品
」ステッカーの表示権
メッセージ
料金
(税込)
決済方法
GooglePayマーク
決済プラットフォーム
確認事項

利用規約をご確認のうえお支払いください

※カード情報はGoogleアカウント内に保存されます。本サイトやStripeには保存されません

※記事の執筆者は購入者のユーザー名を知ることができます

※購入後のキャンセルはできません

作成日作成日
2014/09/01
最終更新最終更新
2021/09/07
記事区分記事区分
一般公開

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

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

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

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++
Likeボタン(off)0
詳細設定を開く/閉じる
アカウント プロフィール画像

Dockerの基礎について学びなおし中

記事の執筆者にステッカーを贈る

有益な情報に対するお礼として、またはコメント欄における質問への返答に対するお礼として、 記事の読者は、執筆者に有料のステッカーを贈ることができます。

>>さらに詳しくステッカーを贈る
ステッカーを贈る コンセプト画像

Feedbacks

Feedbacks コンセプト画像

    ログインするとコメントを投稿できます。

    ログインする

    関連記事

    • レイアウトおよび部分テンプレートに関するまとめ (Rails4)
      レイアウトおよび部分テンプレートはどちらもテンプレート (*.html.erb) に共通の要素をまとめておき、任意のテンプレートから利用できるようにしておくための仕組みです。フッターやヘッダーといった大枠はレイアウト、小さなパーツは部分テンプレートというイメージで使い分けましょう。 レイアウトの使用方法 クラス毎に指定する方法と、アクション毎に指定する方法があります。 app/views/layo...
      taro三世taro三世9/21/2016に更新
      いいねアイコン画像0
    • Ruby コードスニペット (正規表現)
      sample.rb str = "001: This is a string." var1,var2 = 2,3 # 'EOS'とすると#{}による変数展開がなされない (%03dは展開される) doc = (<<"EOS" % var1) # 括弧は省略可。要は<<"EOS"の次の行からEOSまで。(参: <<-"EOS"とすると前に空白...
      だいふくうさぎだいふくうさぎ4/13/2018に更新
      いいねアイコン画像0
    • OAuthを用いずにTwitterに自動投稿する (回数制限あり, Selenium with Ruby)
      Seleniumを用いて、OAuthを用いずにTwitterに自動投稿するRubyスクリプトを記述してみます。連続で複数回実行すると、ボット判定としてキャプチャ認証が発生します。その認証までは通過できませんので悪しからず。また、Twitterの仕様変更次第ではDOMの構造が変化するため、下記サンプルは機能しなくなる恐れが有ります。 twitter_post.rb #!/usr/bin/ruby r...
    • Ruby における日本語のエンコーディング
      日本語を含めて多言語対応する際には、Asciiコード以外の文字コードセットが必要になります。日本語が主となる場合、よく使われる文字セットにはUnicode, Shift_JIS, EUC-JPがあります。このうち Unicode だけは特殊であり、世界中のあらゆる文字を収録しようとしていることから 1 文字を表現するために必要なバイト数が大きくなってしまっています。そのため Unicode のうち...
      だいふくうさぎだいふくうさぎ3/21/2017に更新
      いいねアイコン画像0
    • Rails3ビューテンプレートの基本的な使用方法 (Ruby)
      Railsでは、ERB (eRuby (テキストファイルにRubyスクリプトを埋込む書式の仕様) をRubyで実装したもの) を用いてHTML内にRubyスクリプトを埋込むことができます。 <% %> で囲むと出力されません (if-elseなど制御構文を記述します) <%= %> で囲むとエスケープ出力されます <%== %> で囲むとエスケープされずに...