Nokogiri のインストール

普段 サイトの解析をする際、 Hpricot や REXML を使っている。
しかし、REXML で XPath の処理を行うと非常に重い。(ロケーションパスを
"//word" 等と指定した場合が非常に重い)

Ruby XML Performance Shootout: Nokogiri vs LibXML vs Hpricot vs REXML
によると、Nokogiri が かなり解析が早いらしい。

そもそも、何故今まで Nokogiri を使わなかったかというと、rubygems
重いからだった。(Hpricot は ソースからインストールしたような・・
古い記憶だ。それと rubygems でも Mechanize は使っている。(結局 Nokorigi
を使っているのだが。だから今回 アンインストール -> インストール を行う))

しかし、rubygems が重かったのは 1.1.1 の頃で、今 入れている 1.3.6 は
さして重くない。というわけで、Nokogiri をインストールする。

libxml2 の最新版のインストール

http://d.hatena.ne.jp/kitamomonga/20090614/ruby_nokogiri_behavior_differs_in_libxml2_version
を読むと、libxml2 のバージョンによって Nokogiri の挙動が変わるらしい。
というわけで libxml2 の最新版をインストールする。

$ wget ftp://xmlsoft.org/libxml2/LATEST_LIBXML2
$ tar zxvf LATEST_LIBXML2 
$ cd libxml2-2.7.7/
$ ./configure --prefix=$VMDIR_PATH/usr/local
$ make
$ make install

(環境変数 VMDIR_PATH は 適当なディレクトリ)
コンパイルに 30分以上かかった。このスペックじゃなあ、、、

libxslt の最新版のインストール

ついでに libxslt の最新版もインストールする。

$ wget ftp://xmlsoft.org/libxml2/LATEST_LIBXSLT
$ tar zxvf LATEST_LIBXSLT 
$ cd libxslt-1.1.26/
$ ./configure --prefix=$VMDIR_PATH/usr/local \
--with-libxml-prefix=$VMDIR_PATH/usr/local
$ make
$ make install

--with-libxml-prefix は、上記でインストールした libxml2 のディレクトリを指定。

Nokogiri を rubygems でインストール

本当は rip から Nokogiri をインストールしたいのだが、rip に gem の
オプションを渡す方法が分からない。http://hellorip.com/
"rip2 coming soon" なんて閉まってるし。(rip2 では rip-shell など
コマンド群を rip-* 形式にするらしいが) rip のソースを読むのは優先度が
低いし。(とはいっても ripのクラスを使って ちょこちょこプログラムを
作ったりはしている)

よって rubygems でインストール。

より

$ gem install nokogiri -- \
--with-xml2-include=$VMDIR_PATH/usr/local/include/libxml2 \
--with-xml2-lib=$VMDIR_PATH/usr/local/lib \
--with-xslt-include=$VMDIR_PATH/usr/local/include/libxslt \
--with-xslt-lib=$VMDIR_PATH/usr/local/lib

確認。

$ ruby -e "require 'rubygems'; require 'nokogiri'; p Nokogiri::VERSION_INFO"
{"warnings"=>[], "ruby"=>{"engine"=>"mri", "version"=>"1.8.7", "platform"=>"i686-linux"}, "libxml"=>{"loaded"=>"2.7.7", "binding"=>"extension", "compiled"=>"2.7.7"}, "nokogiri"=>"1.4.3.1"}

無事インストールできた。