読者です 読者をやめる 読者になる 読者になる

そんな今日この頃の技術ネタ

本家側に書くほどでもない小ネタ用

日本語がちゃんと表示できるCasperJSのDockerイメージを作る

スクレイピング CasperJS PhantomJS Docker

本家の方の↓の記事ではvidiben/casperjsなるDockerイメージを使っていた。

blue1st.hateblo.jp

一応これでも記事の目的は達していたのだが、 GithubみるとインストールされてるCasperJS/PhantomJSのバージョンは古そうだし、 何より日本語ページは化けてしまう。

ページをキャプチャしてどうこうする用途だとこれでは良くない。

そこで日本語がちゃんと表示できるイメージ(のDockerfile)を作成してみた。

npm経由ではPhantomJSのインストールで何かエラー吐くとかCasperJSはちゃんと入ったはずなんだけど何か音信不通になるとかで意外と苦労した。

結果的には必要なものを泥臭く公式からダウンロードして配置する方法で対応。

FROM ubuntu:14.04

RUN apt-get update -y&&\
  apt-get install -y libfreetype6-dev libfontconfig1-dev language-pack-ja wget bzip2 git python unifont

RUN mkdir /src
WORKDIR /src


# install phantomJS
RUN wget https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-linux-x86_64.tar.bz2&&\
  tar xvf phantomjs-2.1.1-linux-x86_64.tar.bz2&&\
  mv phantomjs-2.1.1-linux-x86_64/bin/phantomjs /usr/local/bin/

# install casperJS
RUN git clone git://github.com/n1k0/casperjs.git&&\
  mv casperjs /opt/&&\
  ln -sf /opt/casperjs/bin/casperjs /usr/local/bin/casperjs

#make directory
RUN mkdir /script
WORKDIR /script

ENTRYPOINT ["casperjs"]
CMD ["--version"]

完成形としてDockerfileにまとめてしまえばなんのことはないが、 PhantomJSは日本語フォントをインストールしつつもlocaleが日本語設定ではいけないなどのややこしさがあって苦労した。

Dockerではなく普通にサーバにインストールする場合はLANG=Cをコマンドの前につけるようにして運用するのがベターなのかもしれない。


※以下、仮にdocker build -t casperjs .とビルド(=casperjsという名称を付けた)として

何も指定せずに動かせばバージョン表示。

$ docker run --rm casperjs
1.1.0-beta5


実運用上はディレクトリを/scriptとしてマウントし、スクリプト名を引数として渡す使い方を想定。

$ docker run --rm -v /your/dir/path:/script casperjs your_script.js

ひとまず目的通り動いている。