LoginSignup
3

More than 5 years have passed since last update.

bundle install したら、指定してないgemまでinstallされてる気がする人へ

Posted at

はじめに

bundlerで、bundle installすると、Gemfileで指定された、gemをインストールしますよね。

Gemfile(5)に指定されたGemをインストールします。

もし、Gemfile.lockが存在し、Gemfile(5)が更新されていないのであれば、 Bunlderはリモートの供給元からGemを取得しますが、依存性の解決を行うのでは無く、 Gemfile.lockに指定されている依存性を使用します。
引用元: bundle install - RUBYSTUDIO - http://ruby.studio-kingdom.com/bundler/bundle_install

でも、実際bundle installしてみると、なんかおかしい気がしたんです。
Gemfileに定義してないgemがたくさんインストールされているような気が・・・。

Gemfile・インストールされたgem

Gemfile
source 'https://rubygems.org'


# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '4.1.12'
# Use postgresql as the database for Active Record
gem 'pg'
# Use SCSS for stylesheets
gem 'sass-rails', '~> 4.0.3'
# Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 1.3.0'
# Use CoffeeScript for .js.coffee assets and views
gem 'coffee-rails', '~> 4.0.0'
# See https://github.com/rails/execjs#readme for more supported runtimes
# gem 'therubyracer',  platforms: :ruby

# Use jquery as the JavaScript library
gem 'jquery-rails'
# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks
gem 'turbolinks'
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem 'jbuilder', '~> 2.0'
# bundle exec rake doc:rails generates the API under doc/api.
gem 'sdoc', '~> 0.4.0',          group: :doc

# Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
gem 'spring',        group: :development

gem 'rails_12factor', group: :production

gem 'slack-api'

# Use ActiveModel has_secure_password
# gem 'bcrypt', '~> 3.1.7'

# Use unicorn as the app server
# gem 'unicorn'

# Use Capistrano for deployment
# gem 'capistrano-rails', group: :development

# Use debugger
# gem 'debugger', group: [:development, :test]

インストールされたGem
  * actionmailer (4.1.12)
  * actionpack (4.1.12)
  * actionview (4.1.12)
  * activemodel (4.1.12)
  * activerecord (4.1.12)
  * activesupport (4.1.12)
  * arel (5.0.1.20140414130214)
  * builder (3.2.2)
  * bundler (1.11.2)
  * coffee-rails (4.0.1)
  * coffee-script (2.4.1)
  * coffee-script-source (1.10.0)
  * erubis (2.7.0)
  * eventmachine (1.0.9.1)
  * execjs (2.6.0)
  * faraday (0.9.1)
  * faraday_middleware (0.10.0)
  * faye-websocket (0.9.2)
  * hike (1.2.3)
  * i18n (0.7.0)
  * jbuilder (2.4.0)
  * jquery-rails (3.1.4)
  * json (1.8.3)
  * mail (2.6.3)
  * mime-types (2.99)
  * minitest (5.8.3)
  * multi_json (1.11.2)
  * multipart-post (2.0.0)
  * pg (0.18.4)
  * rack (1.5.5)
  * rack-test (0.6.3)
  * rails (4.1.12)
  * rails_12factor (0.0.3)
  * rails_serve_static_assets (0.0.4)
  * rails_stdout_logging (0.0.4)
  * railties (4.1.12)
  * rake (10.4.2)
  * rdoc (4.2.1)
  * sass (3.2.19)
  * sass-rails (4.0.5)
  * sdoc (0.4.1)
  * slack-api (1.2.1)
  * spring (1.6.1)
  * sprockets (2.12.4)
  * sprockets-rails (2.3.3)
  * thor (0.19.1)
  * thread_safe (0.3.5)
  * tilt (1.4.1)
  * turbolinks (2.5.3)
  * tzinfo (1.2.2)
  * uglifier (2.7.2)
  * websocket-driver (0.6.2)
  * websocket-extensions (0.1.2)

多い・・・。

なぜこうなったか

Bundlerでは、インストールするgemが依存しているgemを、自動でインストールしてくれるから。

Gemfileを元にGemパッケージがインストールされます。Gemfile ファイルに書かれたGemパッケージと、それらのGemパッケージが依存する(必要とする)他のGemパッケージも自動的にインストールされます。
引用元: Bundlerを使ったGemパッケージの管理 - RubyLife -http://www.rubylife.jp/rails/ini/index2.html

有名なサイトにも書いてありました。(見落としていた・・・。)

各gemが依存するgemの確認

[gemをインストールしたディレクトリ]/ruby/[rubyのバージョン]/specifications/[gem名].gemspecの中身を読んでみると、書いてあります。

例えば、railsだったら、

rails-4.1.12.gemspec
    if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
      s.add_runtime_dependency(%q<activesupport>, ["= 4.1.12"])
      s.add_runtime_dependency(%q<actionpack>, ["= 4.1.12"])
      s.add_runtime_dependency(%q<actionview>, ["= 4.1.12"])
      s.add_runtime_dependency(%q<activemodel>, ["= 4.1.12"])
      s.add_runtime_dependency(%q<activerecord>, ["= 4.1.12"])
      s.add_runtime_dependency(%q<actionmailer>, ["= 4.1.12"])
      s.add_runtime_dependency(%q<railties>, ["= 4.1.12"])
      s.add_runtime_dependency(%q<bundler>, ["< 2.0", ">= 1.3.0"])
      s.add_runtime_dependency(%q<sprockets-rails>, ["~> 2.0"])
    else
      s.add_dependency(%q<activesupport>, ["= 4.1.12"])
      s.add_dependency(%q<actionpack>, ["= 4.1.12"])
      s.add_dependency(%q<actionview>, ["= 4.1.12"])
      s.add_dependency(%q<activemodel>, ["= 4.1.12"])
      s.add_dependency(%q<activerecord>, ["= 4.1.12"])
      s.add_dependency(%q<actionmailer>, ["= 4.1.12"])
      s.add_dependency(%q<railties>, ["= 4.1.12"])
      s.add_dependency(%q<bundler>, ["< 2.0", ">= 1.3.0"])
      s.add_dependency(%q<sprockets-rails>, ["~> 2.0"])
    end
    else
      s.add_dependency(%q<activesupport>, ["= 4.1.12"])
      s.add_dependency(%q<actionpack>, ["= 4.1.12"])
      s.add_dependency(%q<actionview>, ["= 4.1.12"])
      s.add_dependency(%q<activemodel>, ["= 4.1.12"])
      s.add_dependency(%q<activerecord>, ["= 4.1.12"])
      s.add_dependency(%q<actionmailer>, ["= 4.1.12"])
      s.add_dependency(%q<railties>, ["= 4.1.12"])
      s.add_dependency(%q<bundler>, ["< 2.0", ">= 1.3.0"])
      s.add_dependency(%q<sprockets-rails>, ["~> 2.0"])
    end

と、こんな感じで、依存するgemが書いてあります。
Gemfileで指定していなかった、activesupportなどが、インストールされていた理由もわかりました。

僕は、これに気づくのに結構時間をかけてしまったので、共有しておきます、

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
3