動かざることバグの如し

近づきたいよ 君の理想に

Rubyで複数のバージョン(version number)をソートしたい

かなりニッチなニーズかもしれないけどメモ

やりたいこと

例えば以下のようなバージョンの配列があったとして

versions = ["1.1", "2.0", "1.1.4", "1.6", "2.4.1"]

これを古→新順にソートしたいとする

解決策1 ライブラリを使う

探したらあった なんとGithub

irb(main):002:0> versions = ["1.1", "2.0", "1.1.4", "1.6", "2.4.1"]
=> ["1.1", "2.0", "1.1.4", "1.6", "2.4.1"]
irb(main):003:0> VersionSorter.sort(versions)
=> ["1.1", "1.1.4", "1.6", "2.0", "2.4.1"]

ちゃんとソートできている

解決策2 Gem::Versionを使う

どういうこっちゃって話だけど見たほうが早い

irb(main):004:0> versions = ["1.1", "2.0", "1.1.4", "1.6", "2.4.1"]
=> ["1.1", "2.0", "1.1.4", "1.6", "2.4.1"]
irb(main):005:0> versions.sort_by { |v| Gem::Version.new(v) }
=> ["1.1", "1.1.4", "1.6", "2.0", "2.4.1"]

このGemクラスは特にインストールとかしなくても使えるっぽい。

docs.ruby-lang.org

もともとGihtubもRubygemのホスティングしてたっぽいし中身は実は同じなのかもしれない。。。。