「Ruby 4.0.0」リリース、次世代JITコンパイラや実験的機能「Ruby Box」を導入Ractorも大幅改善

Ruby開発チームは、プログラミング言語Rubyの最新メジャーバージョンとなる「Ruby 4.0.0」を公開した。実験的機能「Ruby Box」や次世代JITコンパイラ「ZJIT」の導入、並列処理機構「Ractor」の改善など、多数の機能追加が行われている。

» 2026年01月26日 13時00分 公開
[@IT]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

 プログラミング言語「Ruby」の開発コミュニティーは2025年12月25日、最新メジャーバージョンとなる「Ruby 4.0.0」を公開した。実験的機能「Ruby Box」や次世代JIT(just-in-time)コンパイラ「ZJIT」の導入、並列処理機構「Ractor」の改善など、実行環境の分離やパフォーマンス向上を目指したさまざまな改善が含まれている。

定義の分離・隔離を提供する実験的機能「Ruby Box」

 Ruby Boxはクラスなどの定義の分離や隔離のための機能を提供する実験的機能だ。環境変数として「RUBY_BOX=1」を指定することで有効化でき、クラス名は「Ruby::Box」となる。

 Boxの中で読み込まれた定義はそのBox内に閉じた状態となる。隔離できる定義は以下の通り。

  • 既存クラスへのモンキーパッチ
  • グローバル変数やクラス変数の操作
  • クラスやモジュールの定義
  • .rbファイルや拡張ライブラリとして実装されたライブラリ類

 Ruby Boxの主要なユースケースとしては、以下の内容が想定されている。

  • テストのために何かの挙動を上書きするようなモンキーパッチを必要とするテストケースをBox内に閉じて実行すること
  • WebアプリケーションをBox内で実行することで、Blue-Greenデプロイメントをプロセス内で、アプリケーションサーバ上で実行すること
  • WebアプリケーションをBox内で実行することで、依存関係の更新時などに、一定期間並列で動かしてRubyコードを用いてレスポンスなどを検証すること
  • (未設計の)パッケージAPI(アプリケーションプログラミングインタフェース)のような新しい高レベルAPIを作るための低レベルAPIとしての機能を提供すること

次世代JITコンパイラ「ZJIT」の導入

 ZJITは「YJIT」の次世代として開発された新しいJITコンパイラだ。ZJITサポート付きでRubyをビルドするには「Rust 1.85.0」以降が必要で、オプション「--zjit」を指定すると有効になる。

 新しいコンパイラを開発した背景には、パフォーマンスの上限を引き上げつつ、より一般的な設計であるメソッドコンパイラにすることで、外部からの貢献を促進したいという狙いがある。具体的には、より大きなコンパイル単位サイズとSSA IR(代入を1回に制限したコンパイラ向け中間表現)が導入された。

 現時点のZJITは通常のRubyインタープリタより高速だが、まだYJITほどの速度には達していない。開発チームは「Ruby 4.1」での性能向上に意欲を示しており、現時点では本番環境へのデプロイは控えるよう案内している。

「Ractor」の大幅な改善

 Rubyで簡単に並列処理を行うための「Ractor」に多くの改善が行われた。同期機構として「Ractor::Port」クラスが追加され、メッセージの送受信に関する問題が解決された。「Ractor.shareable_proc」の導入により、ProcをRactor間で共有しやすくなっている。

Ractor::Portを用いた同期メッセージ送受信のコード例(提供:ruby-lang.org)

 性能面では、データ構造の改善によりグローバルロックに対する競合が大幅に減少し、並列処理性能が向上した。Ractor間で共有するデータを減らすことで、並列実行時のCPUキャッシュの衝突も軽減されている。

 RactorはRuby 3.0で実験的機能として導入されたが、開発チームは2026年ごろには実験的ステータスを外したい考えだ。

言語仕様の変更

 言語仕様については、以下の変更が行われた。

  • nilが「nil.to_a」を呼ばなくなった
    • nilが「nil.to_hash」を呼ばない挙動と整合
  • 行頭の論理二項演算子(||、&&、and、or)が、ドット記法のように前の行を継続するように変更
    • 「if condition1 && condition2」のような記述において、行をまたいで「&& condition2」と書くことが可能

