発生する問題
rails consoleで例外が発生し、そのエラーメッセージに日本語が含まれていた場合、"\xE3\x83\x90\xE3..."みたいな形で日本語が文字化けする。
たとえば以下は本来であれば「バリデーションに失敗しました: Eメールを入力してください」というエラーメッセージを表示すべき場合に文字化けする例である。
> User.create!
/(railsのパス)/validations.rb:80:in `raise_validation_error': \xE3\x83\x90\xE3...(省略) (ActiveRecord::RecordInvalid)
原因
rails consoleで使われているirbのバージョンが1.3.5以下だとこの問題が発生する。
rails consoleで使用されているirbのバージョンを確認する場合は、rails console上でirb_info
と入力する。
> irb_info
=>
Ruby version: 3.0.0
IRB version: irb 1.3.0 (2020-12-25)
InputMethod: ReidlineInputMethod with Reline 0.2.0
対処方法
Gemfileにirb
を追加して、bundle install
を実行する。(なぜ追加したのか、コメントを残しておくと良い)
Gemfile
# rails consoleの文字化けを解消する
gem 'irb', '>= 1.3.6'
rails consoleを起動し、irbのバージョンが1.3.6以上になっていることを確認する。
> irb_info
=>
Ruby version: 3.0.0
IRB version: irb 1.3.7 (2021-08-12)
InputMethod: ReidlineInputMethod with Reline 0.2.7
RUBY_PLATFORM: arm64-darwin20
これで例外メッセージが文字化けせずに表示されるはず。
> User.create!
/(railsのパス)/validations.rb:80:in `raise_validation_error': バリデーションに失敗しました: Eメールを入力してください (ActiveRecord::RecordInvalid)