
2025年12月25日、Rubyのメジャーバージョンアップ版「Ruby 4.0.0」が公開されました(ruby-lang.org)。
Ruby 4.0.0では、言語仕様・並列処理・JIT・標準ライブラリ・内部実装などさまざまな面で新機能の追加や改良が行われています。
この記事では、公式アナウンスをもとに、開発者目線で押さえるべきポイントを整理します。
Ruby Box ― 定義を“隔離”できる新機能
Ruby 4.0.0では、クラス定義やモンキーパッチ、グローバル変数などを分離・格納することができる実験的機能「Ruby Box」が導入されました。
テスト用のモンキーパッチを安全に閉じ込めることができるほか、WebアプリケーションをBox内で実行することで、Blue-Green デプロイをプロセス内で実現することもできます。依存関係更新時の並列検証や、「パッケージ API」基盤として役立てることもできます。
Ruby Boxの詳細はこちらで確認可能です。
ZJIT ― 次世代 JIT コンパイラが登場
YJIT に続く新しい JIT、ZJIT が実験的に導入されました。Rust 1.85.0以降が必要で、–zjit を指定することで有効化できます。より大きなコンパイル単位を扱えることができ、外部コントリビューションを受け入れやすい設計となっています。
現状ではインタプリタより速いものの、YJITほどではない状態で、本番利用はまだ非推奨です。Ruby 4.1での本格化が期待されます。
Ractor が大幅強化 ― 並列処理が実用レベルへ
Ruby 3.0 で実験的に導入された Ractor が、4.0 で大きく改善しています。
- 新しい通信機構 Ractor::Port の追加
- Ractor.shareable_proc により Proc の共有が容易に
- グローバルロック競合の削減
- CPU キャッシュ衝突の低減
- 多数のデッドロック・競合バグを修正
その他多数の改良
その他言語使用の変更が行われています。
-
*nilがnil.to_aを呼ばなくなった -
行頭の
&&/||/and/orが行継続として扱われる -
Array#rfindやArray#findの追加 -
Enumerator.produceがsize:を受け取れるように -
ErrorHighlightが caller/callee 両方を表示
またbundled gem / default gem の入れ替えや更新が大量に行われています。
-
PathnameとSetがコアクラスへ昇格 -
CGIは default gem から除外(escape 系のみ残る) -
RubyGems / Bundler が Version 4 に
-
多数の gem が最新化
GC、オブジェクト管理、JITなど内部実装も刷新されています。
-
Class#newが高速化 -
GC のヒープ成長戦略が改善
-
“Generic ivar” の導入でインスタンス変数アクセスが高速化
-
Ractor 環境下での GC/TracePoint の問題を修正
-
YJIT の統計情報が整理され、
invalidate_everythingが追加
Ruby 4.0.0のソースコードはruby-lang.orgのダウンロードページで公開されています。
