RubyGemsはRubyのライブラリ配布のパッケージ管理システムですが、なんか最近では、SassとかChefとか、Rubyプログラマ以外の人が使いそうなツールがRubyGemsで配布されるケースが多くなってきました。Rubyとか絶対書かなそうなウェブデザイナがgem installとか打つ時代の到来です。
例えばウェブデザイナが話題のSassを使ってみようと方法をググってみると「Rubyをインストールして、gem install sassと打てば使えるよ!」とか出てくるわけです。たしかにそうなんだけど、それだとシステムワイドにインストールされてしまうので、プロジェクトごとにバージョンを固定することができません。「昔のプロジェクトの動作がいつのまにかおかしくなってる!あれってどのバージョン使ってたんだっけ??」みたいなトラブルを避けるためにも、Gemパッケージはプロジェクトごとに個別にインストールしたいし、あとで同じ環境を再現できるように使っているバージョンを明確にしておきたい。
そこで、いきなりgem installとか叩かずに、Bundlerという仕組みを使ってプロジェクトローカルにGemsをインストールするというのが、Rubyプログラマの流儀となっています。とても便利なので、SassとかChefとかでRubyデビューした方にもぜひ使ってみてください。
というわけで、とりあえずBundlerをインストールしましょう。これだけはシステムワイドにインストールするので、普通にgem install bundlerします。
# gem install bundler
では、Webサイトのプロジェクトを作って、ローカルにSassを導入してみましょう。適当にプロジェクト用のディレクトリを作って、その中にGemfile
というファイルを作ります。内容は次のようにします。
source 'http://rubygems.org'
gem 'sass'
このファイルでは「このディレクトリのプロジェクトではこのGemを使っています」ということを宣言しています。それでは、ここで定義したGemsをインストールしましょう。プロジェクトのディレクトリに移動してから、次のようにします。ローカルへのインストールなので、一般ユーザー権限で実行すればok。
% bundle install --path vendor/bundle
--pathオプションでパッケージのインストール先を指定します。これを指定しないとシステムワイドに入ってしまうので、このように--pathでプロジェクトディレクトリ下を指定することが実質必須です。パス指定はどこでもいいんだけど、vendor/bundleはRuby on Railsの伝統です。
これでプロジェクトディレクトリ下の閉じた場所にSassがインストールされました。
ただしインストールされたGemパッケージのコマンドにはPATHが通っていないので、使用するにはbundle execをかませます。例えばsassコマンドを使うには、bundle exec sassとします。
% bundle exec sass --watch sass:css
あとはいつも通り。
ところで、最初にbundle installした時に、Gemfile.lock
というファイルが作られています。ここにはインストールされたGemsのバージョンが記録されています。このファイルをプロジェクトに含めておけば、プロジェクトでどのバージョンのGemsが使われているのかが明確になります。Gitなどでバージョン管理する場合はGems(vendor/bundle)は含めなくてok。