RubyのBundlerについていま一度調べてみる

RubyのBundlerについていま一度調べてみる

bundlerとは

gemを管理してくれる仕組みです
bundler自体もgemになっています

インストール方法

Rubygemsが入っている状態で以下のコマンドでインストールできます

gem install bundler

<br />## 概要

bundlerはGemfileというファイルでgemを管理します
GemfileにインストールしたいGemを決められた書式で書くと
以下のコマンドでインストールできます

bundle install

<br />ちなみにGemfileがない状態で実行すると以下の様なエラーがでます

Could not locate Gemfile

<br />各種設定状況を確認するためには、以下のコマンドを実行します

bundle env

<br />まだ何も設定していない状態では、以下のようになります。

Bundler 1.7.3
Ruby 2.1.0 (2013-12-25 patchlevel 0) [x86_64-darwin13.0]
Rubygems 2.2.0
GEM_HOME
Gemfile

Gemfile.lock

<br />試しにGemfileに1つ追加してみます

```Gemfile
gem 'jp_prefecture'

この状態でbundle envを実行すると以下のようになります

Bundler 1.7.3
Ruby 2.1.0 (2013-12-25 patchlevel 0) [x86_64-darwin13.0]
Rubygems 2.2.0
GEM_HOME
Gemfile
gem 'jp_prefecture'
Gemfile.lock
<No Gemfile.lock found>

Gemfileのところに追加したものが出ています

これで「bundle install」を実行すればjp_prefectureのgemがインストールされるはずですが、以下の様なエラーメッセージが出ました

Resolving dependencies...
Your Gemfile has no gem server sources. If you need gems that are not already on your machine, add a line like this to your Gemfile:
source 'https://rubygems.org'
Could not find gem 'jp_prefecture (>= 0) ruby' in the gems available on this machine.

実は、Gemfileにはgemをインストールするソースを必ず指定しなければなりません

気を取り直して、sourceを指定してみます

source 'https://rubygems.org'

gem 'jp_prefecture'

これで「bundle install」を実行するとインストールが出来ました

Fetching gem metadata from https://rubygems.org/..
Resolving dependencies...
Installing jp_prefecture 0.8.0
Using bundler 1.7.3
Your bundle is complete!
Use `bundle show [gemname]` to see where a bundled gem is installed.

ちなみに以下のように–pathを指定すると、指定したパスにインストール出来ます
指定したパスにインストールすることにより、特定のアプリだけにインストールするなどといった事が可能です

bundle install --path .bundle

インストールされているgemを確認する場合は以下のコマンドを実行します

bundle exec gem list
[~/Develop/bundletest]

*** LOCAL GEMS ***

bundler (1.7.3)
jp_prefecture (0.8.0)

このとき、bundle execをつけないと、bundlerの管理下ではないシステムの方にインストールされているgemの一覧が出てきます

bundle installすると、「Gemfile.lock」というファイルが生成されます
これは、インストールした(またはインストールする)Gemのバージョンを固定するもので、他の環境でも同じバージョン構成でgemをインストールしたい場合に役に立ちます

bundlerでインストールしたgemを実際のrubyのコードから使う場合は、以下のようにします

require 'bundler'
Bundler.require

TAG

  • このエントリーをはてなブックマークに追加
金子 将範
エンジニア 金子 将範 rubyist

新しいことや難しい課題に挑戦することにやりがいを感じ、安定やぬるい事は退屈だと感じます。 考えるより先に手が動く、肉体派エンジニアで座右の銘は諸行無常。 大事なのは感性、プログラミングにおいても感覚で理解し、感覚で書きます。