0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

もうすぐ出る Ruby の新バージョンが 4.0 てマ?

Last updated at Posted at 2025-12-16

例年通りならあと 10 日もせずに新しいバージョンの Ruby がリリースされる。

Ruby 3.4 系の次だから当然 Ruby 3.5.0 だろうと思ったら,どうやら 4.0.0 になるらしい。

プレビュー版として,2025 年 4 月に 3.5.0-preview1 がリリースされていた が,その次のプレビュー版として 11 月に 4.0.0-preview2 がリリースされた ので気づいた。

NEWS を見ても,なにかスゴい目玉機能とか,大きな非互換性があるようには見えない。

なぜ 4 なのだろう?
Ruby のバージョンの付け方はよく分からない。

大昔の話になるけど,Ruby 1.8 系から 1.9 系への変化は非常に大きくて,その非互換性ゆえに,たぶん世界中で「ぎゃ!」となった。
とくに String が根本的に変わった1。この変化自体は望ましいもので,このときの「ぎゃ!」を乗り越えたからこそ今日の Ruby があると思っている。
いずれにしても,このとき多くの人が「新バージョンは 2.0 だろう」と思ったが,1.9 としてリリースされた。

4 にするのはいいんだけど,リリースの前月になって突然決めて2,しかも ruby-lang.org でのアナウンスもとくに無い,というのはどうかなあ。

Gemfile や gemspec で Ruby バージョンを ~> 3.2 みたいな感じで縛ってたら死ぬよね。

4.0 にすることが最初に発表されたのがいつどこなのか分からないけど,RubyWorld Conference 2025 の二日目(2025/11/7)の Matz 基調講演で出ていたようだ。
講演資料 を見ると,

Not for new features

とあり,続けて

But for celebrate 30 years of
Ruby community

などとあった。

えっ……バージョンがいきなり飛んだのは新機能のためのじゃなくて Ruby 30 周年を記念してってこと?!

Ruby のコミッターの方々は Qiita には記事を(あまり?)書かれないようなので,Qiita しか見てない(私のような)人には,Ruby の新情報は届きにくい。
Ruby が 4.0 になる話も,クリスマスにリリースされて初めて気づく人,けっこういるんじゃないかなあ。

追記

以下の資料によれば,Ruby 4.0 でネームスペースが導入されるという。

ネームスペース(名前空間)というと,モジュールを使うやり方がすぐに浮かぶが,新しい仕組みは全く違い,Ruby::Box というクラスを使うらしい。

これを使うと,なんと異なるバージョンの gem を同時に使うことすらできるという。
けっこう大きな話なのでは?

資料の日付からすると確度の高い話のように思える。
しかし,上述の NEWS や(プレビュー版の)リリースノートには一切書かれていない。
どうなってんの?

とりあえず 4.0.0-preview2 をインストールしてみたら,Ruby::Box というクラスは存在していた。
あるんだ……。
(試しに使おうとしたら segmentation fault で死んだけど)

  1. Ruby 1.8 系までは,String は文字列というよりバイト列だったが,Ruby 1.9 からは自らがエンコーディング情報を持ち,文字通り文字列として振る舞うようになった。異なるエンコーディングを持つ文字列を同時に扱うのも容易になった。

  2. いや 11 月に突然決めたのかどうかは知らんけど。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?