1. ホーム
  2. ruby

[解決済み] Gemfileでrubygemを指定するときの~>と>=の違いは何ですか?

2022-07-08 06:31:30

質問

Gemfileで以下の表記(~>)をよく見かけます。

gem "cucumber", "~>0.8.5"
gem "rspec", "~>1.3.0"

記号(>=)は単に大きいか等しいかだけですが、(~>)の表記はどういう意味でしょうか? どちらも同じなのでしょうか、それとも何か大きな違いがあるのでしょうか?

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

これは 悲観版制約 . RubyGems は提供されたバージョンの下一桁をインクリメントし、最大バージョンに達するまでそれを使用します。そのため ~>0.8.5 は意味的に同じです。

gem "cucumber", ">=0.8.5", "<0.9.0"

簡単に考えると、最後の桁が任意の値まで増加するのは構わないが、文字列中のその前の桁は指定した値より大きくすることはできないということです。したがって ~>0.8.5 の場合、3 桁目 (5) は 5 以上であればどのような値でも構いませんが、先頭の 0.8 は "0.8" でなければなりません。

たとえば、0.9 のバージョンでいくつかの破壊的な変更が実装されると考えているが、0.8.x リリース シリーズ全体が単なるバグフィックスであることを知っている場合、このようにすることができます。

しかし、単に ">=0.8.5" を使うと 任意の は 0.8.5 より遅い (または同じ) バージョンが許容されることを示します。上限はありません。