35歳からの中二病エンジニア

社寺・鉄道・アニメを愛でるウェブ技術者の呟き

bootsnapに怒られた時はキャッシュを消してみるべし

k0kubun氏の記事に触発されてPryからirbに移行した所、何故かRSpecbinding.irb した時にだけエラーが発生するようになった。

何が起こったのか

こんなエラーが発生するようになった。

Failure/Error: binding.irb

     LoadError:
       cannot load such file -- irb/color_printer
       Did you mean?  irb/color_printer

ちなみに、このプロジェクトはRuby 3.0.1、Rails 6.1.3.1の組み合わせで動いている。そう言えば、件の記事でRuby 3系への対応が間に合っていない的なことが書いてあったと思い、GitHubを確認してみる。

github.com

github.com

なるほど、irb/color_printer は3.0.1で取り込まれているっぽい。であれば動くはずなのだが…なぜ怒られるのか…しかもRSpecを走らせた時だけ…。

どうやって解決したか

怒られた時のスタックトレースを見れば一目瞭然なのだが、落ちているのはbootsnapの中だった。そして実際には存在するはずのファイルが読めていない。これはbootsnapのキャッシュが悪さしているに違いないということで、 tmp/cache を丸ごと削除してみたところ、アッサリと動いてしまった…。おそらく、Ruby 3.0で動かしていた時のキャッシュが悪さしていたのではないかと思われる。

蛇足

キャッシュ関連は深追いしても実のある学びになることが少ないので、怪しいと思ったら取り敢えず削除してみるに限る。

bootsnapのキャッシュ問題に悩まされたのはこれが初めてだったので調べるのに時間が掛かってしまったけれども、どうやらRails界隈ではあるあるらしいので、今後はbootsnapで引っ掛かった時は取り敢えずキャッシュ削除と覚えておこう…。