【Ruby/Rails】LoadError: cannot load such file -- rexml/documentというエラーへの対処法と原因
最初に
RailsないしRubyを使っているときに、
LoadError: cannot load such file -- rexml/document
というようなエラーがでることがある。
これの対処法や原因について、簡単に書く。
対処法
エラー文は「rexml/document
が読み込めない」と言っている。
rexml/document
とは、rexml
というgemのサブライブラリと呼ぶべきものだ。
gem 'rexml'
この行をGemfileに追記しbundle install
して、rexml
を使えるようにする。
原因
Ruby 3.0 で、rexml
は、Default gemからBundled gemとなった。
Default gemもBundled gemも、Rubyをインストールしたときに一緒にインストールされるgemである。
しかし、前者は、Rubyコアチームで管理されアンイストールすることは出来ず、
後者は、Rubyコアチーム外で管理されアンイストールすることができる。
どうもこの区分が変わったことで、rexml
を使う場合は使うことを明示的に指定する必要があるようだ。
仮にこちらがrexml
を直接使う気がなくても、何らかのgemを使う際にそのgemがrexml
に依存していて、
間接的にrexml
を使う必要があって、失敗することがある。
むしろ、間接的に使って失敗することの方が多いだろう。
例えば、自分はRailsでrails test:all
コマンドを実行するときに、失敗した。
本来なら1番rexml
に依存しているgem側のGemfileないしgemspecにrexml
を指定して欲しいところ。
自身のGemfileにrexml
を指定する以外にも、エラーが起きるgemにrexml
を指定するようにPRを送ってマージしてもらって、最新のgemを使うのが1番いい。
まぁ、PRを送ってもすぐマージされなかったりするので、結局自分のGemfileに書いておくのが1番手っ取り早い解決方法となるだろう。
参考
Standard Gems
冒頭にDefault gemsとBundled gemsの定義が書いてある。
letter_opener_web PR #106
letter_opener_webというgemはrexml
に依存している。
rexml
を明示的に指定するようPRがでているが、管理者の反応がまだない。
rails/rails Issue#41502 rails test fails with cannot load such file rexml/document
Railsでも、rexml/documentがロードできず、テストが落ちることが報告されている。