Chefでscreenshot-as-a-serviceをインストール出来るようしてみた。
Chefでスクリーンショットサーバーを立てる話です。
現在開発中のアプリケーションにおいて、サーバーでスクリーンショットを取る必要があったためどうしようかと悩んでいた所、screenshot-as-a-serviceなるものを見つけたので、chefからインストール出来るようにレシピを書いてみました。
fzaninotto / screenshot-as-a-service
このアプリはnode.jsとphantomjsを使用してサーバーサイドでhtml,css,javascriptを動かしてレンダリングしてスクリーンショットを取ることを可能にしてくれるアプリです。便利!APIを叩くと生成されたスクリーンショットを返してくれます。
curl http://localhost:3000/?url=www.google.com > google.png
こんな感じで動きます。 私はrubyから叩いていたので以下のような形で使ってました。
def shot() open("http://localhost:4000?url=http://google.com").read end file = Tempfile.new(["screenshot", '.png'], 'tmp', :encoding => 'ascii-8bit') file.write shot(urlmodel.url)
自分でnodejsでも使って実装しておきたい所だったんですが、とりあえず開発中のアプリを動かすために、パーツとして組み込んだほうが圧倒的に早いのでさくっと使わせて頂きました。
当初はgemとして提供されているIMGKitを用いて実装しようとしていたのですが、このgemが使用しているwkhtmltoimageではjavascriptを使用しているサイトなど、きれいにスクリーンショットを取れないサイトが出てきました。phantomjsを使用しているこちらのアプリを使用するとjavascript使ってるサイトとかでもきれいにレンダリングできたのでこちらを使用して行きます。
ということで今回作ったchefレシピがこちら。
yss44 / chef-screenshot-as-a-service
initスクリプトがredhad系のos向けになっていますし、CentOSでした起動確認してませんがご了承を。defaultでポート4000番で待ち受ける設定になってます。