dshimizu/blog

アルファ版

RubyでBundlerを使ったGem管理

はじめに

Rubyでプログラムを書く時には必要なGemパッケージをインストールしていくことになりますが、環境に合わせてGemパッケージやそのバージョンを使い分けたり、システム環境を汚したくないとき等があります。
そんなときはディレクトリ毎にBundlerを使ってGemパッケージを管理するといろいろ便利かと思いやってみましたのでそのメモです。

Bundlerとは

Ruby環境内で利用するGemを管理するためのソフトウェアです。
Gemfileというファイルにパッケージ名、バージョンを記述してGemパッケージを管理出来ます。 Bundler自体もGemパッケージとして提供されています。

Bundlerを使ったGem管理のやり方

Bundlerのインストール

Bundlerだけは通常通りにインストールしておく必要があります。


$ gem install bundler
Gemfileの準備

まずはプログラム実行環境用のディレクトリを作成します。
そのディレクトリ配下でbundle initを実行してGemfileを作成します。


$ mkdir ~/rbdev

$ cd ~/rbdev

$ bundle init

Gemfileを編集し、インストールしたい必要なGemパッケージとそのバージョンを記述します。


$ vim Gemfile
Gemパッケージのインストール

bundle installを実行し、Gemfileに記述されたGemパッケージをインストールします。

bundler はデフォルトで開発用に最適化されているようなので、開発環境では--path オプションを付けなくても良いかもしれません。

bundler/man/bundle-install.ronn at v1.6.2 · rubygems/bundler · GitHub

$ bundle install

 

--pathオプションを指定することでGemパッケージインストール先のディレクトリを指定できます。ここではvendor/bundlerと指定しているので、~/rbdev/vendor/bundler配下にGemパッケージがインストールされます。インストール先をこのディレクトリ環境内にすることでシステム環境を不用意に汚さずに済みますので、本番環境ではこれを使うのが良いようです。またインストール先はAdmin権限が必要だったりしますが、これがない場合にも --path オプションが有効のようです。

$ bundle install --path vendor/bundler
 
実行

実行したいプログラム内でGemパッケージをrequireし、実行時にbundle execを指定することで、Bundler経由でインストールしたGemパッケージを読み込んでプログラムを実行できます。


$ bundle exec ruby foo.rb

おわりに

上記の内容よりもっとスマートなやり方があるかもしれませんが、Bundlerを使うことでGemパッケージを管理しやすくなると思います。
必要な環境毎にディレクトリを分けてGemfileを作成し、bundle install実行時に--pathでGemパッケージインストール先を制御することで、Gemパッケージをディレクトリ毎に管理できるので、システム環境を汚したくない場合に便利かと思います。

参考