1. yoshioka-s

    Posted

    yoshioka-s
Changes in title
+HerokuでImageMagickのconvertができるまで
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,53 @@
+# やりたいこと
+Node.jsのwebアプリで、アップロードされたaiファイルやpsdファイルをjpgに変換して表示する機能を作ったのですが、Herokuへのデプロイでハマったので解決方法と共にメモします。
+
+画像変換にはImageMagickを、[imagemagick](https://www.npmjs.com/package/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](https://elements.heroku.com/buildpacks/nurveteam/heroku-buildpack-ghostscript) を入れてconvertを実行したところ、
+`Unrecognized switch` 云々というエラーが。ググっても手がかりがないので難儀しましたが、[bvirletのheroku-buildpack-ghostscript](https://elements.heroku.com/buildpacks/bvirlet/heroku-buildpack-ghostscript)を使うようにしたら直りました。
+`heroku buildpacks:add https://github.com/bvirlet/heroku-buildpack-ghostscript.git`
+
+# 感想
+herokuは便利だけど、デバッグが大変。ImageMagick関連は意外と情報が少ない。