OS X 10.8 Mountain Lion にmechanizeをインストールする方法

そろそろMavericksのリリースも近いようですが、とりあえず手持ちのOS X 10.8.4 にgemでmechanizeをインストールしようとしたところ、ちょっと引っかかったので、覚え書きとして書いておきます。

まず普通にgemでインストールしようといたしますと、下記のようなエラーになります。

$ sudo gem install mechanize
Building native extensions.  This could take a while...
ERROR:  Error installing mechanize:
 nokogiri requires Ruby version >= 1.9.2.

nokogiriというのは、mechanizeが使っているパーサーなんですが、最近のnokogiriはバージョン1.9.2以上のrubyが必要みたいです。Mountain Lionに元々入っているrubyは下記のように1.8.7です。

$ which ruby
/usr/bin/ruby
$ /usr/bin/ruby --version
ruby 1.8.7 (2012-02-08 patchlevel 358) [universal-darwin12.0]

というわけで、MacPortsでruby1.9か2.0をインストールします。gemの対象になるrubyは、実行パスで先に来ているrubyのようなので、MacPortsでrubyをインストールして、/opt/local/bin/rubyが/usr/bin/rubyより前に来るようにしておけばいいのですが、MacPortsでそのままインストールするとruby1.9とかruby2.0とかいうコマンド名でインストールされてしまってよくありません。以前はportsでインストールする際に +nosuffix というvariantを指定していたようですが、最近はこのvariantがありません…

$ port variants ruby19
ruby19 has the variants:
   c_api_docs: Generate documentation for Ruby C API
[+]doc: Install rdoc indexes and C API documents
   mactk: Build using Mac OS X Tk Framework
     * conflicts with tk
   tk: Build using MacPorts Tk
     * conflicts with mactk
   universal: Build for multiple architectures

えー、どうすんのー、とおもったら、ruby_selectってのが取り込まれたっぽいです。先にruby19かruby20をインストールして、あとでselectで切り替えられるらしい。まじで。せっかくなのでruby20をインストールしよう。

$ which ruby
/usr/bin/ruby
$ sudo port install ruby20
$ which ruby
/usr/bin/ruby
$ which ruby2.0
/opt/local/bin/ruby2.0

ruby20をインストールすると、上記のように/opt/local/bin/ruby2.0というのがインストールされて、rubyというコマンドは/usr/bin/rubyのままです。そこでselectします。

$ sudo port select ruby
Available versions for ruby:
 none (active)
 ruby20
$ sudo port select ruby ruby20
Selecting 'ruby20' for 'ruby' succeeded. 'ruby20' is now active.
$ sudo port select ruby
Available versions for ruby:
 none
 ruby20 (active)
$ which ruby
/opt/local/bin/ruby

なるほど。これでmechanizeもご機嫌にインストールできますぜ。

$ sudo gem install mechanize
Successfully installed mechanize-2.7.2

やったね! 🙂

参考文献

  1. 「近頃の macports + ruby では +nosuffix variant が廃止されている」, k12uのアレ