Ruby 3.1.0のリリースで搭載された新機能と変更点を解説
thumb_ruby31_01
Ruby 3.1.0のリリースで搭載された新機能と変更点を解説
言語
アンドエンジニア編集部
2022.05.24
この記事でわかること
Rubyはオブジェクト指向プログラム言語で、パターンマッチングを効率的に行うことができます
Ruby 3.1.0ではYJITという新しいJITコンパイラが提供されます
Ruby 3.0と互換性が維持されており、Ruby 2.6の移行先としても最適です

Ruby 3.1.0のリリース

img_ruby310_01

2021年12月25日、Ruby 3.1.0がリリースされました。2013年以降毎年12月25日のクリスマスにメジャーバージョンアップのリリースが定番化されています。今回も無事にリリースとなり、Ruby 3.1.0の新機能と変更点をお届けしていきます。 【参考】:Ruby 3.1.0 リリース

そもそもRubyとは

Rubyとは、まつもとゆきひろ氏によって開発されたオブジェクト指向プログラム言語で、コンパイラとインタプリタがあります。正規表現をRegexpクラスとして定義し活用することで、複雑に発生する文字列のパターンマッチングを効率的に行うことができます。オブジェクト指向言語として全てのデータ型がオブジェクトとして扱われます。 【参考】:Rubyとは

Ruby初心者向けに概要・特徴・作れるもの・勉強方法を解説!
Rubyとは何か?Rubyの特徴やできることについて解説

Ruby 3.1.0の機能追加

早速ですが、Ruby 3.1.0の機能追加について概要をまとめておきます。

YJIT CRuby用プロセス内JITコンパイラ 公式サイトによるとrailsbenchでは最大22%、liquied-renderでは39%の高速化を達成していることから、パフォーマンスの高さが伺えます。実験的機能なため、デフォルトでは無効化されていますが、”--yjit”コマンドラインオプションを指定することで利用可能です。

debug.gem lib/debug.rbの置換で、完全に書き直されたデバッガです。debug.gemはデバッグ時の速度低下を抑制しており、リモートデバッグをサポートします。VSCodeとChromeブラウザと連携し、デバッグすることができます。マルチプロセス・マルチスレッドプログラムのデバッグに対応しており、利便性を高める改善が施されています。

error_highlight 組み込みgemであるerror_highlightにより、NameError発生時に該当位置が表示されます。デフォルトで有効となっており、コマンドラインオプションで”--disable-error_highlight”を指定することで無効化可能です。

IRBのオートコンプリートとドキュメント表示 IRBでTabとShift+Tabを使うと、オートコンプリート機能となる補完候補ダイアログが表示されます。

MJITのパフォーマンス改善 --jit-max-cacheのデフォルト値が100から10,000に変更され、従来1,000インストラクションでスキップされたJITコンパイラの処理が正しく扱われます。クラスイベント用TracePointが有効の時にJITコードが正しく処理されます。

標準ライブラリのアップデート default gemsのアップデートがされ、以下のバージョンが更新されました。  RubyGems 3.3.3、base64 0.1.1、benchmark 0.2.0、bigdecimal 3.1.1、bundler 2.3.3  cgi 0.3.1、csv 3.2.2、date 3.2.2、did_you_mean 1.6.1、digest 3.1.0、drb 2.1.0  erb 2.2.3、error_highlight 0.3.0、etc 1.3.0、fcntl 1.0.1、fiddle 1.1.0、fileutils 1.6.0  find 0.1.1、io-console 0.5.10、io-wait 0.2.1、ipaddr 1.2.3、irb 1.4.1、json 2.6.1  logger 1.5.0、net-http 0.2.0、net-protocol 0.1.2、nkf 0.1.1、open-uri 0.2.0  openssl 3.0.0、optparse 0.2.0、ostruct 0.5.2、pathname 0.2.0、pp 0.3.0  prettyprint 0.1.1、psych 4.0.3、racc 1.6.0、rdoc 6.4.0、readline 0.0.3、readline-ext 0.1.4  reline 0.3.0、resolv 0.2.1、rinda 0.1.1、ruby2_keywords 0.0.5、securerandom 0.1.1  set 1.0.2、stringio 3.0.1、strscan 3.0.1、tempfile 0.1.2、time 0.2.0、timeout 0.2.0  tmpdir 0.1.2、un 0.2.0、uri 0.11.0、yaml 0.2.0、zlib 2.1.1

