yucatio@システムエンジニア

趣味で作ったものいろいろ

bundlerのインストールと初期設定

Rubyを無事インストールできたので、次はbundlerをインストールします

yucatio.hatenablog.com

パッケージ管理とは

パッケージ管理とは、使用するライブラリ(ある機能のソースファイルの集まり)をインストール、更新するための機能です。 Rubyではgemコマンドでライブラリをインストール、更新できます。

さらに、あるライブラリがさらに他のライブラリを必要としていた場合、自動で必要なライブラリをインストールしてくれます。 この機能を使わないと、以下のようになります (実体験)

  1. 便利なライブラリAを見つけた!ダウンロードして使おう
  2. クラスZが見つからないエラー発生。ライブラリAで使われているようだ
  3. クラスZはライブラリBに入っているそうなので、ライブラリBをダウンロード
  4. プログラム再実行
  5. クラスYが見つからないエラー発生。ライブラリBで使われているようだ
  6. クラスYはライブラリCに入っているそうなので、ライブラリCをダウンロード
  7. プログラム再実行
  8. 以下繰り返し

gemとbundler

gemでコンピュータにライブラリをインストールできます。 インストールされたライブラリはコンピュータ内に存在するすべてのプログラムから利用することができます。 gemはPHPPEARにあたります。

しかし、1つ問題があります。1つのコンピュータで使用できるライブラリのバージョンが1つに限られてしまいます。 例えば、アプリAではライブラリXのバージョン1.3.4を使用しているのにアプリBではバージョン2.8.1が必要という場合にどちらかのバージョンしか使えないという問題に出くわします。 新しい方のバージョンに合わせられればよいのですが、バージョンをあげることで挙動が変わっている場合もあるので、そう簡単にあげられない場合もあります。すでにサービス開始しているアプリの場合は特に。

そこで、アプリ(プロジェクト、プロダクトと呼んだりもする)ごとにどのライブラリのどのバージョンを指定できるかを管理する必要が出てきました。これがbundlerです。 bundlerはphpのComposer, mavendependency管理に相当します。

bundlerのインストールと初期設定

gemコマンドでbundlerをインストールする

下記コマンドを入力します。"1 gem installed" という文字が出てくれば成功です。

$ gem install bundler
Fetching: bundler-1.12.5.gem (100%)
Successfully installed bundler-1.12.5
Parsing documentation for bundler-1.12.5
Installing ri documentation for bundler-1.12.5
Done installing documentation for bundler after 9 seconds
1 gem installed

# コマンドの確認
$ which bundler
/Users/user/.rbenv/shims/bundler

# gemの情報管理場所
$ ls -la ~/.gem
total 0
drwxr-xr-x  3 xxxx  xxxxx  102 May 26 08:42 specs

bundlerの初期設定

# rubyプロジェクトフォルダを作成して移動
$ mkdir -p ~/Ruby/sample01
$ cd       ~/Ruby/sample01

# bundler初期設定
$ bundle init
Writing new Gemfile to /Users/user/Ruby/sample01/Gemfile

ファイルが作成されたので中身を確認してみます

$ cat ~/Ruby/sample01/Gemfile
# frozen_string_literal: true
# A sample Gemfile
source "https://rubygems.org"

# gem "rails"

bundlerでrdefsのインストール

"パーフェクトRuby on Rails"のサンプル通り、試しにrdefsをインストールします

$ cd           ~/Ruby/sample01

# Gemfileにgem rdefsを追記
$ echo 'gem "rdefs"' >> Gemfile
$ cat ~/Ruby/sample01/Gemfile
# frozen_string_literal: true
# A sample Gemfile
source "https://rubygems.org"

# gem "rails"
gem "rdefs"

# Gemfileに書かれているパッケージをインストール
$ bundle install
Fetching gem metadata from https://rubygems.org/
Fetching version metadata from https://rubygems.org/
Resolving dependencies...
Installing rdefs 0.0.2
Using bundler 1.12.5
Bundle complete! 1 Gemfile dependency, 2 gems now installed.
Use `bundle show [gemname]` to see where a bundled gem is installed.

# Gemfile.lockの確認
$ cat Gemfile.lock
GEM
  remote: https://rubygems.org/
  specs:
    rdefs (0.0.2)

PLATFORMS
  ruby

DEPENDENCIES
  rdefs

BUNDLED WITH
   1.12.5

# bundlerの管理情報
$ ls -l ~/.bundle
drwxr-xr-x  3 xxxx  xxxxx  102 May 26 22:35 cache

bundlerでrdefsの実行

まずは適当なrubyスクリプトを作成します

$ cd ~/Ruby/sample01
$ vi  sample.rb
$ cat sample.rb
class Sample
  def hello
    puts 'hello'
  end
end

rdefsのターゲットに作成したスクリプトを指定します

$ bundle exec rdefs sample.rb
class Sample
  def hello

環境

  • OS : Mac OS X バージョン 10.8.4
  • Ruby バージョン 2.3.1

参考文献

パーフェクトRuby on Rails

パーフェクトRuby on Rails
著者:すがわらまさのり
価格:3,110円(税込、送料込)
楽天ブックスで詳細を見る