Bundler, Gemfile, Gemfile.lock とは

Pocket

Bundler

Bundler の前にまず、Ruby に関係するパッケージを総称して RubyGems といいます。開発に便利なライブラリやフレームワークをパッケージにし、公開されたそれらをRubyGems、Gem、Gems と呼んでいます。Gem に限らずパッケージの依存関係を管理することが安定の為にも重要です。

そして Bundler とは、それら依存関係を管理してくれるツールです。例えば、ある Gem が依存している別の Gem や、それらのバージョン管理であったり、他にも Test や Dev や Pro といった環境ごとに別のバージョンを使用する等に必要となります。

ちなみに、この Bundler も RubyGems のひとつです。

Gemfile

では Bundler は何に基づいて必要な Gems を探すのでしょうか。それを記述したものが Gemfile です。Bundler はあなたが書いた Gemfile の内容に従って RubyGems.org から Gem を探して準備します。必ずしもこのサイトではありませんが、その殆どはここで公開されます。

まずは Gemfile を Bundler.io::Gemfile のシンタックスに従って記述します。そしてそれらをインストールするコマンドが以下です。

Gemfile.lock

では Gemfile.lock とは一体は何なのでしょうか。Bundler はあなたが書いた Gemfile に従ってそれら Gems を用意しますが、実際にはあなたが書いた Gems だけでは不十分であったり、更にそれを使用する為には、また別の依存した Gems が必要になることが往々にしてあるのが現実です。それらを判断して本当に必要なものをすべて揃えた結果が書かれているのが、この Gemfile.lock です。

bundle install / bundle update

最初、Gemfile.lock には何も書かれていませんが、bundle install することで Gemfile に基づいた実際に必要なすべての Gems がインストールされます。開発途中、また別の Gems が必要になった場合には Gemfile にそれを追加して bundle install します。そうすると Gemfile.lock の内容も更新されます。

しかし、すでに用意された Gem に変更を加える場合は Gemfile.lock を修正し、 bundle update を行います。例えばバージョンの変更や不必要な Gem を削除したい時などです。