1. ホーム
  2. ruby-on-rails

[解決済み] Gemfileで正確なバージョンを指定する必要がありますか?

2023-07-25 09:13:06

質問

rubygems.org では、多くの gems が正確なバージョンではなく、メジャーバージョンで指定することを推奨していることに気づきました。例えば...

haml-rails gem ...

gem "haml-rails", "~> 0.3.4"  # "$ bundle install" will acquire the 
                              # latest version before 1.0.

しかし バンドラーのドキュメント を見ると、このように正確なバージョンを突き止めた方が良さそうな気がしました...。

gem "haml-rails", "0.3.4"

これであなたのhaml-rails gemと、その依存関係はすべて前方に流れないようになりました。数週間後、別のマシンでこのプロジェクトをチェックアウトして $ bundle install を実行すると、あなたが指定したすべてのものが正確に同じバージョンになっているはずです。

私はポイントリリースがものを壊すのを見たことがありますし、Bundlerの全体的なアイデアの一部は、" Bundle.lock というものだと思っていました。

でもrubygems.orgでは"~>"をよく使うので、もしかしたら何か見落としているのでしょうか?

Bundlerとgem管理を理解する上で、どんな説明でも非常に役に立ちます。

どのように解決するのですか?

これは、Gemfile.lock ファイルの目的である、実行中の bundle install を実行すると、そこに記載されている依存関係を使用してインストールするだけで、Gemfileを再解決することはありません。 依存関係を更新したり、gemのバージョンを更新したりするためには、明示的に bundle update を実行する必要があり、それによって Gemfile.lock ファイルが更新されます。

もしGemfile.lockがなかったら、あなたが言うように依存関係やgemのバージョンが変わる可能性があるので、コードを本番環境にデプロイすることは大きな問題になるでしょう。

要するに、悲観的なバージョン制約演算子 ( ~> ) を使うのは一般的に安全でしょう。 を実行した後は、必ずテストを再実行するようにしてください。 bundle update を実行した後にテストを再実行し、何も壊れていないことを確認します。

があるので いい記事 Yehuda KatzによるGemfile.lockについてのより詳しい情報があります。