tweeeetyのぶろぐ的めも

アウトプットが少なかったダメな自分をアウトプット<br>\(^o^)/

bundle installがrmagickでインストールできないのがImagemagick 7が原因の件 - `An error occurred while installing rmagick (2.16.0), and Bundler cannot continue`

はじめに

ちょっとしたことをやろうとbundle installを気軽にしたところ
こんなエラーでコケました

$ bundle install

~ 省略 ~ 
An error occurred while installing rmagick (2.16.0), and Bundler cannot continue.
Make sure that `gem install rmagick -v '2.16.0'` succeeds before bundling.
~ 省略 ~ 

その際にちょっとはまったのでメモ

もくじ

  1. はまったこと
  2. 対処法

1. はまったこと

結果、あとでぐぐることにはなるのですが、
へたにエラー文字列にgem install rmagick -v '2.16.0'をやれよな!と出てくるのでそれを信じて実行しだしてハマります。

ちなみに実行してみた結果はこんな感じ

# 書いてあるとおりに実行すると...
$ gem install rmagick -v '2.16.0'
Building native extensions.  This could take a while...
ERROR:  Error installing rmagick:
  ERROR: Failed to build gem native extension.

    current directory: /Users/tweeeety/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/rmagick-2.16.0/ext/RMagick
/Users/tweeeety/.rbenv/versions/2.4.1/bin/ruby -r ./siteconf20180323-8727-1v6xnw6.rb extconf.rb

checking for clang... yes
checking for Magick-config... no
checking for pkg-config... yes
checking for outdated ImageMagick version (<= 6.4.9)... no
checking for presence of MagickWand API (ImageMagick version >= 6.9.0)... no
checking for Ruby version >= 1.8.5... yes
checking for stdint.h... yes
checking for sys/types.h... yes
checking for wand/MagickWand.h... no

Can't install RMagick 2.16.0. Can't find MagickWand.h.
*** 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=/Users/tweeeety/.rbenv/versions/2.4.1/bin/$(RUBY_BASE_NAME)

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

  /Users/tweeeety/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/extensions/x86_64-darwin-13/2.4.0-static/rmagick-2.16.0/mkmf.log

extconf failed, exit code 1

Gem files will remain installed in /Users/tweeeety/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/rmagick-2.16.0 for inspection.
Results logged to /Users/tweeeety/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/extensions/x86_64-darwin-13/2.4.0-static/rmagick-2.16.0/gem_make.out

なんでやねん!と思ってログを見るとこんな感じ

find_executable: checking for clang... -------------------- yes

--------------------

find_executable: checking for Magick-config... -------------------- no

--------------------

find_executable: checking for pkg-config... -------------------- yes

--------------------

configure_compile_options: checking for outdated ImageMagick version (<= 6.4.9)... -------------------- no

imagemagickのversionがダメみたい...!?

2. 対処法

調べるとrmagickはimagemagickのバージョン7に対応していないからとのこと

ログにもImageMagick version (<= 6.4.9) と出てましたね。

imagemagickのversionを確認する

とはいえ目で見てみないとわからないのでversionを確認してみます。

$ brew info imagemagick
imagemagick: stable 7.0.7-27, HEAD
Tools and libraries to manipulate images in many formats
https://www.imagemagick.org/

~ 省略 ~ 

確かに7.0.7-27です

また、imagemagickのコマンドである
convertコマンドを見てみるとこんな感じになっています。

# シンボリックリンクになっている
$ ls -al /usr/local/bin/convert
lrwxr-xr-x  1 tweeeety  tweeeety  42  3 23 22:36 /usr/local/bin/convert -> ../Cellar/imagemagick/7.0.7-27/bin/convert

これはなに

brewでinstallすると、/usr/local/Cellar配下に置かれます。
実行するコマンドは/usr/local/bin配下にあり、/usr/local/Cellar配下の実態へのシンボリックリンクになっています。

なので、imagemagickの6を入れてシンボリックリンクを貼り直せば良いです。

imagemagickのversionをさげる

ということで、任意のversionを入れてlinkを貼り直します。

# 念のため確認
$ ls -al /usr/local/bin/convert
lrwxr-xr-x  1 tweeeety  tweeeety  42  3 23 22:36 /usr/local/bin/convert -> ../Cellar/imagemagick/7.0.7-27/bin/convert

# 6をインストール
$ brew install imagemagick@6

# 最初にlinkをはずしておく
$ brew unlink imagemagick

# imagemagick@6をリンクする
$ brew link --force imagemagick@6

# 確認
# ../Cellar/imagemagick@6/6.9.9-39/bin/convertへのリンクになってる
$ ls -al /usr/local/bin/convert
lrwxr-xr-x  1 tweeeety  tweeeety  44  3 24 00:04 /usr/local/bin/convert -> ../Cellar/imagemagick@6/6.9.9-39/bin/convert

ここまできたら
gem install rmagick -v '2.16.0'をする必要はなく、
bundle installが通るようになります

注意

brew unlink をするまえに brew link をすると怒られます

$ brew link --force imagemagick@6
Linking /usr/local/Cellar/imagemagick@6/6.9.9-39... 
Error: Could not symlink bin/Magick++-config
Target /usr/local/bin/Magick++-config
is a symlink belonging to imagemagick. You can unlink it:
  brew unlink imagemagick

To force the link and overwrite all conflicting files:
  brew link --overwrite imagemagick@6

To list all files that would be deleted:
  brew link --overwrite --dry-run imagemagick@6

参考

おわり

ちょっとしたことでハマるーーーーーーー\(^o^)/