Assets.github.com%2fimages%2fgravatars%2fgravatar-140

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

  • HaaseDakker@github
  • negipo
  • fjmthdk
  • laishin17@github
  • shiraa2012
  • hem6
  • rvillage@github
  • kanariya0922
  • kenzan100
  • tadyjp@github
  • wokakiiiiiiiiii@github
  • mitukiii
  • noplans@github
  • sanemat@github
  • 10DiegoArmando
  • tyabe
  • troter
  • alpaca_taichou
  • irasally@github
  • akiray03@github
Edit

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なり起動してみればいい。日本語を入力すればその通りに表示されるはずである。

Icon-ok
6 users said this post was useful/correct.


Sign up and follow irohiroki :)

Sign up with GitHub/Twitter

x close