Help us understand the problem. What is going on with this article?

Gem(あるいはRails)のバージョン比較方法

More than 3 years have passed since last update.

不幸にもGemのバージョンを比較して処理を分岐させなければならないことってありますよね?
Railsでバージョン取得をするなら、みなさんおそらく以下のどれかで取得していることと思います。

Rails4.2.6でやってみた場合
Rails.version #=> "4.2.6"

# https://github.com/rails/rails/blob/master/version.rb
Rails::VERSION::MAJOR #=> 4
Rails::VERSION::MINOR #=> 2
Rails::VERSION::TINY  #=> 6
Rails::VERSION::PRE   #=> nil ("beta2"とかがあるなら入る)
Rails::VERSION::STRING #=> "4.2.6"

メジャーバージョンの比較でいいなら Rails::VERSION::MAJOR >= 4 でいいですし、
マイナーバージョンまでなら Rails.version.to_f >= 4.1 てな書き方で十分です。

ただ、厳密にやる場合、ないしパッチバージョンまで見る場合はどうすればいいのかな? と思っていたら以下のようにすれば良いようです。

Gem::Version.new(Rails.version) >= Gem::Version.new("4.1.2")

また、RailsならRails.gem_versionでこのGem::Versionのオブジェクトを返してくれるので、以下の書き方ができます。

Rails.gem_version >= Gem::Version.new("4.1.2")

あまりやってるの見かけないですが、厳密にバージョン比較したい方・しなければいけない方はやってみてはいかがでしょうか?

repro
世界59か国6,500以上の導入実績を持つCE(カスタマーエンゲージメント)プラットフォーム「Repro(リプロ)」を提供
https://repro.io/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away