Ruby
Rails
Sinatra
Heroku
rubygems

Bundlerを使ったRubyGemsの依存関係管理

More than 5 years have passed since last update.


Bundlerとは

BundlerはRuby on Railsで標準採用されている、RubyGemsの依存関係管理ソフトウェアです。

SinatraやピュアなRuby(NonFramework)など、Ruby系であれば使うことが出来ます。

Ruby on Rails専用なわけではありません。


Bundlerのインストール


Bash

gem install bundler


これをターミナルで実行すればOKです。

railsなどを既に入れている人はたぶん入ってるかとは思います。

2度実行しても別段害はないです。


Bundlerの使い方

まだプロジェクトのディレクトリがない場合はディレクトリを作成しましょう


Bash

mkdir myapp

cd myapp

Gemfileと言われるファイルを作成します。

このファイルに、使用するRubyのGemを記載します。


Bash

bundle init

vi Gemfile

bundle init はGemfileが存在しない場合は新しく作成してくれるbundlerのコマンドです。

Gemfileの中身です。

sourceはほぼ必ず書く事になると思うので、書いて下さい。

3行目以降は、使用するGemを書きます。

source 'https://rubygems.org'

gem 'sinatra'
gem 'sinatra-reloader'

sinatraを使うプロジェクトの場合は、

gem 'sinatra' を記載、使って下さい。

gem 'sinatra-reloader' はsinatraをオートリロードするgemです。rubyファイルを編集した際にその内容を自動適用してくれます。

そして、このコマンドを、このディレクトリ内(Gemfileがあるディレクトリ)で実行して下さい。


Bash

bundle install


Gemfileに記載したgemと、そのgemを使うために必要なgemがインストールされます。


Bash

bundle update


とすると、gemのバージョンなどを上げてくれます。

ただし、Gemfile内で


Bash

gem "sinatra", "~> 1.4.2"


といったように、gemのバージョンを指定していると、アップデートされず、そのバージョンのgemが使用されます。

Bundlerの使い方自体はこんなかんじです。


試しに Sinatra Frameworkを使ったアプリでBundlerを使ってみます

先ほどのフォルダにファイルを作成します。


Bash

touch myapp.rb

vi myapp.rb


myapp.rb

require 'sinatra'

require 'sinatra/reloader'

get '/hi' do
"Hello World!"
end


上記のファイル構造(myappディレクトリ)

myapp.rb

Gemfile

Gemfile.lock (隠しファイル。bundle installすると作成、更新されます)

http://localhost:4567/hi にアクセスすると、Hello World!と表示されると思います。

bundlerでsinatraがインストールされたおかげで、sinatraをrequire出来ているのです。


エラーになったら?

bundle install や アプリ起動時などにエラーになることがあります。

その場合はエラー文に従って下さい。

この2つはよく出ます。


  • 足りないgemがあるからインストールしてね


    • 足りないgemをgem installするか、Gemfileに追記してbundle installして下さい



  • 既に同じgemの古いバージョンが入ってるよ


    • この場合は古いgemをuninstallして下さい

    • gem uninstall 対象のgem名

    • どのバージョンを削除するか聞かれるので、全てを選択して、新しく再度bundle installやgem installするか、いらないバージョンを選択して下さい



installは出来てるけど、アプリケーション内でrequire氏忘れていることなどもちょくちょくあります。sinatra-reloaderもですが、gemの名前とrequireするものの名前が違うこともあります。正しいrequire名は、rubygemsなどから見られるgemの説明サイト(大抵の場合はGithubに飛ぶ)から確認して下さい。

一応、このコマンドで、gemがインストール済みかを調べる事ができます。


Bash

gem list | grep gemの名前



まとめ

Bundlerはとっても便利なので、ぜひ使いましょう!

gem installではなく、bundle installを使うようにしましょう。

補足: Herokuなどは、GemfileとGemfile.lockがないとデプロイ出来ないですし。