質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

1回答

5136閲覧

MYSYS2 環境での `gem install nokogiri` でエラー

tamurayk

総合スコア12

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

1クリップ

投稿2016/10/21 11:19

編集2016/10/21 11:21

MYSYS2 環境 に nokogiri がインスールできず、困っています。
Could not create Makefile due to some reason とエラーが出ていますので、makefile の作成がなんらかの原因で出来ていないようですが、原因がわかりません。

$ gem install nokogiri Building native extensions. This could take a while... ERROR: Error installing nokogiri: ERROR: Failed to build gem native extension. current directory: /home/myname/.gem/ruby/2.3.0/gems/nokogiri-1.6.8.1/ext/nokogiri /usr/bin/ruby.exe -r ./siteconf20161021-4212-968nrq.rb extconf.rb checking if the C compiler accepts ... *** 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=/usr/bin/$(RUBY_BASE_NAME) --help --clean /usr/lib/ruby/2.3.0/mkmf.rb:457:in `try_do': The compiler failed to generate an executable file. (RuntimeError) You have to install development tools first. from /usr/lib/ruby/2.3.0/mkmf.rb:572:in `block in try_compile' from /usr/lib/ruby/2.3.0/mkmf.rb:523:in `with_werror' from /usr/lib/ruby/2.3.0/mkmf.rb:572:in `try_compile' from extconf.rb:139:in `nokogiri_try_compile' from extconf.rb:163:in `block in add_cflags' from /usr/lib/ruby/2.3.0/mkmf.rb:630:in `with_cflags' from extconf.rb:162:in `add_cflags' from extconf.rb:415:in `<main>' To see why this extension failed to compile, please check the mkmf.log which can be found here: /home/myname/.gem/ruby/2.3.0/extensions/x86_64-unknown/2.3.0/nokogiri-1.6.8.1/mkmf.log extconf failed, exit code 1 Gem files will remain installed in /home/myname/.gem/ruby/2.3.0/gems/nokogiri-1.6.8.1 for inspection. Results logged to /home/myname/.gem/ruby/2.3.0/extensions/x86_64-unknown/2.3.0/nokogiri-1.6.8.1/gem_make.out
※ruby 2.3 では nokogiri をインストール出来ないという情報をネット上では見かけますが、、 $ ruby -v ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-msys]
gem でインストール出来るような気もしています $ gem list --remote nokogiri *** REMOTE GEMS *** backupify-rsolr-nokogiri (0.12.1.1) epp-nokogiri (1.0.1) glebm-nokogiri (1.4.2.1) jwagener-nokogiri (1.4.1) nokogiri (1.6.8.1 ruby java x64-mingw32 x86-mingw32, 1.6.1 x86-mswin32-60, 1.4.4.1 x86-mswin32) nokogiri-cache (1.0.0) nokogiri-diff (0.2.0) nokogiri-fitzsimmons (1.5.5.3 ruby java) nokogiri-happymapper (0.5.9) nokogiri-happymapper-deiga (0.5.10) nokogiri-maglev- (1.5.5.20120817130721) nokogiri-maven (1.5.0 java) nokogiri-plist (0.5.0) nokogiri-pretty (0.1.0) nokogiri-streaming-reader (0.0.4) nokogiri-styles (0.1.2) nokogiri-xml-range (0.1.0) nokogiri-xmlsec (0.0.4) nokogiri-xmlsec-me-harder (0.9.2) nokogiri-xmlsec1 (0.0.11) nokogiri_bang_finders (1.1.0) nokogiri_helper (0.0.1) nokogiri_html_helpers (0.1.4) nokogiri_truncate_html (0.0.4) rack-nokogiri (0.1.0) ratom-nokogiri (0.10.4) revo-nokogiri (1.4.1 java) rsolr-nokogiri (0.0.0) rss-nokogiri (0.0.1.1) rubyjedi-nokogiri_java (1.4.0.20100513161003 java) sax-machine-nokogiri-1.4.4-safe (0.0.15) schematron-nokogiri (0.0.1) spp_nokogiri_ext (0.0.5) superfeedr-nokogiri (1.4.0.20091116183308) tag_remover_nokogiri (0.0.2) tenderlove-nokogiri (0.0.0.20081001111445, 0.0.0 x86-mswin32-60) unobtainium-nokogiri (0.1.2) watir-nokogiri (1.0.0)
尚、ruby 2.2 の環境で `gem install nokogiri` を試してみたいのですが、 `rbenv` でもエラーとなり、試せていません。 $ rbenv install 2.2.2 Downloading ruby-2.2.2.tar.bz2... -> https://cache.ruby-lang.org/pub/ruby/2.2/ruby-2.2.2.tar.bz2 Installing ruby-2.2.2... BUILD FAILED (MSYS_NT-6.1 2.5.2(0.297/5/3) using ruby-build 20160913-13-g8ef0c34) Inspect or clean up the working tree at /tmp/ruby-build.20161021084522.6968 Results logged to /tmp/ruby-build.20161021084522.6968.log Last 10 log lines: ^ file.c: 関数 'rb_file_expand_path_internal' 内: file.c:3542:6: 警告: 関数 'cygwin_conv_to_win32_path' の暗黙的な宣言です [-Wimplicit-function-declaration] if (cygwin_conv_to_win32_path(path, w32buf) == 0) { ^ file.c:3548:6: 警告: 関数 'strlcat' の暗黙的な宣言です [-Wimplicit-function-declaration] strlcat(w32buf, p, bufsize); ^ make: *** [Makefile:363: file.o] エラー 1 make: *** 未完了のジョブを待っています....

