RubyInstaller2でRuby2.4 with Rails5の環境を作る~Nokogiriでエラー~


Windows環境にRailsのver.5をインストールようとしてやはりNokogiriでエラッたのでそれまでの軌跡をメモ

開発環境(予定)

OS:Windows7
Ruby:ruby 2.4.0p0
Rails:Rails 5.0.2

失敗の軌跡

1.Rubyをインストールする

ruby installer2より対象のRubyをダウンロードしてインストール

もちろん入れるのは最新のRuby 2.4

2. MSYS2を入れる

インストールして何も考えずにFinishを押下すると
MSYS2を入れるcmd.exeが現れるので、インストールしていない場合は1と入力しEnter(下図)

するとMSYS2のセットアップ画面が開くので、MSYS2をインストールする(下図)

ここでインストールが環境した後になにげにENTERを入力してWindowを閉じたのですが、
ここが罠というか失敗の原因っぽかったです。

MSYS2のインストールが終わったら、sqlite3/nokogiriをインストールする

# sqlite3
> ridk exec pacman -S mingw-w64-x86_64-sqlite3
> gem install sqlite3 --platform ruby

# Nokogiri
> ridk exec pacman -S mingw-w64-x86_64-libxslt
> gem install nokogiri --platform ruby -- --use-system-libraries --with-xml2-include=c:/msys64/mingw64/include/libxml2 --with-xslt-dir=c:/msys64/mingw64

と思ったらNokogiriがインストールできない

Error↓

C:\tools>gem install nokogiri -v 1.7.0.1 --platform ruby -- --use-system-libraries --with-xml2-include=c:/msys64/mingw64/include/libxml2 --with-xslt-dir=c:/msys64/mingw64
Temporarily enhancing PATH for MSYS/MINGW...
Building native extensions with: '--use-system-libraries --with-xml2-include=c:/msys64/mingw64/include/libxml2 --with-xslt-dir=c:/msys64/mingw64'
This could take a while...
ERROR:  Error installing nokogiri:
        ERROR: Failed to build gem native extension.

    current directory: C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/nokogiri-1.7.0.1/ext/nokogiri
C:/Ruby24-x64/bin/ruby.exe -r ./siteconf20170309-19200-t9wqwc.rb extconf.rb --use-system-libraries --with-xml2-include=c:/msys64/mingw64/include/libxml2 --with-xslt-dir=c:/msys64/m
ingw64
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=C:/Ruby24-x64/bin/$(RUBY_BASE_NAME)
        --help
        --clean
