alpineベースのコンテナですぐにredpenを使えるようにする
redpenは自然言語の校正ツールです。自分は英語や日本語用のlintみたいなものだと捉えています。 最近、文章を書くときにredpenを使うようになりました。 redpenで行われるのはルールベースの機械的なチェックです。 それでも意外とエラーが出たりします。エラーを修正することで ある程度は文章の品質が担保されるので個人的には気に入っています。
redpenを使うにはjavaや設定ファイルが必要なのです。 人におすすめする時に、これらの作業を1からさせることなく簡単に使える環境があればいいなと思いDockerコンテナ化してみました。
以下にDockerfileを公開しています。
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" ]
やっていることは以下の通りです。
- javaのインストール
- redpenのダウンロードと展開
- redpenをPATHに追加
- 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コマンドが長くなってしまいました。 もう少しスマートなやり方を見つけたら更新します。