解決の手がかりになる情報をご教示いただければ大変助かります。
宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

手元のMSYS2でnokogiriが入らない現象を確認しました。色々調べてみると、MSYS2のrubyパッケージで入るRubyのヘッダファイルがぶっ壊れています。少なくとも下記の二点で問題があります。

  • Windowsにはsys/select.hが存在し得ないが、ruby-2.3.0/x86_64-msys/ruby/config.hHAVE_SYS_SELECT_Hマクロが有効になっている。
  • Windows環境に必須であるはずのruby-2.3.0/ruby/win.hが存在しない。

nokogiriのコンパイル時にこれらRubyのヘッダファイルを使うのですが、このようにヘッダファイルが壊れているため、コンパイルが成功することはありません。一つ一つ修正すれば可能かも知れませが、かなり厳しいと思います。ということで、MSYS2のrubyパッケージは使わない事を推奨します。

そこで、代替手段です。

  1. mingw-w64-x86_64-rubyパッケージのRubyを使う。

MSYS環境では無く、MINGW64環境でしか使えませんが、どうせコンパイル時にはgccが必要でありMINGW64環境にするのであれば、些細な問題です。また、このパッケージのRubyの方が新しいバージョン(2.3.1)であること、nokogiriについてはCの拡張部分についてバイナリが用意されているためコンパイルしなくても入ること、と二つの利点があります。なお、nokogiriはgemで簡単に入ります。他の代替手段についても同様にgemでインストールできます。
2. RubyInstallerのRubyを使う。
MSYS2にする必要が必ずしも無ければ、RubyInstallerを使うことを推奨します。1.とほぼ一緒であり、同じくnokogiriにはバイナリが用意されています。
3. Vagrant等を使って、Linuxな仮想環境でRubyを使う。
Windowsと違って問題はほぼ起きません。
4. Bash on Ubuntu on WindowsでRubyを使う。(Windows 10のみ)
Windows 10 Anniversary Update(バージョン1607)でしか使えず、まだベータ版ということはありますが、3.と同じくLinuxであり、コンパイルに悩む必要は無くなります。3.とは違って仮想環境では無くWindowsのサブシステムとして動作するため、軽量です。
5. Windowsを捨ててLinuxを入れる。または、Macを買いに行く。

なお、rbenvがうまくいかない件については詳しく調べていませんが、Windows環境だからかも知れません。rbenvはUNIX/Linux環境しかサポートしません。MSYS2はUNIX/Linuxっぽい環境は提供しますが、そのものでは無く、多くの制約があります。このようにUNIX/Linux環境前提のアプリケーションがそのままではうまくコンパイル出来ないことは多々あります。エラーログを詳しく調べれば解決できるかも知れませんが、かなり厳しいです。

rbenvをどうしても使いたい場合は、上の3.、4.、5.の何れかの手段を使うことをお勧めします。なお、CygwinはMSYS2よりはUNIX/Linux環境をより深くエミュレートしてくれますが、完全ではありません。うまくいく可能性は高いですが、同じように嵌まる可能性も0ではありません。


