LoginSignup
16
15

More than 5 years have passed since last update.

HerokuでImageMagickのconvertができるまで

Last updated at Posted at 2017-06-07

やりたいこと

Node.jsのwebアプリで、アップロードされたaiファイルやpsdファイルをjpgに変換して表示する機能を作ったのですが、Herokuへのデプロイでハマったので解決方法と共にメモします。

画像変換にはImageMagickを、imagemagickというライブラリを経由して利用しました。
(今回の問題はNode関係なくどの言語でも共通だと思います)

開発環境では

ローカルの開発環境 (macOS) では、
brew install imagemagick
でImageMagickをインストールし、またaiファイルを変換するためにGhostscriptをインストールしました。
brew install ghostscript

ターミナルで convert sample.ai sample.jpg を実行すると画像が変換できたことが確認できます。
psdファイルの場合は、flattenオプションをつけないと各レイヤーごとのファイルが出力されてしまいます。
convert sample.psd -flatten sample.jpg

簡単。

Herokuにデプロイ

さて、デプロイです。
HerokuのサーバーでもImageMagickとGhostscriptをインストールする必要があります。Herokuではdynoが起動するたびにインスタンスがリセットされてしまうので、build packsという仕組みで必要なツールをビルドのたびにインストールします。

ImageMagick

ImageMagickのビルドパックは公式からは提供されていませんが、カスタムビルドパックを作ってる人がいるのでこれを利用します。

heroku buildpacks:add https://github.com/ello/heroku-buildpack-imagemagick

これでImageMagickのカスタムビルドパックの追加が完了です。これでHeroku上でImageMagickが使えるはず・・・と思いきや、デプロイしてheroku run magick -versionを実行してみると、

bash: magick: command not found

とエラーが帰ってきます。ImageMagickがインストールされていない・・・?

散々情報を集めたり試行錯誤を繰り返す中、convertコマンドを使った時には別のエラーが吐かれていることに気づきました。曰く、

convert: error while loading shared libraries: libgvc.so.6: cannot open shared object file: No such file or directory

このlibgvc.so.6というのを調べてみると、Graphbizというプログラムに関わるものらしい。Graphbizのビルドパックも追加してみます。

heroku buildpacks:add https://github.com/weibeld/heroku-buildpack-graphviz.git

デプロイし直して再度heroku run magick -versionを実行すると、ちゃんとバージョン情報が返ってきました。convertコマンドも使えました。これでImageMagickの基本的な機能は使えるはずです。

Ghostscript

aiファイルの変換には、Ghotstscriptのインストールが必要なので、これもビルドパックでインストールします。

ここでまたハマりました。
nurvetemamのheroku-buildpack-ghostscript を入れてconvertを実行したところ、
Unrecognized switch 云々というエラーが。ググっても手がかりがないので難儀しましたが、bvirletのheroku-buildpack-ghostscriptを使うようにしたら直りました。
heroku buildpacks:add https://github.com/bvirlet/heroku-buildpack-ghostscript.git

感想

herokuは便利だけど、デバッグが大変。ImageMagick関連は意外と情報が少ない。

16
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
15