LoginSignup
241
209

More than 5 years have passed since last update.

rails cで日本語が通らないときの直し方

Posted at

Macで漫然とRubyをインストールすると、rails consoleやirbで日本語を使えないことがある。(どうなるかというと、日本語の変換を確定した途端に「\U+FFE3\U+FFAB」みたいにUnicodeのエスケープっぽいものが表示される。)そうなった時の直し方を説明する。

なぜ日本語を使えないのか

大雑把に言うと、Macに付属しているコマンドライン処理のライブラリ(libedit)が日本語に対応していないから。これを使わず、libreadlineを使うようにすれば直る。

誰がlibeditを使っているのか

Rubyをインストールしたディレクトリのどこかにあるreadline.bundleが使っている。findコマンドを使えば見つけられる。例えば、rbenvを使ってRubyをインストールしたなら、下のコマンドで見つかるだろう。

$ find ~/.rbenv/versions -name readline.bundle

例として、ここでは下のパスにreadline.bundleがあったものとする。

~/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/x86_64-darwin11.3.0/readline.bundle

readlineをインストールする

homebrewやmacportでインストールすればいい。例えば、homebrewなら下のようにする。

$ brew install readline

どうやってreadlineを使わせるのか

install_name_toolというコマンドを使う。readline.bundleというのはライブラリのエイリアスみたいなもので、別の場所にある実体を参照しているだけである。よって、install_name_toolでreadline.bundleにreadlineを使わせればいい。同時に、libeditから切り離す必要もある。

install_name_toolを実行するには、readlineとlibeditの正確なパスを知る必要がある。readlineのライブラリファイルは下のようなパスにインストールされたはずだ。

/usr/local/Cellar/readline/(readlineのバージョン)/lib/libreadline.dylib

例えばreadline-6.2.4をインストールしたなら、下のようになる。

/usr/local/Cellar/readline/6.2.4/lib/libreadline.dylib

libeditはどこにあるのか

otoolというコマンドで知ることができる。otoolはLinuxにおけるlddの役割を果たす。つまり、readline.bundleが参照している実体を調べられる。今回の例なら、下のように実行すればいい。

$ otool -L ~/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/x86_64-darwin11.3.0/readline.bundle

するとlibedit.dylibのパスが表示される。ここでは以下のように表示されたとする。

/usr/lib/libedit.3.dylib

このlibeditとreadline.bundle別れさせ、libreadlineとくっつければいい。

install_name_tool

いよいよ大詰め。install_name_toolではダイナミックライブラリに関する様々な操作が可能だが、今回は-changeというオプションで参照先の変更を行う。文法は下の通り。

$ install_name_tool -change 削除するパス 新しいパス bundleファイル

今回の例なら下のようになる。

$ install_name_tool -change /usr/lib/libedit.3.dylib /usr/local/Cellar/readline/6.2.4/lib/libreadline.dylib ~/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/x86_64-darwin11.3.0/readline.bundle

これでrails cなりirbなり起動してみればいい。日本語を入力すればその通りに表示されるはずである。

241
209
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
241
209