rubyで開発する時に必要なgemはbundlerで管理すると便利。

何が便利?

rubyで開発する時、他の環境やgemのバージョンとかをReadmeに書いてインストールするのがとても煩わしい。

bundlerで管理しておけば、他の環境などでgit cloneしたらbundle installだけで開発に必要なgem(verも開発時の物)が揃う。

rubyとgemはとりあえずインストールされている物とする。

gem install bundler

bundlerとかいうgemなのに、打つコマンドはbundleなので注意。

まずはじめに

とりあえず開発スタート時にプロジェクトのディレクトリに移動してgit initのように

bundle init

を打つとgemfileというファイルが生成される。gemfileの中にgem “rails”といった書き方のサンプルが書いてある。例に習って開発に必要なgemを書いていく。もしもverを指定したい時であればgem “sinatra”, “1.4.4”といった書き方になる。

必要なgemを書き終えたらbundle installするのだが、そのまま打つと開発PCのruby環境のgemにインストールしてしまう。なんか不具合とか分からないけど、インストールする場所を指定しておけば消す時も簡単らしいので、作法に従っておく。

bundle install --path vendor/bundle

bundler公式のオススメでvendor/bundleにしておいたけど、これって普通にbundleとかgemとかの方が分かりやすくていいんじゃないの?これに関してはちょっと調べてみたい。極力階層を深くしたくないし、シンプルでいくべきだと思うのだが。(今はスルーだけど)

上記のbundle installをすると/.bundle、/vendor、gemfile.lockの3つが生成される。./.bundleの中にはconfigが入っていて、bundle installした時のオプションが保存されるので、次はbundle installすればわざわざpathを指定しなくても大丈夫になる。/vendorにはgemのインストール先に設定したのでgem関連がゴソっと入ってる。gemfile.lockにはインストールしたgemのverが保存されている。

gitを使っている場合、/vendorの中身が多いし変更する機会が多いので.gitignoreを指定しておいた方が良さそう。

touch .gitignore 
echo /vendor >>.gitignore

これでgemの管理とかをReadmeにわざわざ書かなくてもOK。

requireをBundler.requireでまとめて完了

bundleの設定が終わったら、rubyファイルのrequireも簡単になる。

require "bundler"
Bundler.require

で大丈夫。これから開発する時はbundleでgemを管理しよう。

勉強させてもらったページ

ツールを使いたいだけの人のための bundler 入門