はじめに
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
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]
* 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だったら、
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
などが、インストールされていた理由もわかりました。
僕は、これに気づくのに結構時間をかけてしまったので、共有しておきます、