プログラマ・アゲイン blog

還暦を過ぎたけどプログラマ復帰を目指してブログ始めました

RMagicライブラリーの導入方法

以前のブログ「rubyXLを使用したExcel操作」で、画像情報を抽出して Excelに書き出すのに RMagickを使用していることを書きました。

RMagickとは、ImageMagickRubyで扱えるようにした gemであり、Ruby用のImageMagickインターフェースといったところです。

ImageMagickとは、コマンドラインから画像処理を可能にするツールです。多くの画像ファイル形式に対応しており、サイズの変更や画像の合成、画像の分析、画像の作成などができます。

RMagickの説明は、以下のページに書かれています。

techacademy.jp

今回 Windows 10環境に RMagickを再導入した時に苦労したので、記録しておきます。

 

RMagic導入時のエラー

単純に RMagickを gemコマンドで導入しただけでは、エラーになって導入できません。

4.2.2の場合

バージョンの指定をせずに導入しようとすると、バージョン 4.2.2 の RMagickが選択されますが、以下のようなエラーになります。

C:\Ruby26-x64>gem install rmagick
Fetching rmagick-4.2.2.gem
Temporarily enhancing PATH for MSYS/MINGW...
Building native extensions. This could take a while...
ERROR:  Error installing rmagick:
        ERROR: Failed to build gem native extension.

    current directory: C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/rmagick-4.2.2/ext/RMagick
C:/Ruby26-x64/bin/ruby.exe -I C:/Ruby26-x64/lib/ruby/2.6.0 -r ./siteconf20210825-19420-yvfc13.rb extconf.rb
checking for Ruby version >= 2.3.0... yes
checking for magick... no
checking for identify... no
*** 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:/Ruby26-x64/bin/$(RUBY_BASE_NAME)
extconf.rb:373:in `magick_command': no executable found for ImageMagick (NotImplementedError)
        from extconf.rb:301:in `assert_has_dev_libs!'
        from extconf.rb:267:in `assert_can_compile!'
        from extconf.rb:18:in `initialize'
        from extconf.rb:398:in `new'
        from extconf.rb:398:in `main' 
To see why this extension failed to compile, please check the mkmf.log which can be found here:

  C:/Ruby26-x64/lib/ruby/gems/2.6.0/extensions/x64-mingw32/2.6.0/rmagick-4.2.2/mkmf.log

extconf failed, exit code 1

Gem files will remain installed in C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/rmagick-4.2.2 for inspection.
Results logged to C:/Ruby26-x64/lib/ruby/gems/2.6.0/extensions/x64-mingw32/2.6.0/rmagick-4.2.2/gem_make.out

2.16.0の場合

そこで、以前導入していたバージョン 2.16.0 を指定して導入しましたが、やはり以下のようなエラーになります。

c:\Ruby26-x64>gem install rmagick -v 2.16.0
Fetching rmagick-2.16.0.gem
Temporarily enhancing PATH for MSYS/MINGW...
Building native extensions. This could take a while...
ERROR:  Error installing rmagick:
        ERROR: Failed to build gem native extension.

    current directory: C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/rmagick-2.16.0/ext/RMagick
C:/Ruby26-x64/bin/ruby.exe -I C:/Ruby26-x64/lib/ruby/2.6.0 -r ./siteconf20210825-19444-1irh3v5.rb extconf.rb
*** 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.

・・・

 

両方とも共通して、「Could not create Makefile due to some reason, probably lack of necessary libraries and/or headers.」のエラーが出ています。そう言えば、使用しているパソコンが変わったので、ImageMagickが導入されていないことに気が付きました。

そこで、先ず ImageMagickを導入します。

 

ImageMagickの導入

以下のページを参考に、ImageMagickを導入します。

www.ownway.info

バージョンの選択

RMagickの現在最新のバージョンは 4.2.2 のようですが、以前は 2.16.0 を導入しました。記載したページでもバージョン 2.16.0 までなので、RMagickは再度バージョン 2.16.0 を導入することとし、結果として ImageMagickのバージョンは 6系を導入することにします。

 

ダウンロードと導入

ダウンロードから、インストールまでは、以下の流れでした。

ダウンロード

ImageMagick 6系をダウンロードするには、以下のページの、ImageMagick本家の binariesディレクトリ配下に置いてある古いバイナリを選びます。

Index of /ImageMagick/download/binaries

このページの中で、どのファイルを選択するか、以下の基準と稼働実績から決めた結果、「ImageMagick-6.9.12-20-Q16-x64-dll.exe」をダウンロードしました。

  • dll版を使用する
  • x64を選択する
  • Q16を選択する
インストーラの実行

ダウンロードしたファイルをダブルクリックして、実行します。

ここから、導入画面が続きます。

「I accept the agreement」を選択して、「Next」をクリックします。

f:id:hanasakag:20210825172251p:plain

「Next」をクリックします。

