最初に
budlerについてコマンドやコマンド毎の動きがごちゃごちゃになってきたので一度整理のために記事を書こうと思います。
そもそもbundlerってなに?
bundlerはgemのパッケージ管理ツールである。
もうちょっと細かく
gemはRubyでつかうライブラリをgemという形式にしたもので、bundler(これもgemの一種)を使ってインストール、アンインストールできるようになる。「gem A」を使うのに「gem B」が必要な場合がある。これを依存関係という。bundlerはこの依存関係を考慮してgemをインストールしてくれる。
簡単に言うとbundlerがgem同士の関係を良くして使える状態にしてくれるということ。
gemfileとgemfile.lock
gemfileとは
gemfileは自分が使用したいgemの一覧を記述しておく場所です(バージョン指定もできる)。bundlerは基本的にこのファイルを参考にgemをインストールします。(設計図みたいな感じ)
gemfile.lock
gemfile.lockはgemfileを参考にbundlerがgem同士の依存関係を考慮した結果を記述してくれる。gemfile.lockがあることで実際にどんなgemがインストールされたのか、gemのバージョンが何なのかがわかるため、開発環境や本番環境、複数人での開発の際に環境を合わせることができます。
bundle installとbundle update
bundle install
・gemfileにgemが追加された場合
gemfileに追加されたgemとそのgemと依存関係にあるgemをインストールされ、gemfile.lockにそれらのgemが更新される。
・gemfileに変更が無い場合
gemfile.lockに従いgemがインストールされる。gemfileは参照されず、gemfile.lockは更新されない。
bundle update
gemfile.lock内のバージョンは無視して、gemfile内のgemのバージョンを依存関係を考慮しながら、指定したバージョンもしくは最新のバージョンをインストールする。そしてgemfile.lockに新しいバージョンが記述される。gemfile.lockの中身を新しくしてくれる。
性質の違いによる使い方
gemfile.lockに記述されているgemでbundle installしなおせば、他の環境でもgemのバージョンを揃えることができる。複数人との開発でも環境を共有できる・
参考URL
bundle installとbundle updateの違いについて
https://qiita.com/lasershow/items/1a048d03ddaaba98171e