モフモフになれたら

本と映画と仕事と考えたこと

RubyGems,Gem,Bundlerの違いを図式化してみた

Ruby on Rails を勉強していると、Gemという単語がよく出てきます。さらに、Bundlerも。しかも、環境設定の時、一番何も分からない時に、色んな単語が出てきてインストールさせられるので、訳が分からないままになっていましたが、今日、ひまだったので徹底的に調べました。

まず、Gemとは。

Rubyで使われるライブラリやアプリケーションはGemと呼ばれる形式のパッケージにすることができます。多くのライブラリがGem形式でパッケージされ公開されており、これらはRubyGemsと呼ばれるパッケージ管理ツールを使ってダウンロードを行なったりインストールすることができます。これらのパッケージのことを単にGemとかGemパッケージなどと呼んだりします。

参照サイト:http://www.rubylife.jp/rails/ini/index2.html

なるほど。 GemとはRubyで使われるライブラリやアプリケーションのこと。 RubyGemsはGemを管理するツールのことなんですね。

よくRubyGemsのことを略してGemと呼んだりする場合があるので、混乱していたようです。 RubyGemsとGemの関係を図式化するとこんな感じ。

pic19912

Gemは色んな種類があります。

じゃあ、Bundlerって何だ。

Railsのアプリケーション開発を複数のPCで行なおうとした場合を考えてみます。プログラムファイルはもちろんですが、全てのPCで対象のアプリケーションで使用しているGemパッケージをインストールしておかなければなりません。またGemパッケージのバージョンも揃える必要があります。 そこで使われるのがBundlerです。BundlerはRailsアプリケーションに必要となるGemパッケージの種類やバージョンを管理し、複数のPCで必要なGemパッケージをインストールする仕組みを提供してくれます。

参照サイト:同上

この文面だけをみると、Railsに特化した管理ツール、つまりRubyGemsRails専用版みたいなイメージです。 しかし、こちらをみると

BundlerはRuby on Railsで標準採用されている、RubyGemsの依存関係管理ソフトウェアです。 SinatraやピュアなRuby(NonFramework)など、Ruby系であれば使うことが出来ます。 Ruby on Rails専用なわけではありません。

参照サイト:http://qiita.com/sumyapp/items/6843ceebbbfc09a2b6ac

これでクリアになりました!Railsに標準採用されているけども、専用ではない。さらにBundlerのインストールもRubyGemのコマンドで行われます。

gem install bundler

つまり、RubyGemsとGemとBundlerの関係性を図式化すると。

pic25667

ってことかな? こうすると矛盾がない気がします。間違ってたら教えて下さい。