Ruby 4.0 で,Ruby というモジュールが導入された。
ここにはいくつかの定数が定義されている。
これらがどんな名前と値を持っているのか,プレビュー版(4.0.0-preview3)で見てみた。
const_names = Ruby.constants
max_length = const_names.map{ _1.length }.max
format = "%#{ max_length }s %s"
const_names.each do |name|
puts format % [name, Ruby.const_get(name).inspect]
end
結果:
PATCHLEVEL -1
Box Ruby::Box
REVISION "cfa3e7cf75531a8c90b39bbd9b977f30315b12e7"
COPYRIGHT "ruby - Copyright (C) 1993-2025 Yukihiro Matsumoto"
ENGINE "ruby"
ENGINE_VERSION "4.0.0"
VERSION "4.0.0"
RELEASE_DATE "2025-12-18"
DESCRIPTION "ruby 4.0.0preview3 (2025-12-18 master cfa3e7cf75) +PRISM [arm64-darwin25]"
PLATFORM "arm64-darwin25"
Ruby のバージョンを得るのに,Ruby::VERSION という定数が使えるのか。
しかしこれの値はただの文字列で,従来からある RUBY_VERSION と同じ値だ(オブジェクトとしても同じ):
p Ruby::VERSION.equal?(RUBY_VERSION)
# => true
gem のバージョンを表すのには Gem::Version というクラスがあるが,Ruby のバージョンにはそういう専用のクラスが無いのだ(4.0 で導入されるのかと思ったけど,そんなことはなかった)。
昔からの素朴な疑問だけど,文字列でバージョンを表すと,2 桁になったとき大小比較で困るのでは?
p "4.0.2" < "4.0.10"
# => false
追記
Ruby 4.0.0 がリリースされたので改めてやってみた:
PATCHLEVEL 0
Box Ruby::Box
REVISION "553f1675f3a9cece340b90f374a4245dccac2272"
COPYRIGHT "ruby - Copyright (C) 1993-2025 Yukihiro Matsumoto"
ENGINE "ruby"
ENGINE_VERSION "4.0.0"
VERSION "4.0.0"
RELEASE_DATE "2025-12-25"
DESCRIPTION "ruby 4.0.0 (2025-12-25 revision 553f1675f3) +PRISM [arm64-darwin25]"
PLATFORM "arm64-darwin25"
REVISION や RELEASE_DATE が変更になったのは当然。
DESCRIPTION は,preview3 が取れたのは当然として,( ) 内の日付が変わっただけでなく,master cfa3e7cf75 が revision 553f1675f3 になった。master は何を表していたんだろう?
興味深いのは PATCHLEVEL で,4.0.0 では 0 だがプレビュー版では -1 だった。なるほど。