BLOGTIMES
2015/06/05

Bundler で gem を管理してみる

  ruby 
このエントリーをはてなブックマークに追加

最近、Ruby でアプリを開発するためのチュートリアルを読んだり、Redmine のインストール方法を調べたりすると Bundler という gem 管理ソフトが使われていることが多くなってきたので、ちょっと本腰をいれて仕組みを調べてみることにしました。

Bundler は簡単に言えばアプリケーションごとに、必要な gem をインストールできるようになるソフトウェアです。通常の gem はシステム(というか、Ruby の環境)ごとに1つしかないので、自分が使いたいプロダクトが複数あったときに、それらが同じ gem だけれども違うバージョンを要求するような場合にプロダクトごとに gem の管理ができるようになります。逆に他のアプリを気にせずに、必要な gem をガンガンインストールできるようになるので管理が非常に楽になります。

以下、導入メモ。

† Bundler のインストール

Bundler 自体も gem で供給されているので、これだけは普通に gem を使ってインストールしておきます。

gem install bundler

これを済ませると gem の代わりに bundle コマンドを使って環境固有の gem をインストールすることができるようになります。

† Bundler による環境固有の gem のインストール

bundler はアプリケーションのルートディレクトリにある Gemfile という設定ファイルを使うので、そのひな形を以下のコマンドで生成してやります。

bundle init

中身は以下のような感じになっているので、必要な gem を列挙してやります。例えば nokogiri と mysql2 を使いたい場合は以下のような感じ。
Gemfile

# A sample Gemfile source "https://rubygems.org" # gem "rails" gem 'nokogiri' gem 'mysql2'

このままではまだ gem はインストールされていないので、以下のコマンドを実行してインストールします。初回時に --path vendor/bundle をつけることにより、gem が vendor/bundle 以下にインストールされるので他の環境を汚さないようになります。gem に依存性がある場合には必要な gem も勝手にインストールされます。逆に Gemfile から必要がない gem を削除して clean を実行すると、gem が削除されます。

bundle install --path vendor/bundle # 初回だけ bundle install # 2回目からはこちらでも可 bundle clean # いらない gem を削除

† bundler 経由で gem を require する

bundler で gem をインストールしても、アプリからは require しなければ利用できません。
Gemfile にある gem をまとめて require する場合には以下のようにすれば一撃で済ませることができるようです。

require 'bundler' Bundler.require

恥ずかしいことに、これまで Bundler と bundle の違いが分かっていませんでしたが、これでやっと分かるようになりました。
パッケージ管理を行うソフトウェアの名前が Bundler で、Bundler を使うためのコマンドが bundle なんですね。


    トラックバックについて
    Trackback URL:
    お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
    このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/7655
    Trackbacks
    このエントリにトラックバックはありません
    Comments
    愛のあるツッコミをお気軽にどうぞ。[policy]
    古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
    コメントはありません
    Comments Form

    コメントは承認後の表示となります。
    OpenIDでログインすると、即時に公開されます。

    OpenID を使ってログインすることができます。

    Identity URL: Yahoo! JAPAN IDでログイン