脳汁portal

アメリカ在住(だった)新米エンジニアがその日学んだIT知識を書き綴るブログ

Gemfile/Gemfile.lock/gemspec/Rakefileそれぞれの違い・役割

f:id:portaltan:20151130171550j:plain

Gemfile

  • gemの取得先を記述する
  • 通常はsourceとgemspecの2行、もしくはsourceの1行だけでよい
source "https://rubygems.org"

gemspec

gemspec

  • 実際の情報を記述するファイル
Gem::Specification.new do |s|
  s.authors = []
  s.homepage = ''
・
・
・
  • gemの依存関係をやgemの情報を記述するファイル
s.add_dependency '*****'
s.add_development_dependency '***'

Rakefile

  • makeのRuby版("R"ake)
  • bundlerが上記のgemファイル群を利用して環境構築するためのファイル
  • bundle install するとgroupに関係なく全てのgemがinstallされる
    • 防ぎたいときはwithoutオプションを使用する
    • withoutオプションを使うと.bundle/configに設定が保存され、以降withoutをつけなくても設定が引き継がれるので注意

(Gemfile.lock)

  • bundleで自動生成される
  • installしたgemのversionや取得先が記録される
  • このファイルがある状態でbundle installを行うと、厳密に同じversionをinstallする
  • ペアプロ等でまったく同じ環境で作業したいときなど便利
  • 公開する際にリポジトリに含めるか含めないかはケースバイケースで意見が分かれる