【補足】
nokogiriがRuby 2.3系のWindowsで使えないという情報は、少し前のバージョンまでRuby 2.3系のバイナリを用意してなかったというバグがあったからです。現在そのバグは修正されており、Ruby 2.3系であっても問題なく使用できはずです。

投稿2016/10/21 14:28

編集2016/10/21 14:32
raccy

総合スコア21735

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tamurayk

2016/10/26 01:26

ご回答頂きありがとうございます 拝読し、MSYS2 で nokogiri が コンパイル出来ない理由が理解できました。 大変勉強になります。 > 1. mingw-w64-x86_64-rubyパッケージのRubyを使う こちらで試そうとしていますが、 MSYS2 と MinGW の違いがしっかり理解出来ていないことがわかりました。 * MSYS2 のインストールフォルダに mingw64.exe がある。これを使うとMSYS2のrubyパッケージを使う事になる? * 「MSYS2」で検索すると 「MinGW-w64 ツール チェーンを使用 し~」 のような事書いてる情報がでてくる。ということは、MSYS2 は 内部で MinGW を使用しているが、MSYS2 で pacman -S ruby して入った ruby は 「MSYS2のrubyパッケージ」ってことかな。 * 「mingw-w64-x86_64-rubyパッケージのRuby」っていうのは、どうしたら使えるんだろう * MinGW を単体でインスールして、cmd.exe からMinGWを使って Ruby をインストール? * cmd.exe は使いたくない、、 MYSYS2 は Cmder から実行していますので、同じように MinGW も Cmder から実行したいと思っており、調査中です。 > 5. Windowsを捨ててLinuxを入れる。または、Macを買いに行く 新型 MacBook Pro が発表されたら買い換える予定です。 (今回のような問題起きたときに、自力で解決できる力は必要ですので、今回の問題は Windows で解決しておきたいと考えています。)
raccy

2016/10/26 13:58 編集

> * MSYS2 のインストールフォルダに mingw64.exe がある。これを使うとMSYS2のrubyパッケージを使う事になる? MINGW64環境を使うにはmingw64.exe使うかスタートメニューの「MinGW-w64 Win64 Shell」から起動することでできます。実際はPATHに/mingw64/binが追加されるぐらいで、MSYS環境とほとんど変わりません。ショートカットやexeの内部でbashを起動するときに環境変数MSYSTEMがMSYSかMINGW64かで切り替わるという仕組みになっています。 > * 「mingw-w64-x86_64-rubyパッケージのRuby」っていうのは、どうしたら使えるんだろう "mingw-w64-x86_64-ruby"という別名のパッケージがあります。pacman -S mingw-w64-x86_64-rubyでこちらを入れると/mingw64/bin/rubyという形で実行できます。MINGW64環境であればPATHが通っているため、rubyで実行可能です。 > * MinGW を単体でインスールして、cmd.exe からMinGWを使って Ruby をインストール? 単純にMinGW64版Rubyを使う場合は、MSYS2よりもRubyInstallerを使うことをお勧めします。PATHさえ通しておけばcmdだけでなくGit for Windowsのbash等でも使えます。ConEmuやcmderと組み合わせると良いかともいます。 > MYSYS2 は Cmder から実行していますので、同じように MinGW も Cmder から実行したいと思っており、調査中です。 タスクに下記を設定すればいけるはずです。 set MSYSTEM=MINGW64 & [MSYS2のインストールパス]\usr\bin\bash --login -new_console:d:%USERPROFILE%
H.Hiro

2017/03/09 09:27 編集

困っていたのですが、この方法で解決できました。 結局、MSYS2上で動かすことを優先して mingw-w64-x86_64-ruby パッケージを使うことにしたのですが、 現在、これを単にpacmanでインストールする(`pacman -S mingw-w64-x86_64-ruby`)と、入るRubyのバージョンが2.4になり、nokogiri側が対応していないという問題が発生しました。 `pacman -U http://repo.msys2.org/mingw/x86_64/mingw-w64-x86_64-ruby-2.3.1-1-any.pkg.tar.xz` として、古いバージョンをインストールするようにすると大丈夫でした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問