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 節に入れておくのがよいです。
何がいつどう変わったのか
- irb 1.7.2 で lib/ext/save-history.rb が消えた
- Ruby 3.2.0 時点で irb 1.7.2 より古い 1.6.2 で、Ruby 3.3.0 では 1.11.0 なので 3.3.0 から影響を受ける。release note は以下の通り。
マニュアルが追いついてないけど
library irb/ext/save-history (Ruby 3.3 リファレンスマニュアル)
何をどうしたらいいかよく分からないのでした。