LoginSignup
18
26

More than 5 years have passed since last update.

Ruby覚書 - Ruby / RubyGem / rvm / rbenv / Bundler

Last updated at Posted at 2017-03-05

はじめに

 Infrastructure as Code の実現に向けて ItamaeServerspec を使おうと ドットインストール で一通りの導入はやってみたけれど、いざ自分用のホストを Vagrant で構築しようとしたらRubyユーザでないために Gem やら Bundler やら rbenv が気になって作業が進まないのでまとめてみます。

 適切な書籍を購入すればまとめて書いてありそうな内容ですが、サクッと解決出来ないかと思いググってみるとやはり同じような悩みを持った方がちらほらと。

ん〜。
分かったような、分からないような。。

こういう時は公式サイトから漁っていく。

公式サイト

Webサイト

GitHub

要約

Ruby

 Wikipedia によるRubyの解説は下記の通り。

Ruby(ルビー)は、まつもとゆきひろ(通称 Matz)により開発されたオブジェクト指向スクリプト言語であり、スクリプト言語が用いられてきた領域でのオブジェクト指向プログラミングを実現する。 また日本で開発されたプログラミング言語としては初めて国際電気標準会議で国際規格に認証された事例となった。
引用:Ruby - Wikipedia

リリース履歴については英語版の Wikipedia が詳しかった。
これを見ると、2013年以降のリリース間隔が短くて驚き。

Version Latest teeny version initial release date End of phase End of security maintenance phase
1.8 1.8.7-p375 2003-08-04 2012-06 2014-07-01
1.9 1.9.3-p551 2007-12-25 2014-02-23 2015-02-23
2.0 2.0.0-p648 2013-02-24 2015-02-24 2016-02-24
2.1 2.1.10 2013-12-25 2016-03-30 2017-03-30
2.2 2.2.6 2014-12-25 TBA TBA
2.3 2.3.3 2015-12-25 TBA TBA
2.4 2.4.0 2016-12-25 TBA -
3.0 - TBA - -

TBA : To Be Announced (後日公表)

引用 : Ruby (programming language) - Wikipedia

RVM : Ruby Version Manager

 正式名称が分かったのでなんとなくイメージがつきやすくなりました。

RVMはRuby Version Managerとも言います。
その名前通り、複数のRuby実行環境の管理を簡単にするbashスクリプトツールです。
UNIX系の環境で、複数のRuby処理系をインストール、共存させることができます。
引用 : RVMとは?(RVMを利用したRubyのインストール) - qiita

rbenv

RVMと比較して軽量でナウいという印象。

 rbenvは、複数のRubyのバージョンを管理し、プロジェクトごとにRubyのバージョンを指定して使うことを可能としてくれるツールです。(変わった名称についてはきっと「Ruby environment」の略でしょう。読み方は「アールビー・エンブ」または「アールベンブ」。)
引用 : rbenvでRubyを管理し、Rails開発環境を構築する - maesblog

rbenvとは?(rbenvを利用したRubyのインストール) - Qiita

RubyGems

 gem は Wikipedia が分かりやすかった。
gemはコマンドの名称であり、RubyGemsというのがRuby用のパッケージ管理システムである。
gem(Rubyのプログラム)を容易に管理し、配布することが出来る。

RubyGemsは、Ruby言語用のパッケージ管理システムであり、Rubyのプログラムと("gem" と呼ばれる)ライブラリの配布用標準フォーマットを提供している。gemを容易に管理でき、gemを配布するサーバの機能も持つ。Rubyバージョン1.9以降では標準ライブラリの一部となっている。
引用 : RubyGems - Wikipedia

Bundler

bundler/bundler - GitHub

gemパッケージの依存関係管理ツールとして必須な印象。

アプリケーション開発の際,いくつもgem installしていると,どのアプリケーションがどの gem に依存しているのか?必要なバージョンは?等の依存関係がわからなくなる.bundlerはこれを解決するためのツール.
引用 : Rubyの基礎知識についてのメモ - tasuwo blog

Ruby を取り巻く環境と諸事情

Rubyのリリース履歴を見ても分かるように、パッケージだけでなくRuby言語のバージョン管理についても簡便さを求められるようになっているらしい。

Rubyはオープンソースであり,更新がめまぐるしい.
そのため,複数バージョンを切り替えるためのrbenvやRVM等のサードパーティ製のパッケージ管理ツールによってインストール・管理するのが一般的.
引用 : Rubyの基礎知識についてのメモ - tasuwo blog

つまり、RubyではRuby自体のバージョン切り替えを容易に行うことが出来ることが求められる。

また,ライブラリはgemという形式でパッケージングされている.
RubyGemsを用いてこれらのライブラリを利用できる.
また,その依存関係を管理するのにbundlerというgemパッケージが広く用いられている.
bundler は アプリケーション毎に Gemfile を用意する.
Gemfile にアプリケーションが依存する gem やそのバージョンを記述することで,アプリケーションとライブラリの依存関係を管理する.

つまり、 パッケージの依存関係 を管理するために bundler が使用される。

Rubyの基礎知識についてのメモ - tasuwo blog

RVM と rbenv

「RVM と rbenv ってどっちもRubyのバージョン管理ツールじゃん」ていうツッコミに対しては、下記が分かりやすい。

  • rbenv は RVM と違ってシェルにコマンドをロードしない → 代わりに $PATH を追加するだけで使える
  • rbenv は RVM と違ってシェルコマンドを上書きしない(RVM は cd などを RVM 独自のものに置き換える)
  • rbenv は RVM と違って設定ファイルが無い → どのバージョンを使うかの指定のみ
  • rbenv は RVM と違って Ruby をインストールしない(rvm install 相当の機能が無い) … 代わりに自分で好きに Ruby をインストールできるし、rvm install 相当の ruby-build を使うこともできる
  • rbenv は RVM と違って gemset の概念がない … 代わりにアプリケーション毎の Bundler を使ったほうがいいよ
  • rbenv は RVM と違って他の gem を変更する必要がない(RVM は Bundler や Capistrano と相性が悪い)
  • rbenv は RVM と違ってプロジェクトを切り換えるときに警告しない(これは、.rvmrc で Ruby のバージョンを切り換えるときに、.rvmrc で任意のコードを実行できることによる)… 代わりに rbenv はバージョン文字列を使う
  • rbenv は RVM と違って、環境変数で Ruby バージョンを切り換えることができる(RVM よりも簡単に)

引用:rbenv と RVM との違い - passingloop

「どちらを選べば良いの」という回答は下記の通り。

rbenv は RVM より軽量コンパクトな Ruby バージョン切り替えツール。RVM は機能が豊富だけど使いこなせていないという人は、乗り換えを検討するとよい。
引用 : rbenv と RVM との違い - passingloop

まとめ

ざっくり整理してみると下記の通り。

  • Ruby : イカしたLL系言語
  • RVM(Ruby Version Manager) : Rubyのバージョン管理ツール
  • rbenv : Rubyのバージョン管理ツール
  • RubyGems : Ruby用のパッケージ管理システム。単位はGem。
  • bundler : Rubyパッケージ管理ツール

Rubyやるなら、

  1. rbenvを導入
  2. 指定のRubyバージョンをインストール
  3. Bundlerでアプリケーション単位でgemを管理

という感じでしょうか。

環境構築の手順については、下記のクラスメソッドさんの記事が分かりやすいです。

Bundlerについては下記

あとがき

PHPも同様に環境を共存させる方法がある。

18
26
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
26