Akogare Blog

憧れのWeb系企業に転職したエンジニアのブログ

alpineベースのコンテナですぐにredpenを使えるようにする

redpen自然言語の校正ツールです。自分は英語や日本語用のlintみたいなものだと捉えています。 最近、文章を書くときにredpenを使うようになりました。 redpenで行われるのはルールベースの機械的なチェックです。 それでも意外とエラーが出たりします。エラーを修正することで ある程度は文章の品質が担保されるので個人的には気に入っています。

redpenを使うにはjavaや設定ファイルが必要なのです。 人におすすめする時に、これらの作業を1からさせることなく簡単に使える環境があればいいなと思いDockerコンテナ化してみました。

以下にDockerfileを公開しています。

github.com

Dockerfile

Dockerfileは下記の通りです。 Dockerイメージを軽量にしたかったのでalpineをベースにしました。

FROM alpine:3.6

# install java etc
RUN apk update
RUN apk --no-cache add tar wget openjdk8

# download redpen
RUN wget https://github.com/redpen-cc/redpen/releases/download/redpen-1.10.1/redpen-1.10.1.tar.gz
RUN tar xvf redpen-1.10.1.tar.gz
RUN mkdir -p /user/local/redpen
RUN mv redpen-distribution-1.10.1 /usr/local/redpen

# add redpen to PATH
ENV PATH="/usr/local/redpen/bin:${PATH}"

WORKDIR /usr/local/documents

# copy redpen configuration file
COPY redpen-conf.xml .

# set "redpen" command for entory point
ENTRYPOINT [ "redpen" ]
CMD [ "--help" ]

やっていることは以下の通りです。

  1. javaのインストール
  2. redpenのダウンロードと展開
  3. redpenをPATHに追加
  4. redpenの設定ファイルをコピー

redpen-conf.xmlについて

redpenの校正ルールを定義するXMLファイルです。 redpenはカレントディレクトリの"redpen-conf.xml"を実行時に読み取ります。 また、実行時に-cオプションで明示的に設定ファイルを指定することも可能です。 今回はRedPen のおすすめ設定 を参考にさせてもらいました。

使い方

# Dockerfileからimageをビルドする
$ docker build . -t redpen-alpine

# 校正対象のドキュメントがあるディレクトリをコンテナの/usr/local/documentsにマウントして実行する
$ docker container run -it --rm -v ~/path/to/host/documents:/usr/local/documents:ro redpen-alpine
 target_document.txt

redpenの実行時オプションについて

redpenは実行時のオプションでチェックするドキュメントのフォーマット や結果の出力フォーマットを指定することができます。

-f <対象ドキュメントのフォーマット(例:plain,wiki,markdonw)>

-r <出力結果のフォーマット(例:plain,json,xml)>

他にもあるので詳しくはredpenドキュメントをご覧ください。

最後に

実行時のdocker runコマンドが長くなってしまいました。 もう少しスマートなやり方を見つけたら更新します。