Ruby の irb は補完機能があって,たとえば「Array」と打ちたいとき,「Arr」くらいまで打って TAB を押せば「Array」になってくれる。
それが,この頃,TAB を押した瞬間にエラーを吐いて落ちるようになった。
補完したいものによって,期待どおり補完されたり落ちたりする。
以下の環境:
- macOS 26.2 (25C56)
- ruby 3.4.8 (2025-12-17 revision 995b59f666) +PRISM [arm64-darwin25]
- forwardable-1.4.0
- irb-1.16.0
- rdoc-7.0.3
- reline-0.6.3
Ruby 4.0.0 では起きなかった。
エラーメッセージ
<internal:marshal>:34:in 'Marshal.load': class RDoc::Markup::Heading not a struct (TypeError)
from /Users/XXXXX/.rbenv/versions/3.4.8/lib/ruby/gems/3.4.0/gems/rdoc-7.0.3/lib/rdoc/store.rb:982:in 'block in RDoc::Store#marshal_load'
from /Users/XXXXX/.rbenv/versions/3.4.8/lib/ruby/gems/3.4.0/gems/rdoc-7.0.3/lib/rdoc/store.rb:982:in 'IO.open'
from /Users/XXXXX/.rbenv/versions/3.4.8/lib/ruby/gems/3.4.0/gems/rdoc-7.0.3/lib/rdoc/store.rb:982:in 'RDoc::Store#marshal_load'
from /Users/XXXXX/.rbenv/versions/3.4.8/lib/ruby/gems/3.4.0/gems/rdoc-7.0.3/lib/rdoc/store.rb:627:in 'RDoc::Store#load_class_data'
from /Users/XXXXX/.rbenv/versions/3.4.8/lib/ruby/gems/3.4.0/gems/rdoc-7.0.3/lib/rdoc/store.rb:607:in 'RDoc::Store#load_class'
from /Users/XXXXX/.rbenv/versions/3.4.8/lib/ruby/gems/3.4.0/gems/rdoc-7.0.3/lib/rdoc/ri/driver.rb:731:in 'block in RDoc::RI::Driver#classes_and_includes_and_extends_for'
from /Users/XXXXX/.rbenv/versions/3.4.8/lib/ruby/gems/3.4.0/gems/rdoc-7.0.3/lib/rdoc/ri/driver.rb:729:in 'Array#map'
from /Users/XXXXX/.rbenv/versions/3.4.8/lib/ruby/gems/3.4.0/gems/rdoc-7.0.3/lib/rdoc/ri/driver.rb:729:in 'RDoc::RI::Driver#classes_and_includes_and_extends_for'
from /Users/XXXXX/.rbenv/versions/3.4.8/lib/ruby/gems/3.4.0/gems/irb-1.16.0/lib/irb/input-method.rb:380:in 'block in IRB::RelineInputMethod#show_doc_dialog_proc'
from /Users/XXXXX/.rbenv/versions/3.4.8/lib/ruby/gems/3.4.0/gems/reline-0.6.3/lib/reline/line_editor.rb:636:in 'BasicObject#instance_exec'
from /Users/XXXXX/.rbenv/versions/3.4.8/lib/ruby/gems/3.4.0/gems/reline-0.6.3/lib/reline/line_editor.rb:636:in 'Reline::LineEditor::DialogProcScope#call'
from /Users/XXXXX/.rbenv/versions/3.4.8/lib/ruby/gems/3.4.0/gems/reline-0.6.3/lib/reline/line_editor.rb:671:in 'Reline::LineEditor::Dialog#call'
from /Users/XXXXX/.rbenv/versions/3.4.8/lib/ruby/gems/3.4.0/gems/reline-0.6.3/lib/reline/line_editor.rb:704:in 'Reline::LineEditor#update_each_dialog'
from /Users/XXXXX/.rbenv/versions/3.4.8/lib/ruby/gems/3.4.0/gems/reline-0.6.3/lib/reline/line_editor.rb:457:in 'block in Reline::LineEditor#update_dialogs'
from /Users/XXXXX/.rbenv/versions/3.4.8/lib/ruby/gems/3.4.0/gems/reline-0.6.3/lib/reline/line_editor.rb:455:in 'Array#each'
from /Users/XXXXX/.rbenv/versions/3.4.8/lib/ruby/gems/3.4.0/gems/reline-0.6.3/lib/reline/line_editor.rb:455:in 'Reline::LineEditor#update_dialogs'
from /Users/XXXXX/.rbenv/versions/3.4.8/lib/ruby/gems/3.4.0/gems/reline-0.6.3/lib/reline/line_editor.rb:1001:in 'Reline::LineEditor#update'
from /Users/XXXXX/.rbenv/versions/3.4.8/lib/ruby/gems/3.4.0/gems/reline-0.6.3/lib/reline.rb:352:in 'block (3 levels) in Reline::Core#inner_readline'
from /Users/XXXXX/.rbenv/versions/3.4.8/lib/ruby/gems/3.4.0/gems/reline-0.6.3/lib/reline.rb:342:in 'Array#each'
from /Users/XXXXX/.rbenv/versions/3.4.8/lib/ruby/gems/3.4.0/gems/reline-0.6.3/lib/reline.rb:342:in 'block (2 levels) in Reline::Core#inner_readline'
from /Users/XXXXX/.rbenv/versions/3.4.8/lib/ruby/gems/3.4.0/gems/reline-0.6.3/lib/reline.rb:401:in 'block in Reline::Core#read_io'
from <internal:kernel>:168:in 'Kernel#loop'
from /Users/XXXXX/.rbenv/versions/3.4.8/lib/ruby/gems/3.4.0/gems/reline-0.6.3/lib/reline.rb:380:in 'Reline::Core#read_io'
from /Users/XXXXX/.rbenv/versions/3.4.8/lib/ruby/gems/3.4.0/gems/reline-0.6.3/lib/reline.rb:341:in 'block in Reline::Core#inner_readline'
from <internal:kernel>:168:in 'Kernel#loop'
from /Users/XXXXX/.rbenv/versions/3.4.8/lib/ruby/gems/3.4.0/gems/reline-0.6.3/lib/reline.rb:340:in 'Reline::Core#inner_readline'
from /Users/XXXXX/.rbenv/versions/3.4.8/lib/ruby/gems/3.4.0/gems/reline-0.6.3/lib/reline.rb:257:in 'block (2 levels) in Reline::Core#readmultiline'
from /Users/XXXXX/.rbenv/versions/3.4.8/lib/ruby/gems/3.4.0/gems/reline-0.6.3/lib/reline/io/ansi.rb:110:in 'block in Reline::ANSI#with_raw_input'
from /Users/XXXXX/.rbenv/versions/3.4.8/lib/ruby/gems/3.4.0/gems/reline-0.6.3/lib/reline/io/ansi.rb:110:in 'IO#raw'
from /Users/XXXXX/.rbenv/versions/3.4.8/lib/ruby/gems/3.4.0/gems/reline-0.6.3/lib/reline/io/ansi.rb:110:in 'Reline::ANSI#with_raw_input'
from /Users/XXXXX/.rbenv/versions/3.4.8/lib/ruby/gems/3.4.0/gems/reline-0.6.3/lib/reline.rb:256:in 'block in Reline::Core#readmultiline'
from /Users/XXXXX/.rbenv/versions/3.4.8/lib/ruby/gems/3.4.0/gems/reline-0.6.3/lib/reline.rb:251:in 'Thread::Mutex#synchronize'
from /Users/XXXXX/.rbenv/versions/3.4.8/lib/ruby/gems/3.4.0/gems/reline-0.6.3/lib/reline.rb:251:in 'Reline::Core#readmultiline'
from /Users/XXXXX/.rbenv/versions/3.4.8/lib/ruby/gems/3.4.0/gems/forwardable-1.4.0/lib/forwardable.rb:231:in 'Reline.readmultiline'
from /Users/XXXXX/.rbenv/versions/3.4.8/lib/ruby/gems/3.4.0/gems/irb-1.16.0/lib/irb/input-method.rb:482:in 'IRB::RelineInputMethod#gets'
from /Users/XXXXX/.rbenv/versions/3.4.8/lib/ruby/gems/3.4.0/gems/irb-1.16.0/lib/irb.rb:226:in 'block in IRB::Irb#read_input'
from /Users/XXXXX/.rbenv/versions/3.4.8/lib/ruby/gems/3.4.0/gems/irb-1.16.0/lib/irb.rb:521:in 'IRB::Irb#signal_status'
from /Users/XXXXX/.rbenv/versions/3.4.8/lib/ruby/gems/3.4.0/gems/irb-1.16.0/lib/irb.rb:224:in 'IRB::Irb#read_input'
from /Users/XXXXX/.rbenv/versions/3.4.8/lib/ruby/gems/3.4.0/gems/irb-1.16.0/lib/irb.rb:269:in 'block in IRB::Irb#readmultiline'
from /Users/XXXXX/.rbenv/versions/3.4.8/lib/ruby/gems/3.4.0/gems/irb-1.16.0/lib/irb.rb:581:in 'IRB::Irb#with_prompt_part_cached'
from /Users/XXXXX/.rbenv/versions/3.4.8/lib/ruby/gems/3.4.0/gems/irb-1.16.0/lib/irb.rb:264:in 'IRB::Irb#readmultiline'
from /Users/XXXXX/.rbenv/versions/3.4.8/lib/ruby/gems/3.4.0/gems/irb-1.16.0/lib/irb.rb:279:in 'block in IRB::Irb#each_top_level_statement'
from <internal:kernel>:168:in 'Kernel#loop'
from /Users/XXXXX/.rbenv/versions/3.4.8/lib/ruby/gems/3.4.0/gems/irb-1.16.0/lib/irb.rb:278:in 'IRB::Irb#each_top_level_statement'
from /Users/XXXXX/.rbenv/versions/3.4.8/lib/ruby/gems/3.4.0/gems/irb-1.16.0/lib/irb.rb:193:in 'IRB::Irb#eval_input'
from /Users/XXXXX/.rbenv/versions/3.4.8/lib/ruby/gems/3.4.0/gems/irb-1.16.0/lib/irb.rb:174:in 'block in IRB::Irb#run'
from /Users/XXXXX/.rbenv/versions/3.4.8/lib/ruby/gems/3.4.0/gems/irb-1.16.0/lib/irb.rb:173:in 'Kernel#catch'
from /Users/XXXXX/.rbenv/versions/3.4.8/lib/ruby/gems/3.4.0/gems/irb-1.16.0/lib/irb.rb:173:in 'IRB::Irb#run'
from /Users/XXXXX/.rbenv/versions/3.4.8/lib/ruby/gems/3.4.0/gems/irb-1.16.0/lib/irb.rb:54:in 'IRB.start'
from /Users/XXXXX/.rbenv/versions/3.4.8/lib/ruby/gems/3.4.0/gems/irb-1.16.0/exe/irb:9:in '<top (required)>'
from /Users/XXXXX/.rbenv/versions/3.4.8/lib/ruby/site_ruby/3.4.0/rubygems.rb:303:in 'Kernel#load'
from /Users/XXXXX/.rbenv/versions/3.4.8/lib/ruby/site_ruby/3.4.0/rubygems.rb:303:in 'Gem.activate_and_load_bin_path'
from /Users/XXXXX/.rbenv/versions/3.4.8/bin/irb:25:in '<main>'