bundled gemsのアップデートでは、以下のバージョンが更新されました。  minitest 5.15.0、power_assert 2.0.1、rake 13.0.6、test-unit 3.5.3、rexml 3.2.5  rbs 2.0.0、typeprof 0.21.1

さらに、以下のライブラリがbundled gemsとなっています。  net-ftp 0.1.3、net-imap 0.2.2、net-pop 0.1.1、net-smtp 0.3.1、matrix 0.4.2  prime 0.1.2、debug 1.4.0

その他の詳細は以下のリンクをご参照ください。 【参考】:NEWS for Ruby 3.1.0

言語系の変更点

以下が主要な3.0.0からの言語変更点です。サンプルコードは「NEWS for Ruby 3.1.0」の公開コードです。

[Feature #11256] ブロックの引数が他のメソッドに引き渡しをする際、省略可能です。 def foo(&)   bar(&) end 【参考】:Feature #11256

[Feature #17411] パターンマッチの表現にピン演算子がサポートされます。 Prime.each_cons(2).lazy.find_all{_1 in [n, ^(n + 2)]}.take(3).to_a #=> [[3, 5], [5, 7], [11, 13]] 【参考】:Feature #17411

[Feature #17724] ピン演算子でインスタンス・クラス・グローバル変数がサポートされます。 @n = 5 Prime.each_cons(2).lazy.find{_1 in [n, ^@n]} #=> [3, 5] 【参考】:Feature #17724

[Feature #16182] 1行パターンマッチングの呼び出しカッコが省略可能です。 [0, 1] => _, x {y: 2} => y: x #=> 1 y #=> 2 【参考】:Feature #16182

[Bug #4443] マルチアサインメントの評価方法が、シングルアサインメントの評価方法と一貫性を確保し、左から右へ評価します。 foo[0], bar.baz = a, b 3.1.0以前はa・b・foo・[]・bar・baz= の順に評価されていました。 3.1.0以降はfoo・bar・a・b・[]・baz= の順に評価されます。 【参考】:Bug #4443

[Feature #14579] Hashリテラル値とキーワード引数が省略可能です。 【参考】:Feature #14579

[Feature #17592] メインリアクタが共有可能なクラスインスタンス変数の読み込みが可能です。 【参考】:Feature #17592

[Feature #17398] エンドレスメソッド定義が許可されます。 def foo = puts "Hello" 【参考】:Feature #17398

上記の他、コアクラスにも[Feature]と[Bug]の更新がされているため、必要に応じてご確認ください。 【参考】:NEWS for Ruby 3.1.0 Core classes updates

Array・Class・Enumerable・Enumerator::Lazy・File・GC・Integer・Kernel・Marshal・MatchData・Method / UnboundMethod・Module・Process・Struct・String・Thread・Thread::Backtrace・Thread::Queue・Time・TracePoint・$LOAD_PATH・Fiber Scheduler・Refinement、と多岐に渡り更新されています。

PerlやPythonに満足できない方はRubyに挑戦しましょう

img_ruby310_02

Rubyは開発者であるまつもとゆきひろ氏が「Perlよりも強力で、Python2よりもオブジェクト指向な言語が欲しかったんだ」と語っている通り、多くの言語の特長を融合し洗練させたものです。もうじきRuby 2.6がサポート終了となりますが、その受け皿としてもRuby 3.1.0は品質も機能も十分なリリースと言えます

気になる人のTwitterをフォローしよう!
アンドエンジニア公式LINEでは
新着記事やエンジニアに役立つ情報をお届け!
日々のキャッチアップをお手伝いします!
マイナビITエージェント

編集部オススメコンテンツ

はじめて転職される方へ
IT・Webエンジニアの「よくある転職活動のお悩み」や「転職活動の流れ」とは?
マイナビITエージェント
Sponsored

アンドエンジニアへの取材依頼、情報提供などはこちらから

お問い合わせ・情報提供
エンジニア求人

編集部おすすめコンテンツ

はじめて転職される方へ
IT・Webエンジニアの「よくある転職活動のお悩み」や「転職活動の流れ」とは?
マイナビITエージェント
Sponsored

アンドエンジニアへの取材依頼、情報提供などはこちらから

Powered by マイナビ AGENT