irbの日本語入力問題への対処

最近のMacOSでは最初からRubyが入っている (いつからかは知らない) ものの、irbで日本語が入力できないという問題があるようです。

【参考】Mac のruby のirb で日本語入力をできるようにする - LukeSilvia’s diary

上記のページではMacPortsからRubyを入れる方法と、readlineとRubyをソースからビルドする方法が紹介されていますが、ここでは別解として、MacPortsで入れたreadlineと、自分でソースからビルドするRubyをリンクする方法を試してみました。

テスト環境:

1. MacPortsでreadlineライブラリのインストール

単純にport installでインストールするだけです。

> sudo port install readline
2. Rubyのビルド

configure --help では出てきませんが、以下のconfigureオプションが存在します。

  • --with-opt-dir=DIR: ヘッダファイル/ライブラリファイルを探索するパスを追加

【参考】るりまのmkmfライブラリの説明

なお、--with-opt-dirの代わりに--with-readline-dirを指定すると、Rubyのreadlineライブラリについてのみ探索パスが追加されます (より正確には、extconf.rb中の dir_config('readline') に対応する)。

MacPortsでインストールしたライブラリとヘッダファイルは /opt/local/ 以下に置かれるので、以下のようにconfigureオプションを指定します。

~/ruby-1.9.1-p376> ./configure --with-opt-dir=/opt/local \
--prefix=/usr/local/ruby191 --program-suffix=191
~/ruby-1.9.1-p376> make
~/ruby-1.9.1-p376> make test
~/ruby-1.9.1-p376> sudo make install

ここで、Ruby 1.9系では、configure時に以下のような警告が出ます。

configure: WARNING: unrecognized options: --with-opt-dir

実際にはこの指定は有効になっているので、特にこの警告を気にする必要はないようです。

3. 動作確認

Rubyのインストール後、実際にirbで日本語が入力できることを確かめます。

~> irb191
irb(main):001:0> puts 'こんにちは、世界'
こんにちは、世界
=> nil
おまけ: 動的リンク先ライブラリの確認

このように動的リンク先のライブラリが問題になるケースでは、実行可能ファイルまたはライブラリファイルがどのライブラリにリンクされるかを確認したくなります。Linuxではlddコマンドですが、MacOSでは otool -L を使うことができます。

試しに手元のMacOS 10.6環境で確認したところ、以下の結果になりました。

/usr/local/ruby191/lib/ruby191/1.9.1/i386-darwin10.2.0> otool -L readline.bundle 
readline.bundle:
	/opt/local/lib/libreadline.6.dylib (compatibility version 6.0.0, current version 6.0.0)
	/opt/local/lib/libncurses.5.dylib (compatibility version 5.0.0, current version 5.0.0)
	/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.0.0)
	/usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 227.0.0)