またまたNokogiriがビルドできなくてはまる

Wood working garden tool

RubyでWebスクレイピングする際に便利なライブラリ「Nokogiri」は、別に自分で直接使用しなくてもHTML/Web関連のライブラリ(gem)を使用すると、芋づる式にインストールされる事が多いライブラリでもあります。

しかしこのNokogiriのビルドは難易度が高く、すんなりビルドできない場合が多いことでも有名です。いわゆるPure Rubyで作られておらず、外部ライブラリを使用しているためかもしれませんが、OSやライブラリの環境変化によってビルドに失敗することが多いのです。

今回macOS Mojave環境で、ひさびさに自作Railsプロジェクトをbundle updateしてみたところ、またもや以下のようなエラーが表示され、ビルドに失敗してしまいました。

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

    current directory: /Users/sora/work/my-rails/vendor/bundle/ruby/2.5.0/gems/nokogiri-1.8.5/ext/nokogiri
/Users/sora/.anyenv/envs/rbenv/versions/2.5.1/bin/ruby -r ./siteconf20181215-59957-1wn5hnb.rb extconf.rb
checking if the C compiler accepts ... yes
checking if the C compiler accepts -Wno-error=unused-command-line-argument-hard-error-in-future... no
Building nokogiri using system libraries.
pkg-config could not be used to find libxml-2.0
Please install either `pkg-config` or the pkg-config gem per

    gem install pkg-config -v "~> 1.1"

pkg-config could not be used to find libxslt
Please install either `pkg-config` or the pkg-config gem per

    gem install pkg-config -v "~> 1.1"

pkg-config could not be used to find libexslt
Please install either `pkg-config` or the pkg-config gem per

    gem install pkg-config -v "~> 1.1"

ERROR: cannot discover where libxml2 is located on your system. please make sure `pkg-config` is installed.
*** extconf.rb failed ***

エラーメッセージからすると、pkg-configあるいはlibxml2がらみのエラーのようですが、経験則からすると、このような場合の常套手段である「NOKOGIRI_USE_SYSTEM_LIBRARIES」の設定でなんとかなりそうに思えます。

すでにこのタイプのエラーを回避するために「export NOKOGIRI_USE_SYSTEM_LIBRARIES=1」でビルドしていたのですが、今回はためしにこの定義を行わない状態でビルドしてみたところ(すなわちNokogiriが自前ライブラリを使用する設定)、なぜかビルドに成功しました。

結果OKとはいえ気持ちが悪いのでさらに調べて見たところ、GitHubに「Nokogiri 1.8.5, macOS High Sierra and brew’s binutils」というissueを発見。今回の問題と関係しているのかどうか追い切れていませんが、とりあえずGemfileで「gem nokogiri “1.8.4”」を明示したところビルドできるようになったので、1.8.5のビルド設定にはなんらかの不具合があるのかもしれません。

ちなみにNokogiri公式サイトには、各種環境向けのトラブルシューティング情報を含む詳細なインストールドキュメントが公開されています。Nokogiriユーザーは一度目を通しておいたほうがよいのかもしれません。

スポンサーリンク