Ruby
 Computer >> コンピューター >  >> プログラミング >> Ruby

Ruby 3.4リリースハイライト:注目すべき新機能とアップデートまとめ

Rubyの恒例行事として、コアチームは2024年12月25日のクリスマスにRuby 3.4をリリースしました!Rubyが好きな開発者なら、Ruby 3.4で何が変わったのか気になるところでしょう。今回のリリースには大きな破壊的変更はありませんが、知っておくと得をする魅力的な機能がいくつか含まれています。

Ruby 3.4リリースハイライト:注目すべき新機能とアップデートまとめ

まずは、言語仕様の変更点から見ていきましょう。

言語仕様の変更点

言語仕様の変更は、ほとんどのRuby開発者にとって最も影響が大きい部分です。それぞれの変更点を順番に確認していきます。

文字列リテラルのデフォルト凍結(frozen string literals)

Rubyを少しでも書いたことがある方なら、ファイルの先頭に次のような記述を見たことがあるはずです。

# frozen_string_literal: true

これはマジックコメントと呼ばれるもので、Rubyインタプリタにとって実際に意味を持つ特別なコメントです。このコメントが記述されたファイルでは、すべての文字列がfreezeメソッドを呼び出したかのように扱われます。凍結された文字列を変更しようとすると、実行時エラーが発生します。

Ruby 3.4では、文字列がデフォルトで凍結されているかのように動作するようになりました。文字列を変更しようとした場合、エラーではなく非推奨(deprecation)警告が表示されます。将来のバージョンでは、変更を試みた際に例外が発生する形で、デフォルトの凍結文字列リテラルが完全に強制される予定です。この移行期間のおかげで、Ruby開発者にはアプリケーションを対応させるための十分な時間が与えられています。

ブロックのデフォルト引数「it」

Ruby 3.4では、短いブロックをより簡潔に記述できるよう、デフォルトのブロックパラメータ「it」が導入されました。

Ruby 2.7以前は、eachメソッドで配列の各要素を出力するには、次のように書く必要がありました。

[1, 2, 3].each { |item| puts item }

Ruby 2.7で番号付きパラメータが導入され、引数名を明示的に命名する必要がなくなりました。Ruby 2.7以降では、同じコードを次のように書けます。

[1, 2, 3].each { puts _1 }

この書き方は確かにシンプルですが、Rubyのこの構文に慣れていない人には直感的とは言えません。そこでRuby 3.4では、同じことを実現するさらに読みやすい方法が導入されました。

[1, 2, 3].each { puts it }

nilに対するキーワードスプラット(**)

Ruby 3.4より前のバージョンでは、ダブルスプラット演算子(**)をnilに対して使用するとTypeErrorが発生していました。nilは暗黙的にハッシュへ変換できなかったため、ある意味理にかなった挙動でした。

Ruby 3.4ではこの挙動がシンプルに変わりました。nilが暗黙的にハッシュへ変換されるようになり、nilに対する**は、空のハッシュに対する**とまったく同じように動作します。

コアクラスの更新

コアクラスの更新は、言語仕様の変更ほど直接的な影響はないものの、理解しておく価値は十分にあります。

Exception#set_backtrace

Rubyの課題トラッカーには、Ruby 3.4以前の挙動について「文字列の配列でバックトレースを設定すると情報が失われる(lossy)」という機能要望が提出されていました。従来は#backtrace_locationsnilを返していました。

Ruby 3.4では、Exception#set_backtraceThread::Backtrace::Locationの配列を受け付けられるようになり、Backtraceインスタンスを再構築して、完全に機能するExceptionオブジェクトを作成できるようになりました。

Range#size

Range#sizeにもRuby 3.4で新しい挙動が加わりました。反復処理が不可能なRangeに対してsizeを呼び出すと、TypeErrorが発生するようになります。これは小さな変更ですが、一部のRangeに対してsizeを呼び出しているコードがある場合は、挙動の違いに気づく可能性があります。

Ruby 3.4のその他の変更点

Ruby 3.4のもうひとつの小さな変更は、ブロックを受け取るものの実際には使用しないメソッドに関するものです。verboseモードで実行した場合、ブロックを使用しないメソッドにブロックを渡すと、警告が表示されるようになります。

また、うれしいニュースもあります。実装の書き直しにより、Array.eachのパフォーマンスが向上しました!

さらに、エラーメッセージとバックトレースの表示方法も改善されています。該当する箇所ではバッククォートの代わりにシングルクォートが使用されるようになり、メソッド名の前にクラス名が表示されるようになりました。

Ruby 3.4へのアップグレード

ほとんどの方にとって、Ruby 3.4へのアップグレードは大きな負担にならないはずです。最も手間がかかる作業は、不要になったfrozen string literalのマジックコメントを削除することくらいでしょう。アップグレードにかける時間は、Ruby 3.4の新機能を活用できる見返りとして十分に価値があります。ぜひ早めに対応しましょう!

そして忘れないでください。最新のRubyニュースや本記事のようなチュートリアルをメールでお届けするHoneybadgerのニュースレターに登録してみてください!

  1. Rubyプログラミングとは?現代の開発者にとって重要な理由を徹底解説

    Rubyは、まつもとゆきひろ氏によって開発されたオブジェクト指向プログラミング言語で、1995年に初めてリリースされました。その後、Railsフレームワークとの組み合わせで特に人気が高まりました。Rubyは使いやすく柔軟性の高い言語であり、初心者のプログラマーにも最適です。この記事では、Ruby on Railsプログラミングの概要と、学ぶ価値のある言語である理由について詳しく解説します。Rubyは、PerlやPythonと似た構文を持ち、英語に近い感覚で記述できる高水準言語です。Webアプリケーションを開発する際には、Railsフレームワークと組み合わせて使用されるのが一般的です。Rails

  2. AptWatcherの発表:サーバーのaptパッケージ更新をSlackへ通知するシンプルなツール

    Honeybadgerでは、すべてのサーバーにおけるaptパッケージの更新状況を把握し続けるために、これまで「apticron」を活用してきました。当初はapticronからの通知メールを自分の受信箱で確認していましたが、途中から「Slackの通知チャンネルに流れたほうが扱いやすい」と感じるようになりました。Slackにはメールを受信してそのままチャンネルへ投稿できるEmailアプリがあり、まずはそれを試してみました。ところが実際に使ってみると、メールがファイルとして表示されてしまったり、メールヘッダーのノイズが目立ったりと、どうにもしっくりきません。そこで「もう少しこなれた仕組みを自分で作ろ