Mac の Ruby で irb や pry の文字化けをなくす

現象

以下のような感じです。便宜上、文字化けと表記しています。

$ irb
irb(main):001:0> a = "\U+FFE3\U+FFE3\U+FFE3\U+FFAB\U+FFE3\U+FFA1\U+FFE3\U+FFAF\U+FFEF\U+FFBC" # 「こんにちは」と入力した
=> ""
irb(main):002:0> a
=> ""

結論

Homebrew で readline をインストールし、それを用いて Ruby をインストールする。

1. Homebrew で readline をインストールする

以下のようにします。

$ brew install readline

2. readline を用いて Ruby がインストールされるよう環境変数に設定する

ここでは rbenv を使ってインストールしています。

まず readline を使うことを明示的に環境変数に設定します。ここでは一時的に設定していますが、永続的に設定してもよいと思います。

$ RUBY_CONFIGURE_OPTS="--with-readline-dir=$(brew --prefix readline)"

3. Ruby をインストールする

上記の設定ができたら Ruby のインストールを行います。ビルド時に readline が用いられていることが分かります。

$ rbenv install 2.5.1
Downloading openssl-1.1.0i.tar.gz...
(中略)
ruby-build: use readline from homebrew
(後略)

4. 動作確認をする

Ruby がインストールできたならば irb を起動して動作を確かめます。

$ irb
irb(main):001:0> a = "こんにちは"
=> "こんにちは"
irb(main):002:0> a
=> "こんにちは"
irb(main):003:0>

補足

irb 起動時に --noreadline というオプションをつけることで回避することができます。

$ irb --noreadline
irb(main):001:0> a = "こんにちは!"
=> "こんにちは!"
irb(main):002:0> a
=> "こんにちは!"
irb(main):003:0> exit
Powered by はてなブログ