まずは改めて各ファイルの役割から。
Gemfile:必要となるgemを記述します。
Gemfile.lock:現在使用しているgemのバージョンおよび特定のgemを使うためにインストールする必要のあるgemの一覧が管理されます。
んで、bundle install
と bundle update
ですが、
bundle install:
Gemfile
に更新があれば、未インストールのgemがインストールされ、Gemfile.lock
が更新される。更新がなければGemfile.lock
に従ってgemの更新を行う。Gemfile.lock
が存在しない場合はGemfile
に従ってgemの更新を行い、Gemfile.lock
を作成する。
bundle update:Gemfile
に従ってgemの更新を行い、Gemfile.lock
を上書きする。
ということでした。PHPでcomposer
はバンドルをcomposer.json
に追加した際に、composer update
をするので、gem追加時にbundle install
をすることに慣れず、ちょっと戸惑いました。インストールしたgemは私の環境ではrbenv
というRubyのバージョンを簡単に変更できるサービスを利用しているので、/home/vagrant/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/
に保存されていました。
ユースケースとしては
- 新環境で開発スタート:bundle install
- 開発中に新しいgemを追加:bundle updateで常にバンドルを最新版に保つ
- デプロイ:bundle install
って感じがいいのかな、と思いました。開発環境だとできるだけbundle update
して、バンドルを最新版に保っておいてあげると仲間から喜ばれそうですね。くれぐれも本番環境でbundle update
だけはアウトです。これはcomposer
も一緒。