コアクラスの主な更新

 主要なクラスの更新は以下の通り。

Array

 「array.reverse_each.find」より効率的な代替として「Array#rfind」を追加した。「Enumerable#find」をより効率的に実行する「Array#find」も追加されている。

Binding

 「Binding#local_variables」などのメソッドが番号付きパラメーターを含めなくなった。番号付きパラメーターおよび「it」パラメーターにアクセスするための「Binding#implicit_parameters」などが追加されている。

Enumerator

 「Enumerator.produce」がオプションのキーワード引数「size」を受け付けるようになった。サイズには整数、Float::INFINITY、ラムダなどの呼び出し可能オブジェクト、または不明を示すnilを指定できる。

Enumerator.produceにおけるsizeキーワード引数の使用例(提供:ruby-lang.org)

ErrorHighlight

 ArgumentErrorが発生した際に、メソッド呼び出し側(caller)とメソッド定義側(callee)の両方のコードスニペットを表示するようになった。

FiberおよびFiber::Scheduler

 「Fiber#raise(cause:)」引数をサポートした。スケジューラ関連では、指定した例外でファイバーを中断する「Fiber::Scheduler#fiber_interrupt」や、シグナル例外が無効なときでも処理を続行できる「Fiber::Scheduler#yield」などが追加された。

Kernel

 「Kernel#inspect」は「#instance_variables_to_inspect」メソッドの有無を確認し、表示するインスタンス変数を制御できる。パイプ(|)で始まる「Kernel#open」によるプロセス生成という非推奨挙動が削除された。

instance_variables_to_inspectを用いたinspect表示の制御例(提供:ruby-lang.org)

PathnameおよびSet

 「Pathname」はdefault gemからコアクラスに昇格した。「Set」も自動ロードされるstdlibクラスからコアクラスとなり、C APIも追加されている。

互換性に関する注意点

 Ractor::Portの追加に伴い、Ractorから「Ractor.yield」や「Ractor#take」などのメソッドが削除された。「ObjectSpace._id2ref」が非推奨となり、「Process::Status#&」と「Process::Status#>>」が削除されている。

 バックトレースの表示も変更された。internalフレームが表示されなくなり、C実装メソッドもRubyソースファイル上にあるかのように表示される。

 標準ライブラリ(stdlib)の互換性については、CGIライブラリがdefault gemから除外され、現在は「cgi/escape」のみを提供する。Net::HTTPでは、ボディーを持つリクエストにおいてContent-Typeヘッダが未設定の場合に、デフォルト値を自動設定する挙動が削除された。

実装の改善とパフォーマンス向上

 「Class#new」が全般的に高速化され、特にキーワード引数を渡す場合に効果を発揮する。GC(ガベージコレクション)関連では、サイズプールの異なるヒープを独立して成長させることでメモリ使用量を削減し、大きなオブジェクトページでのスイープも高速化された。

 Ractorの安定化に向けた改善も進んでいる。凍結文字列とシンボルテーブルにロックフリーのハッシュセットを使用する他、メソッドキャッシュの参照やインスタンス変数アクセスでのロック回避が行われた。スレッドと併用した際のデッドロック問題や、Ractor内での「require」「autoload」の問題などが修正されている。

 JITについては、「RJIT」が削除された。今後はサードパーティーJIT APIの実装として「ruby/rjit」リポジトリに移行される。

 Ruby 3.4.0と比較して、4.0.0では3889ファイルが変更され、23万769行が追加、29万7003行が削除された。

Copyright © ITmedia, Inc. All Rights Reserved.

アイティメディアからのお知らせ

スポンサーからのお知らせPR

注目のテーマ

Microsoft & Windows最前線2026
人に頼れない今こそ、本音で語るセキュリティ「モダナイズ」
4AI by @IT - AIを作り、動かし、守り、生かす
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。