はじめに
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パッケージをディレクトリ毎に管理できるので、システム環境を汚したくない場合に便利かと思います。