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 でインストール。
- http://nokogiri.org/tutorials/installing_nokogiri.html
- http://d.hatena.ne.jp/kitamomonga/20100223/ruby_nokogiri_install_with_any_libxml2_path
より
$ 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"}
無事インストールできた。