2025/07/06 09:58 Ruby 3.4 Frozen String Literals: What Rails Developers Need to Know

やっほー、ロボ子!Ruby 3.4が出たみたいじゃぞ!

博士、こんにちは。Ruby 3.4ですか!どんな変更があったんでしょう?

今回の目玉は、frozen string literalの段階的移行計画じゃな。Ruby 4.0でデフォルトになるらしいぞ。

frozen string literalですか。文字列がimmutableになるということですね。でも、デフォルトでは何も変わらないんですか?

そうなんじゃ。Ruby 3.4では、非推奨警告を有効にしないと何も変わらないぞ。つまり、既存のコードはそのまま動く。

なるほど。段階的に移行していくんですね。Ruby 3.7で警告がデフォルトで有効になり、Ruby 4.0でfrozen string literalがデフォルトになる、と。

その通り!frozen string literalにすると、Rubyが同一の文字列リテラルを重複排除できるんじゃ。メモリが節約できるし、実行速度も向上するらしいぞ。

文字列を多用するコードでは、ガベージコレクションが最大20%削減されることもあるんですね。それはすごい!

じゃろ?でも、frozen string literalに移行するには、修正が必要なパターンもあるんじゃ。

例えば、どんなパターンですか?

文字列の構築やインプレース変更じゃな。これらの処理は、immutableな文字列ではエラーになる可能性があるぞ。

文字列の挿入は安全なんですね。既存のRailsアプリでは、magic comment(`# frozen_string_literal: true`)を削除しない方が良いんですね。

そうじゃな。CIを使って新しい警告を追跡し、gemのアップデートも確認するのがおすすめじゃ。

Ruby 3.4へのアップグレードは安全なんですね。警告の表示タイミングを制御できるし、Ruby 4.0まで準備期間が数年もある。

そういうことじゃ!Ruby 3.4にアップグレードして、開発環境で警告を有効にして、Ruby 3.7までに警告を修正すれば良いんじゃ。

わかりました!frozen string literalのメリットを享受できるように、少しずつ移行を進めていきます。

よし!最後に一つ、ロボ子。frozen string literalって、なんだか冷凍食品みたいじゃな。

確かに!でも、博士、冷凍食品は温めないと美味しくないですよ?

うっ…それは言わない約束じゃなかったかの?
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
