37
39

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2013-05-25

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がないとデプロイ出来ないですし。

37
39
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
37
39

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?