C:/Ruby24-x64/lib/ruby/2.4.0/mkmf.rb:457:in `try_do': The compiler failed to generate an executable file. (RuntimeError)
You have to install development tools first.
        from C:/Ruby24-x64/lib/ruby/2.4.0/mkmf.rb:572:in `block in try_compile'
        from C:/Ruby24-x64/lib/ruby/2.4.0/mkmf.rb:523:in `with_werror'
        from C:/Ruby24-x64/lib/ruby/2.4.0/mkmf.rb:572:in `try_compile'
        from extconf.rb:138:in `nokogiri_try_compile'
        from extconf.rb:162:in `block in add_cflags'
        from C:/Ruby24-x64/lib/ruby/2.4.0/mkmf.rb:630:in `with_cflags'
        from extconf.rb:161:in `add_cflags'
        from extconf.rb:406:in `<main>'

To see why this extension failed to compile, please check the mkmf.log which can be found here:

  C:/Ruby24-x64/lib/ruby/gems/2.4.0/extensions/x64-mingw32/2.4.0/nokogiri-1.7.0.1/mkmf.log

extconf failed, exit code 1

Gem files will remain installed in C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/nokogiri-1.7.0.1 for inspection.
Results logged to C:/Ruby24-x64/lib/ruby/gems/2.4.0/extensions/x64-mingw32/2.4.0/nokogiri-1.7.0.1/gem_make.out

いろんなサイト様をいったりきたりして、原因を探す...
が、正直なところ、原因はわかりませんでした。
(多分「You have to install development tools first.」とあるので必要な何かが入っていないんでしょう...)

ここで、参考にさせていただいていた下記記事を確認
RubyInstaller2でWindows環境にRuby 2.4 + Rails 5.0.2をインストールする

解決

MSYS2を入れた後に「msys2 and mingw development toolchain」やってなくね??

原因はこれでした

解決までの道のり

1. MSYS2/Rubyをアンインストールする。

どうせならと両方削除します。
両方とも、コントロールパネルよりアンインストールできるので、一度きれいにします。

2. MSYS2をインストール

MSYS2 Installerより、インストーラーをダウンロードし、対象のファイルをダウンロードし、実行します。

3. Ruby 2.4をインストール

落としておいたRuby2.4のInstallerを再度実行

4. MSYS2 and MINGW development toolchain の実行

Installerが終了した後にMSYS2のcmd.exeが現れるので今度は[3]を実施
([2.MSYS2をインストール]を実施しなければMSYS2のcmd.exeで1⇒3の順に実施すれば良いだけかも)

5. gemのインストール

再度下記を実施します

# sqlite3
> ridk exec pacman -S mingw-w64-x86_64-sqlite3
> gem install sqlite3 --platform ruby

# Nokogiri
> ridk exec pacman -S mingw-w64-x86_64-libxslt
> gem install nokogiri --platform ruby -- --use-system-libraries --with-xml2-include=c:/msys64/mingw64/include/libxml2 --with-xslt-dir=c:/msys64/mingw64

※nokogiriのインストール結果

C:\work>ridk exec pacman -S mingw-w64-x86_64-libxslt
resolving dependencies...
looking for conflicting packages...

Packages (5) mingw-w64-x86_64-libgcrypt-1.7.3-1  mingw-w64-x86_64-libgpg-error-1.24-1  mingw-w64-x86_64-libxml2-2.9.4-2  mingw-w64-x86_64-xz-5.2.2-1
             mingw-w64-x86_64-libxslt-1.1.29-2

Total Download Size:    2.86 MiB
Total Installed Size:  19.93 MiB

:: Proceed with installation? [Y/n] Y
:: Retrieving packages...
 mingw-w64-x86_64-xz-5.2.2-1-any                                                    290.5 KiB   955K/s 00:00 [###############################################################] 100%
 mingw-w64-x86_64-libxml2-2.9.4-2-any                                              1420.2 KiB   860K/s 00:02 [###############################################################] 100%
 mingw-w64-x86_64-libgpg-error-1.24-1-any                                           190.2 KiB  1243K/s 00:00 [###############################################################] 100%
 mingw-w64-x86_64-libgcrypt-1.7.3-1-any                                             579.2 KiB  1265K/s 00:00 [###############################################################] 100%
 mingw-w64-x86_64-libxslt-1.1.29-2-any                                              453.0 KiB  1490K/s 00:00 [###############################################################] 100%
(5/5) checking keys in keyring                                                                               [###############################################################] 100%
(5/5) checking package integrity                                                                             [###############################################################] 100%
(5/5) loading package files                                                                                  [###############################################################] 100%
(5/5) checking for file conflicts                                                                            [###############################################################] 100%
(5/5) checking available disk space                                                                          [###############################################################] 100%
:: Processing package changes...
(1/5) installing mingw-w64-x86_64-xz                                                                         [###############################################################] 100%
(2/5) installing mingw-w64-x86_64-libxml2                                                                    [###############################################################] 100%
Compiling /mingw64/lib/python2.7/site-packages...
(3/5) installing mingw-w64-x86_64-libgpg-error                                                               [###############################################################] 100%
(4/5) installing mingw-w64-x86_64-libgcrypt                                                                  [###############################################################] 100%
(5/5) installing mingw-w64-x86_64-libxslt                                                                    [###############################################################] 100%
Compiling /mingw64/lib/python2.7/site-packages...

C:\work>gem install nokogiri --platform ruby -- --use-system-libraries --with-xml2-include=c:/msys64/mingw64/include/libxml2 --with-xslt-dir=c:/msys64/mingw64
Temporarily enhancing PATH for MSYS/MINGW...
Building native extensions with: '--use-system-libraries --with-xml2-include=c:/msys64/mingw64/include/libxml2 --with-xslt-dir=c:/msys64/mingw64'
This could take a while...
Successfully installed nokogiri-1.7.0.1
Parsing documentation for nokogiri-1.7.0.1
Installing ri documentation for nokogiri-1.7.0.1
Done installing documentation for nokogiri after 9 seconds
1 gem installed

無事に入りました

6. railsのインストール

gem install rails で一発で入りました

C:\work>gem install rails
Fetching: loofah-2.0.3.gem (100%)
Successfully installed loofah-2.0.3
Fetching: rails-html-sanitizer-1.0.3.gem (100%)
Successfully installed rails-html-sanitizer-1.0.3
Fetching: rails-dom-testing-2.0.2.gem (100%)
Successfully installed rails-dom-testing-2.0.2
Fetching: builder-3.2.3.gem (100%)
~(長いので略)~
Installing ri documentation for rails-5.0.2
Done installing documentation for loofah, rails-html-sanitizer, rails-dom-testing, builder, erubis, actionview, actionpack, activemodel, arel, activerecord, globalid, activejob, ma
il, actionmailer, nio4r, websocket-extensions, websocket-driver, actioncable, thor, method_source, railties, bundler, sprockets, sprockets-rails, rails after 65 seconds
25 gems installed

7. 最終確認

各バージョンをコマンドで確認します

C:\work>rails -v
Rails 5.0.2

C:\work>ruby -v
ruby 2.4.0p0 (2016-12-24 revision 57164) [x64-mingw32]

C:\work>gem list

*** LOCAL GEMS ***

actioncable (5.0.2)
actionmailer (5.0.2)
actionpack (5.0.2)
actionview (5.0.2)
activejob (5.0.2)
activemodel (5.0.2)
activerecord (5.0.2)
activesupport (5.0.2)
arel (7.1.4)
bigdecimal (default: 1.3.0)
builder (3.2.3)
bundler (1.14.6)
concurrent-ruby (1.0.5)
did_you_mean (1.1.0)
domain_name (0.5.20170223)
erubis (2.7.0)
globalid (0.3.7)
http-cookie (1.0.3)
i18n (0.8.1)
io-console (default: 0.4.6)
json (default: 2.0.2)
loofah (2.0.3)
mail (2.6.4)
method_source (0.8.2)
mime-types (3.1)
mime-types-data (3.2016.0521)
mini_portile (0.5.3)
mini_portile2 (2.1.0)
minitest (5.10.1)
net-http-digest_auth (1.4.1)
net-http-persistent (2.9.4)
net-telnet (0.1.1)
nio4r (2.0.0)
nokogiri (1.7.0.1)
openssl (default: 2.0.2)
power_assert (0.4.1)
psych (default: 2.2.2)
rack (2.0.1)
rack-test (0.6.3)
rails (5.0.2)
rails-dom-testing (2.0.2)
rails-html-sanitizer (1.0.3)
railties (5.0.2)
rake (12.0.0)
rdoc (default: 5.0.0)
sprockets (3.7.1)
sprockets-rails (3.2.0)
sqlite3 (1.3.13 ruby x64-mingw32)
test-unit (3.2.3)
thor (0.19.4)
thread_safe (0.3.6)
tzinfo (1.2.2)
unf (0.1.4)
unf_ext (0.0.7.2 x64-mingw32)
websocket-driver (0.6.5)
websocket-extensions (0.1.2)
xmlrpc (0.2.1)

参考サイト様

RubyInstaller2でWindows環境にRuby 2.4 + Rails 5.0.2をインストールする
MSYS2 installer
MSYS2 based RubyInstaller for Windows
Releases - larskanis/rubyinstaller2

2017/03/21追記

@akaneko3 さんより、ご指摘をいただきました。(まま抜粋)
rails new するときに bundler が同時に走りますが、その際に使われる nokogiri は 1.6.6.4 が使われるようです。現段階では 1.7.0.1 ではなく 1.6.6.4 に決め打ちしてインストールしないと行けなさそうです。

gem install nokogiri -v 1.6.6.4 --platform ruby -- --use-system-libraries --with-xml2-include=c:/msys64/mingw64/include/libxml2 --with-xslt-dir=c:/msys64/mingw64

どうしてもnokogiri 1.7.0.1を入れたい場合はコメントに記載していただいている。方法もしくは、
コメントに張っていただいている下記記事を参考にすると入るらしいですが、あくまで推奨はされていない模様

Windows でも Ruby 2.4.0 が使えるんです。そう、RubyInstaller2 ならね。

@akaneko3 さん教えていただきありがとうございました。