Rubyを扱う際に出てくる「rbenv」や「gem」などの用語を理解する
今回は、Rubyを扱う上で必須の知識となる「rbenv」や「gem」などの概念、使い方を簡単にまとめます。
RubyやRailsの勉強を最近始めた人なんかは、ほかにも「bundler」とか、ワケがわからない専門用語飛び交ってモヤモヤしてるはずです。そういう状況の人にとっては、この記事が参考になるかもしれません。
すでに使い慣れている人にとっては役に立たないと思います。
rbenvとはなにか
一言で表せば「Rubyのバージョン管理」をしてくれるツールです。
Rubyには1.9とか2.5とかのバージョン以外にも、さまざまなバージョンが存在します。
例えば、jRubyはJavaで実装されたRubyなのでJavaライブラリを使用することが可能です。
ほかにも、MacRubyとかmrubyとか正直使ったこともないバージョンがたくさんあります。
これらRubyをそれぞれの用途目的で、ひとつのPCないしはサーバへインストールして管理するのは大変です。
そこで役に立つのが「rbenv」です。rbenvを使えばRubyのバージョンを一元管理できるようになります。
また、コマンド1つで使用するRubyのバージョン切り替えもできます。もはや必須のツールです。
rvmとはなにか
rvm使ったことないからわからないです
こちらもrbenvと同様、「Rubyのバージョン管理」をしてくれるツールなのですが、
rbenvのほうが後発で主流のようです。あえてrvmを使う理由はないかもしれません。
rbenvをインストールする
今回は一般ユーザでも操作が可能な方法でインストールしていきます。
少しハードルが高くなってしまうのですが、rbenvをroot権限でインストールされたい方は、
「つくば日記(仮)」さんの「rbenvをシステムワイドにインストールする」が参考になります。
・Linuxの場合
環境変数の理解が十分でない方は、rbenvを導入する前にしっかり調べておいてください。
誤った操作をした場合、cdで移動すらできなくなる場合があります。
※ 元の状態に直す方法はあります
.bash_profile
に環境変数を追加します。
export RBENV_ROOT=/usr/local/rbenv # rbenv用のルートパスを定義 export PATH=${PATH}:${HOME}/bin:${RBENV_ROOT}/bin:/${RBENV_ROOT}/shims # 既存のPATHに対して、末尾に「:${RBENV_ROOT}/bin:/${RBENV_ROOT}/shims」を追加します。
追加したら、source ~/.bash_profile
で反映させておきます。
次に、gitを使ってrbenvとruby-build(後述)のソースを取得・配置します。
git clone git://github.com/sstephenson/rbenv.git ${RBENV_ROOT} git clone git://github.com/sstephenson/ruby-build.git ${RBENV_ROOT}/plugins/ruby-build
最後に、.bash_profile
にrbenvの初期化処理を追加します。
「rbenvのソースが環境内に存在すれば初期化する」という処理をしているだけです。
export RBENV_ROOT=/usr/local/rbenv export RBENV_ROOT=/usr/local/rbenv export PATH=${PATH}:${HOME}/bin:${RBENV_ROOT}/bin:/${RBENV_ROOT}/shims if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi # この1行を最終行へ追加します。
追加したら、source ~/.bash_profile
で反映させておきます。
これで準備は完了です。rbenv
と叩いてバージョン情報や使い方のリストが返ってくれば成功です。
・MacOSXの場合
Homebrewを使ってインストールできます。
Homebrewのインストールとrbenvのインストール Mac編 – Qiita
rbenvを使う
ではさっそく、rbenvで最新版のRubyをインストールしてみましょう。
インストールできるRubyのリストは、rbenv install --list
で表示することができます。
この際、さきほどgitで取得した「ruby-build」のソースがない場合はコケます。
※ つまり、rbenv単体ではRubyの管理はできてもインストールはできないってことです。
話を元に戻して、表示されたバージョンのリストを見てみると、
通常のRubyは2.1.5が最新版であることがわかります(2015/5/29現在)。
あとは、下記コマンドでインストールするだけです。
rbenv install 2.1.5
バージョンを指定するだけなので簡単ですね。
インストールには結構時間がかかります。気長に待ちましょう。
インストールしただけでは使えません
rbenvには「グローバル」と「ローカル」という概念があります。
さきほどの手順で、Ruby2.1.5は正常にインストールされているはずですが、
その環境において、グローバルに使用されるバージョンは変わっていません。
例えば、「MacOSX Mountain Lion」の場合、
デフォルトでインストールされているRubyのバージョンは「1.8.7」です。
この場合、現在のPCには「1.8.7 と 2.1.5 のバージョンが共存している」ことになりますが、
「使用されるバージョンは 1.8.7 に設定されている」ということです。
これを、「最新版である 2.1.5 を使う設定」に変える方法は下記のコマンドです。
# これでグローバルに設定されるバージョンが2.1.5になる rbenv global 2.1.5 rbenv rehash # rbenv global と叩くと、globalに設定されているバージョンを確認できる rbenv global # rbenv versions と叩くと、PC内にインストールされているRubyのバージョンリストが表示される # 頭に「*」が付いているバージョンがglobalに設定されているバージョン #「system」は、デフォルトでインストールされているRubyのバージョンを指す rbenv versions
rbenv rehash
というコマンドは、俗にいう「おまじない」です。
具体的になにをやっているかは、「DQNEO起業日記」さんの「rbenv rehashは何をやっているのか?」という記事が参考になります。
特定のディレクトリで使用するRubyのバージョンを指定したい場合
さきほど記述したように、rbenvには「ローカル」という概念もあります。
つまり、グローバルに使用するバージョンは「2.1.5」に設定しておきながらも、
特定のディレクトリでは「1.9.3」を使うといったことが簡単にできます。
# ホームディレクトリに「rubytest」ディレクトリを作成・移動 mkdir ~/rubytest && cd ~/rubytest # ローカル(rubytestディレクトリ)で使用するバージョンを1.9.3に設定 rbenv local 1.9.3 rbenv rehash
ローカルのバージョンを設定した後は、そのディレクトリに「.ruby-version」というファイルが生成されます。
例の場合、中身には1.9.3と記述があるはずです。
gemとはなにか
そろそろ、gemについても触れておきます。正式には「RubyGems」といいます。
gemはRubyをインストールする際に一緒に付属しているもので、gem自体にもバージョンがあります。
※ Rubyのバージョンごとにgemもそれぞれ付属していることになります。
さて、このgemですが、rbenvとはあまり関係がありません。というのも、
rbenvは「Rubyのバージョンを管理」するためのツールでしたが、
gemは「Rubyのパッケージを管理」するためのツールだからです。
パッケージというのは、つまり、拡張機能のことです。
Rubyで何かを実装する際に、手助けとなる仕組みを提供してくれるわけです。
※ ちなみに、Railsも元を辿ればこのgemパッケージの1つです。
実際にgemを使ってイメージをつかむ
言葉よりコマンド叩いて覚えましょう。
# 使用されているバージョンのRubyにおける、gemパッケージの一覧を表示 # 表示されたのは、デフォルトで入っているgemパッケージのリスト gem list # bundlerをインストールする(この場合、グローバルにインストールすることになる) gem install bundler --no-ri --no-rdoc # おまじないを唱えずにbundlerを使うと… bundle # -> -bash: bundle: command not found と返ってくるので、Rubyはbundlerを認識できていない # おまじないを唱えたあとに使うと… rbenv rehash bundle # -> Could not locate Gemfile or .bundle/ directory とエラーが返るので、bundlerが認識できた # リストをもう一度表示させると「bundler」が追加されているはず gem list
--no-ri --no-rdoc
というのは、インストールするgemパッケージのドキュメントをインストールしないためのオプションです。ドキュメントを除外してインストールすると、かなり早くなります。
bundlerとはなにか
さきほど、Railsはgemパッケージの1つだと書きましたが、bundlerもその1つです。
bundlerは、「gemパッケージの管理を簡単に・効率的に」する gemパッケージです。
※ gemパッケージがgemパッケージの管理を簡単にするとか、なんかややこしいですが
rbenvがプロジェクトごとに使用するRubyのバージョンを選択できる機能を提供する一方で、
bunderは、プロジェクトや実行環境ごとに使用するgemパッケージを選択する機能を与えるわけです。
詳しくは、「TASK NOTES」さんの【Ruby】bundlerの使い方 (Gem管理)という記事が参考になります。
おわりに
ざっくりとした説明でしたが、全体像は大まかにつかめたのではないでしょうか。
bundlerやgemについて、より詳しく知りたい方は調べるとたくさん出てきますし、
Railsの本を1冊買うなりして、サンプルアプリケーションを作ってみるのが一番近道だと思います。