雰囲気で使っていたbundlerについて調べた
プロジェクトのバージョンアップ作業に伴い、bundleについて理解を深めるために公式ドキュメントを確認してみた。 bundler.io
Bundlerとは?
Bundlerは、必要なgemとバージョンを正確に追跡してインストールすることで、Rubyプロジェクトに一貫した環境を提供します。 Bundlerは依存性地獄からの出口であり、必要なgemが開発、ステージング、本番環境に存在することを保証します。 プロジェクトでの作業の開始は、bundle installと同じくらい簡単です。
Bundlerを使用する事で下記のようなメリットが生まれる。
- プロジェクトを始める際や新しいメンバーが参加する際、bundle install コマンドを実行することで、すぐに必要なgemをインストールできる。
- Gemfile.lockを生成し、インストールされたgemのバージョンをロックすることで、開発者全員が同じバージョンのgemを使用することが保証され、バージョンの不整合による問題を防ぐことができる。
bundle install
Gemfileで指定された gem をインストールする。
公式に下記の重要な記述があった。 Gemfile.lockとの関係性がしっかりと記載されていた。この辺り曖昧だったのでちゃんと理解しないと。
bundle install を初めて実行する場合 (Gemfile.lock が存在しない場合)は、 依存関係を解決して必要な gem をすべてインストールする。
Gemfile.lock が存在し、Gemfileを更新していない場合は、 Gemfile.lock で指定された依存関係を使用する。
Gemfile.lockが存在し、Gemfileを更新した場合は、 BundlerはGemfile.lockの依存関係を更新していないすべてのgemに使用するが、更新したgemの依存関係を再解決する。 つまり、変更のないgemはそのままで、更新されたgemだけが再解決されて新しいバージョンがインストールされる。
bundle update
Gemfile.lock内に記載されたgemのバージョンを無視して、指定されたgemを更新する。 (--allフラグが使用されている場合はすべてのgem) 一般的に、マシン間で全く同じgemとバージョンをインストールするにはbundle installを使う。
ただし、gemのバージョンを明示的に更新するにはbundle updateを使うべきとのこと。
bundle installとbundle updateの違い
整理すると、 bundle installはGemfile.lockに基づき依存関係をインストールする。Gemfileを更新していれば、更新されたgemだけが再解決されて新しいバージョンがインストールされる。 bundle updateは既存のGemfile.lockを更新して最新の状態にする。
bundle installはGemfileに記載された依存関係をインストールしたいときに、bundle updateは特定のgemをバージョンアップさせたいときに使う。
といことになると思う。
最近業務でよく使ったコマンドの整理
bundle info [GEM_NAME]
指定したgemのバージョンを表示する。
$ bundle info rails * rails (7.1.4) Summary: Full-stack web application framework. Homepage: https://rubyonrails.org...
bundle list
bundle内のgemの一覧を表示する。
$ bundle list Gems included by the bundle: * actioncable (7.1.4) * actionmailbox (7.1.4) * bigdecimal (3.1.8) * bindex (0.8.1) * bootsnap (1.18.4) ...
bundle version
Bundlerのバージョンを表示する。
$ bundle version Bundler version 2.5.19
bundle outdated
インストールされているgemの利用可能な最新のバージョンを表示する。 現バージョンと最新バージョンを表形式で見やすく表示してくれる。バージョンアップ作業をするときに必須のコマンド。
$ bundle outdated Fetching gem metadata from https://rubygems.org/........... Resolving dependencies... Gem Current Latest Requested Groups actioncable 7.1.4 8.0.1 actionmailbox 7.1.4 8.0.1 actionmailer 7.1.4 8.0.1 ...
bundleコマンドとgemfileとの関係性やinstallとupdateの違いが曖昧だったので調査して理解が深まった。
おわり。