web-dev-qa-db-ja.com

Gemfileでrubygemを指定するときの〜>と> =の違いは何ですか?

Gemfileで次の表記法(〜>)をよく見ます。

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

記号(> =)がちょうど大きいか等しいことは知っていますが、(〜>)表記はどういう意味ですか?両方とも同じですか、それとも大きな違いがありますか?

112
Autodidact

それは 悲観的なバージョン制約 です。 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"は、any0.8.5以降(または同等)のバージョンが許容されることを示します。上限はありません。

157
eldarerathis

@millisami次のような悲観的な制約を使用して、gemspecに依存関係を追加することもできます。

gem.add_runtime_dependency "thor", "~> 0.18.1"

Gemの開発についてあまり知らない場合、または単に開発に取り掛かっている場合は、次の参考資料をご覧ください。

  1. 独自のRubyGemの作成方法、RubyGemに関連する標準的なプラクティス、および他の人がインストールできるようにアップロードする方法を説明するチュートリアル
  2. Bundlerを使用してゼロから宝石を作成する方法
2
strangeloops