まずは改めて各ファイルの役割から。
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も一緒。