Gemfile で以下の表記(~>)をよく見かけます。
gem "cucumber", "~>0.8.5"
gem "rspec", "~>1.3.0"
記号 (>=) は単に「以上」または「等しい」ということは知っていますが、(~>) 表記はどういう意味ですか? どちらも同じですか、それとも大きな違いがありますか?
これは悲観的なバージョン制約です。RubyGems は、提供されたバージョンの最後の桁をインクリメントし、最大バージョンに達するまでそれを使用します。So~>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"
を示します。上限はありません。
@millisami次のような悲観的制約を使用して、gemspecで依存関係を追加することもできます。
gem.add_runtime_dependency "thor", "~> 0.18.1"
gem の開発についてよく知らない場合、または始めたばかりの場合は、次の資料を参考にしてください。