f:id:hanasakag:20210825172515p:plain

導入ディレクトリーを変える必要がなければ、デフォルトのまま「Next」をクリックします。

f:id:hanasakag:20210825172537p:plain

スタート・メニューのフォルダー名を変える必要がなければ、デフォルトのまま「Next」をクリックします。

f:id:hanasakag:20210825172647p:plain

チェック・ボックスにチェックして導入する追加タスクを選択し、「Next」をクリックします。

デフォルトで、「Create a desktop icon」、「Add application deirector to your system path」、「Install FFmpeg」はチェックが付いていますが、必要に応じてはずしてください。ただ、「Add application deirector to your system path」、「Install development headers and libraries for C and C++」は、必ず選択します。

f:id:hanasakag:20210825173657p:plain

確認して問題が無ければ、「Install」をクリックして導入を開始します。

f:id:hanasakag:20210825173942p:plain

インストールが終了すると、インフォメーションが表示されるので、確認して「Next」をクリックします。

f:id:hanasakag:20210825174103p:plain

インストールが終了すると完了画面が出るので、デフォルトのまま「finish」をクリックします。ただし、リリース・ノートを見る必要がなければ、チェックを外しておきます。

f:id:hanasakag:20210825174414p:plain

導入確認

導入が完了したので、稼働確認してみます。以下のようにコマンドを打ってみました。

C:\WINDOWS\system32>cd C:\Program Files\ImageMagick-6.9.12-Q16\images

C:\Program Files\ImageMagick-6.9.12-Q16\images>convert wizard: wizard.jpg

C:\Program Files\ImageMagick-6.9.12-Q16\images>convert wizard.jpg win:

1行目で、ImageMagickを導入したディレクトリーに移動しています。そこへ移動しないと、「無効なパラメーターです - wizard.jpg」のようなエラーになりました。

2行目は、エラーにはならなかったのですが、何も表示されませんでした。

3行目は、ImageMagick Displayが立ち上がって、画像が表示されました。画像が表示されたので、導入は大丈夫だと思います。

 

環境変数の設定

RMagickコンパイル時、ImageMagickのインクルードファイルおよびライブラリファイルが見えるように、環境変数を設定します。

設定

「設定」→「システム」→「詳細情報」→「システムの詳細設定」→「環境変数」の順にクリックし、CPATHと LIBRARY_PATHを以下のように新規に設定します。

f:id:hanasakag:20210826103714p:plain

確認

コマンド・プロンプトで、設定されていることを確認します。

f:id:hanasakag:20210826103821p:plain

以上で、ImageMagickの導入は終了です。

 

RMagickの導入

準備が整ったので以下のコマンドを実行し、RMagick をインストールします。

gem install rmagick -v 2.16.0

導入

正常に導入されたようで、導入結果は以下のようになりました。

Temporarily enhancing PATH for MSYS/MINGW...
Building native extensions. This could take a while...
Successfully installed rmagick-2.16.0
Parsing documentation for rmagick-2.16.0
Installing ri documentation for rmagick-2.16.0
Done installing documentation for rmagick after 3 seconds
1 gem installed

 

導入確認

本当に正常に導入されたか、確認してみます。

gemの確認

先ずは、gemコマンドで確認します。以下のように、表示されます。

C:\DATA>gem list --local rmagick

*** LOCAL GEMS ***

rmagick (2.16.0)
稼働確認

次に、稼働を確認してみましたが、以下のようなエラーとなり稼働しません。

ここで、RMagic2.soが LoadErrorで見つからないと言われているようなのですが、エクスプローラーで確認する限りは存在しています。

どこかの設定が違っているようです。

