#bundle install と bundle update の違い
この2つについて理解する前に必要な事前知識、Gemfile、Gemfile.lock、そしてBundlerとは何か?について書いていこうと思います。
##Bundlerとは?
gemを管理するgem。
Bundlerのおかげでbundle install
とbundle update
を使うことができる。
##Gemfileとは?
gemをインストールするための「設計図」のようなイメージ。
##Gemfile.lockとは?
実際にgemをインストールした後の「結果図」のようなイメージ。
gem同士が関連しあっていることが多いため、Gemfileに書いてあるgemの他にも必要なgemが生じる。
その場合、Bundlerが自動で必要なgemをインストールし、Gemfile.lockに記述してくれる。
##なぜGemfile.lockが必要なのか?
Gemfileは設計図。インストールするgemしか記述されていない。
また、gemに関するgemも記述されてなく、本番環境と開発環境でインストールされるgemのバージョンも統一することができない。
しかし、Gemfile.lockを使うことで、どの環境でも同じgem、gemのバージョンを使用できるようになる。
##bundle install と bundle update について
では、事前知識を得ることができたので、本題に移る。
###bundle install
Gemfile.lockをもとにgemをインストールする。
この時、Gemfile.lockに記述されていない且つ、Gemfileに記述されているgemがある場合、そのgemとそのgemに関連するgemをインストール後、Gemfile.lockをインストールする。
###bundle update
Gemfileをもとにgemをインストールする。
その後、Gemfile.lockを更新する。
##2つのコマンドの使い分けについて
bundle install
→ 新しい環境や、Gemfileに新しくgemを記述した時に使用。
bundle update
→ gemのバージョンを更新する時に使用。(bundle install ではGemfile.lockにあるgemについては更新しないため)
##まとめ
・bundle install
はGemfile.lockを参照してgemをインストールする。また、
Gemfile.lockが存在しない場合、Gemfileをもとにgemをインストールした後、Gemfile.lockを作成する。
・bundle update
はGemfile.lockを無視し、Gemfileをもとにgemをインストール後、Gemfile.lockを更新する。
・Gemfile.lockを無視するため、bundle install
とは異なり、gem同士の依存関係(バージョン等)が刷新される。
なるほど。基本的に実開発中はbundle installを使うことが多そうだな。
bundle updateを使う時は慎重に使おう。