メモ帳

なんでも

刃物の秋だしNokogiriをインストールしてみる

Nokogiriって何

みなさまNokogiriをご存知でしょうか。簡単に言うとWebスクレイピングでよく使われるGem(rubyプラグイン)のことなんです。なんで簡単に言うかっていうと…

ほとんど使ったことがないからです!! Nokogiriに関しては突っ込まれても何も答えられません。

じゃあなんでNokogiri導入するの?って話

現在Amazon Product AdvertisingってAPIを使わなければならない状況にあるんですが、「rubyでやるにはAmazon-ecsってGemがいいよ!」と聞いたのでインストールしてみることに。でもAmazon-ecsNokogiriに依存してるのでこちらもインストールしなくてはいけないんですね。それがNokogiriを導入する理由です。で、ご存知の方は??と思われていることでしょう、基本的にGemは依存しているGemがなければ一緒にインストールしてくれるんですよねー… ハイ、やっと本題です。

インストール失敗した話

Nokogiriのインストールができませんでした。

Amazon-ecsのインストール中にこちらのエラーをいただきました。

$ bundle install --path vendor/bundle
Fetching gem metadata from https://rubygems.org/..........
Resolving dependencies...
Installing mini_portile 0.6.0
Building nokogiri using system libraries.

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    /home/vagrant/.rbenv/versions/2.1.2/bin/ruby extconf.rb --use-system-libraries
Building nokogiri using system libraries.
libxml2 version 2.6.21 or later is required!
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

Provided configuration options:
    --with-opt-dir
    --without-opt-dir
    --with-opt-include
    --without-opt-include=${opt-dir}/include
    --with-opt-lib
    --without-opt-lib=${opt-dir}/lib
    --with-make-prog
    --without-make-prog
    --srcdir=.
    --curdir
    --ruby=/home/vagrant/.rbenv/versions/2.1.2/bin/ruby
    --help
    --clean
    --use-system-libraries
    --with-zlib-dir
    --without-zlib-dir
    --with-zlib-include
    --without-zlib-include=${zlib-dir}/include
    --with-zlib-lib
    --without-zlib-lib=${zlib-dir}/lib
    --with-xml2-dir
    --without-xml2-dir
    --with-xml2-include
    --without-xml2-include=${xml2-dir}/include
    --with-xml2-lib
    --without-xml2-lib=${xml2-dir}/lib
    --with-libxml-2.0-config
    --without-libxml-2.0-config
    --with-pkg-config
    --without-pkg-config
    --with-xslt-dir
    --without-xslt-dir
    --with-xslt-include
    --without-xslt-include=${xslt-dir}/include
    --with-xslt-lib
    --without-xslt-lib=${xslt-dir}/lib
    --with-libxslt-config
    --without-libxslt-config
    --with-exslt-dir
    --without-exslt-dir
    --with-exslt-include
    --without-exslt-include=${exslt-dir}/include
    --with-exslt-lib
    --without-exslt-lib=${exslt-dir}/lib
    --with-libexslt-config
    --without-libexslt-config

extconf failed, exit code 1

Gem files will remain installed in /vagrant/ruby_projects/textbook_project/vendor/bundle/ruby/2.1.0/gems/nokogiri-1.6.3.1 for inspection.
Results logged to /vagrant/ruby_projects/textbook_project/vendor/bundle/ruby/2.1.0/extensions/x86_64-linux/2.1.0-static/nokogiri-1.6.3.1/gem_make.out
An error occurred while installing nokogiri (1.6.3.1), and Bundler cannot continue.
Make sure that `gem install nokogiri -v '1.6.3.1'` succeeds before bundling.

問題はこの部分ですねー。

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    /home/vagrant/.rbenv/versions/2.1.2/bin/ruby extconf.rb --use-system-libraries
Building nokogiri using system libraries.
libxml2 version 2.6.21 or later is required!

どうやらlibxml2ってのが必要とのこと。以前DebianNokogiriをインストールしたときはお目にかからなかったので初めはちょー焦りましたが、CentOSさんには初めから入ってないんですね。

で調べてみるとざくざくヒットしました。

libxml2/libxsltのインストール for nokogiri on CentOS | Articles@www.e-mist.com

今回はこちらを参考にさせていただきました。もちろんNokogiriの公式ページでも紹介されています。

Installing Nokogiri - Nokogiri 鋸

libxml2に加えてlibxsltも必要みたいですね。インストールは

$ sudo yum --enablerepo=epel,remi,rpmforge install libxml2 libxml2-devel
$ sudo yum --enablerepo=epel,remi,rpmforge install libxslt libxslt-devel

で良いはずです。一応バージョンも確認しましょう。

$ xml2-config --version
2.7.6
$ xslt-config --version
1.1.26

OKです。これで晴れてNokogiriのインストールができるはずですね。

$ bundle install --path vendor/bundle
Fetching gem metadata from https://rubygems.org/..........
Resolving dependencies...
Using mini_portile 0.6.0
Building nokogiri using system libraries.
Installing nokogiri 1.6.3.1
Installing ruby-hmac 0.4.0
Installing amazon-ecs 2.2.5
Using bundler 1.6.3
Your bundle is complete!
It was installed into ./vendor/bundle

NokogiriじゃなくてAmazon-ecsのインストールでした(‾◡◝ )

ナンデ「刃物の秋」?

余録:実りの秋。この季節になると包丁の売れ行きが急に… - 毎日新聞

らしいです。それだけ…(´つヮ⊂)

〜Node.jsはしばらく記事になりません。〜