Help us understand the problem. What is going on with this article?

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

sideci
コードレビュー支援サービス「SideCI」を運営
https://sideci.com/ja
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした