Ruby 3.2と3.3のirb historyの扱いの違いと対処方法

Ruby 3.3以降.irbrcはどうすればよいか

Ruby 3.3 以降、.irbrc の以下の記述の扱いは

require "irb/ext/save-history"  # <- LoadError
IRB.conf[:SAVE_HISTORY] = 1000  # default が 1000 になったので不要

このようになりました。もし Ruby 3.2 以前と 3.3 以降の両方の環境を触る場合は、.irbrc には以下のように書いておきましょう。

begin
  require "irb/ext/save-history"
rescue LoadError
ensure
  IRB.conf[:SAVE_HISTORY] = 1000
end

これで Ruby 3.2 以前では必要なファイルを読み込み、Ruby 3.3 以降では例外を握りつぶしたうえで save_history の値の設定を行います。

※ save_history を 1000 にするだけであればこの値は Ruby 3.3 以降はデフォルト値なので begin 節の中に入れて ensure はなくてもよいですが、そうでない場合は begin 節の中に入れておくと直前の例外で脱出して値の設定自体が無効になるので、ensure 節に入れておくのがよいです。

何がいつどう変わったのか

マニュアルが追いついてないけど

library irb/ext/save-history (Ruby 3.3 リファレンスマニュアル)

何をどうしたらいいかよく分からないのでした。

More