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の関係を図式化するとこんな感じ。
Gemは色んな種類があります。
じゃあ、Bundlerって何だ。
Railsのアプリケーション開発を複数のPCで行なおうとした場合を考えてみます。プログラムファイルはもちろんですが、全てのPCで対象のアプリケーションで使用しているGemパッケージをインストールしておかなければなりません。またGemパッケージのバージョンも揃える必要があります。 そこで使われるのがBundlerです。BundlerはRailsアプリケーションに必要となるGemパッケージの種類やバージョンを管理し、複数のPCで必要なGemパッケージをインストールする仕組みを提供してくれます。
参照サイト:同上
この文面だけをみると、Railsに特化した管理ツール、つまりRubyGemsのRails専用版みたいなイメージです。 しかし、こちらをみると
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の関係性を図式化すると。
ってことかな? こうすると矛盾がない気がします。間違ってたら教えて下さい。