C:\DATA>ruby -e "require 'rmagick';puts Magick::colors"
Traceback (most recent call last):
        2: from -e:1:in `(main)' 
        1: from C:/Ruby26-x64/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require' 
    C:/Ruby26-x64/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require': cannot load such file -- rmagick (LoadError) 
        9: from -e:1:in `(main)' 
        8: from C:/Ruby26-x64/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:34:in `require' 
        7: from C:/Ruby26-x64/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:130:in `rescue in require' 
        6: from C:/Ruby26-x64/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:130:in `require' 
        5: from C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/rmagick-2.16.0/lib/rmagick.rb:1:in `' 
        4: from C:/Ruby26-x64/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require' 
        3: from C:/Ruby26-x64/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require' 
        2: from C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/rmagick-2.16.0/lib/rmagick_internal.rb:12:in `' 
        1: from C:/Ruby26-x64/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require' 
    C:/Ruby26-x64/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require': 126: 指定されたモジュールが見つかりま せん。
    - C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/rmagick-2.16.0/lib/RMagick2.so (LoadError) 
    ・・・

 

トラブル対応

RMagickが正常に稼働しないので、改めて ImageMagickと RMagickの再導入を覚悟してトラブル対応をしました。

設定変更

取り敢えずネットをググったところ、沢山の同じような事象に合われている方がいることが判りました。それらの中から、以下の対応を試してみます。

gem pristine

gem pristineとは、インストールされた gemをそのキャッシュされた .gemファイルの内容と比較し、キャッシュされた .gemのコピーと一致しないファイルを復元することだそうです。

以下のように実行はできたのですが、RMagick稼働確認では、同じエラーで動きませんでした。

C:\DATA>gem pristine rmagick
Restoring gems to pristine condition...
Temporarily enhancing PATH for MSYS/MINGW...
Building native extensions. This could take a while...
Restored rmagick-2.16.0
LD_LIBRARY_PATH

LD_LIBRARY_PATH環境変数に、パスを設定すると良いとのことだったので、以下のように LIBRARY_PATHと同じ ImageMagickのパスを設定してみました。

結果は、RMagick稼働確認では、同じエラーで動きませんでした。

C:\DATA>set LD_LIBRARY_PATH=C:\Program Files\ImageMagick-6.9.12-Q16\lib

C:\DATA>echo %LD_LIBRARY_PATH%
C:\Program Files\ImageMagick-6.9.12-Q16\lib

 

RMagickの再導入

そこで、RMagickを再導入することにします。再導入にあたっては、導入バージョン 2.16.0 は削除し、最新バージョンの 4.2.2 を 導入することにします。

因みに、確認すると RMagickには以下のバージョンがあるようです。

rmagick (4.2.2, 4.2.1, 4.2.0, 4.1.2, 4.1.1, 4.1.0, 4.0.0, 3.2.0, 3.1.0, 3.0.0, 2.16.0, 2.15.4, 2.15.3, 2.15.2, 2.15.1, 2.15.0, 2.14.0, 2.13.4, 2.13.3, 2.13.2, 2.13.1, 2.12.2, 2.12.1, 2.12.0, 2.11.1, 2.11.0, 2.10.0, 2.9.2, 2.9.1, 2.9.0, 2.8.0, 2.7.2, 2.7.1, 2.7.0, 2.6.0, 2.5.2, 2.5.1, 2.5.0, 2.4.0, 2.3.0, 2.2.2, 2.2.0, 2.1.0, 2.0.0, 1.15.17, 1.15.16, 1.15.15, 1.15.14, 1.15.13, 1.15.12, 1.15.11, 1.15.10, 1.15.9, 1.15.8, 1.15.7, 1.15.6, 1.15.5, 1.15.4, 1.15.3, 1.15.2, 1.15.1, 1.15.0, 1.14.1, 1.14.0, 1.13.0, 1.12.0, 1.11.1, 1.11.0, 1.10.1, 1.10.0, 1.9.3, 1.9.2, 1.9.1, 1.9.0, 1.8.3, 1.8.2, 1.8.1, 1.8.0, 1.7.4, 1.7.3, 1.7.2, 1.7.1)
uninstall

RMagickバージョン 2.16.0 を削除します。

C:\DATA>gem uninstall rmagick
Successfully uninstalled rmagick-2.16.0

C:\DATA>gem list rmagick

*** LOCAL GEMS ***
install

最新の RMagickバージョン 4.2.2 を導入します。

C:\DATA>gem install rmagick
Temporarily enhancing PATH for MSYS/MINGW...
Building native extensions. This could take a while...
Successfully installed rmagick-4.2.2
Parsing documentation for rmagick-4.2.2
Installing ri documentation for rmagick-4.2.2
Done installing documentation for rmagick after 3 seconds
1 gem installed

C:\DATA>gem list rmagick

*** LOCAL GEMS ***

rmagick (4.2.2)
稼働確認

導入が正常にできたので、RMagickの稼働確認を行います。

C:\DATA>ruby -e "require 'rmagick';puts Magick::colors"
name=AliceBlue, compliance=AllCompliance, color.red=61680, color.green=63736, color.blue=65535, color.alpha=65535
name=AntiqueWhite, compliance=AllCompliance, color.red=64250, color.green=60395, color.blue=55255, color.alpha=65535
name=AntiqueWhite1, compliance=X11Compliance, color.red=65535, color.green=61423, color.blue=56283, color.alpha=65535
name=AntiqueWhite2, compliance=X11Compliance, color.red=61166, color.green=57311, color.blue=52428, color.alpha=65535
name=AntiqueWhite3, compliance=X11Compliance, color.red=52685, color.green=49344, color.blue=45232, color.alpha=65535
name=AntiqueWhite4, compliance=X11Compliance, color.red=35723, color.green=33667, color.blue=30840, color.alpha=65535
・・・

 

今度は、正常に稼働しました。

これで、以下のバージョンの組み合わせでは、RMagickは稼働するようです。

 

今回、ImageMagick 6系を導入しましたが、機会があれば最新バージョンの 7系を導入して、RMagickの導入と稼働が出来るか試してみたいと思います。