論文自動添削&自動コンパイルチェック環境の構築(with Wercker&RedPen)

自分の所属しているゼミでは,論文の執筆にLaTeXを用いている.論文データは万が一の場合に備えた複数箇所へのバックアップやバージョン管理が非常に重要であり,僕自身はGitHubのプライベートリポジトリを利用して管理している.このLaTeXファイルのPDFへのコンパイル処理(.tex->.dvi->.pdf)が正常にエラー無く動くかの確認と,加えてRedPenを用いた文書添削でチェックが通るかの確認を自動的かつ継続的に行いたいと思い,以前参加した学会においてRedPenを開発している方がTravis CIとRedPenを用いた自動添削の環境を構築してらっしゃったのでこちらを参考に環境の構築を行った.

事前準備

以下のファイル群を含むリポジトリをGitHubやBitBucketに用意する.

  • これから執筆する論文に必要で,かつTeX Liveに標準で付属しないスタイルファイル群をまとめたstylefilesディレクトリ
  • documentclassや各種設定,タイトルを含み,節ごとに分けたLaTeXファイルをインポートするmaster.texファイル

準備できたら,まずは自動添削に用いるRedPenの添削設定ファイルを作成する.

RedPenの設定

WerckerやTravis CIなどのCI上でRedPenをインストールし,あらかじめリポジトリに含ませたRedPen設定ファイル(redpen-conf-ja.xml)を用いて各節ごとのLaTeXファイルに対して添削を行っていくのだが,まだ肝心のRedPen設定ファイルをリポジトリに上げられていない.この設定ファイルに関しては各人ごとに添削の細かさといった好みがあると思うので,思い思いに設定する.ちなみに僕は以下のような設定にした.

<redpen-conf lang="ja" type="zenkaku2">  
    <validators>
        <validator name="SentenceLength"> <!-- 一文の長さが長すぎないかを見る -->
            <property name="max_len" value="100"/>
        </validator>
        <validator name="CommaNumber"/> <!-- 読点の数が多すぎないかを見る -->
        <validator name="WordNumber"> <!-- 一文の単語数が多すぎないかを見る -->
          <property name="max_num" value="60"/>
        </validator>
        <validator name="InvalidSymbol"/> <!-- 記号の種類をチェック -->
        <validator name="KatakanaEndHyphen"/> <!-- カタカナ語の後ろの長音チェック -->
        <validator name="KatakanaSpellCheck"/> <!-- 非常によく似たカタカナ語が使われていないかをチェック -->
        <validator name="SectionLength"> <!-- 一節の単語数が多すぎないかを見る -->
            <property name="max_num" value="1500"/>
        </validator>
        <validator name="ParagraphNumber"/> <!-- 一節あたりの段落数が多すぎないかを見る -->
        <validator name="Contraction"/> <!-- 英語の省略形をチェック -->
        <validator name="SuccessiveWord"/> <!-- 同じ単語が連続して使用されていないか -->
        <validator name="DuplicatedSection"/> <!-- 節が重複していないかを見る -->
        <validator name="JapaneseStyle"/> <!-- ですますとであるが混じっていないか -->
        <validator name="DoubleNegative"/> <!-- 二重否定がないかを見る -->
        <validator name="FrequentSentenceStart"/> <!-- 頻繁に同じ単語で文を始めていないかを見る -->
        <validator name="WordFrequency"/> <!-- 単語があまりにも多用されていないかを見る -->
        <validator name="Hyphenation"/> <!-- ハイフンが必要な単語について,ハイフンが使われているかを見る -->
        <validator name="WeakExpression"/> <!-- 弱い表現が使われていないかを見る -->
        <validator name="HankakuKana"/> <!-- 半角カナが使われていないか -->
        <validator name="Okurigana"/> <!-- 送り仮名が正しいか -->
        <validator name="VoidSection"/> <!-- 空の節が無いか -->
        <validator name="SectionLevel"/> <!-- 節が深すぎないか -->
        <validator name="JapaneseAmbiguousNounConjunction"/> <!-- 日本語文の曖昧な名詞接続のパターンを検出 -->
        <validator name="JapaneseNumberExpression"> <!-- 日本語文の係数表現スタイルが一つ,二つになっているかの確認 -->
          <property name="mode" value="kansuji"/>
        </validator>
        <validator name="SuccessiveSentence"/> <!-- 同一の文が二回連続で出ていないか -->
        <validator name="DoubledConjunctiveParticleGa"/> <!-- 一文に二回以上,接続助詞の が が出現するとエラーを出力 -->
    </validators>
</redpen-conf>  

設定項目の詳細については,RedPenの公式ドキュメントを参考にするといい.

設定ファイルを作成できたら,次にWerckerの設定ファイル作成に移る.

Werckerの設定

次に,CI環境として用いるWerckerの設定ファイル(wercker.yml)を作成する.あらかじめWerckerでこのリポジトリに対応するアプリケーションを新規に作成しておく.サンプルのwercker.ymlファイルが示されると思うがこれを無視し,以下のような内容でwercker.ymlを新規作成する.

# Read more about containers on our dev center
# http://devcenter.wercker.com/docs/containers/index.html
box: trileg/latex-redpen:latest

# This is the build pipeline. Pipelines are the core of wercker
# Read more about pipelines on our dev center
# http://devcenter.wercker.com/docs/pipelines/index.html
build:  
  # The steps that will be executed on build
  # Steps make up the actions in your pipeline
  # Read more about steps on our dev center:
  # http://devcenter.wercker.com/docs/steps/index.html
  steps:
    - script:
        name: Install LaTeX stylefiles
        code: |
          mkdir /usr/share/texmf-dist/tex/latex/mylatex
          mv ./stylefiles/* /usr/share/texmf-dist/tex/latex/mylatex/
          mktexlsr
          updmap
    - script:
        name: Proofread LaTeX documents by RedPen
        code: |
          redpen -c redpen-conf-ja.xml -f latex 0_Abstruct.tex
    - script:
        name: Compile LaTeX document
        code: |
          platex -halt-on-error -interaction=nonstopmode -file-line-error -no-shell-escape master.tex
          dvipdfmx master.dvi
          platex -halt-on-error -interaction=nonstopmode -file-line-error -no-shell-escape master.tex
          dvipdfmx master.dvi

この例ではCI環境として僕自身が用意したTeXLiveとRedPenを導入済みのArch Linuxコンテナを用いている.コンテナについてはDocker Hubから好みのものを選べばいい.Werckerでは,build.steps内に行わせたい処理を書き並べていく.LaTeXのコンパイルの前に,Install LaTeX stylefilesでリポジトリ内に含ませたスタイルファイル群をLaTeX環境内にインストールしてmktexlsrで反映させ,updmapで日本語フォントも扱えるようにする.

スタイルファイルの導入が終われば,はじめにProofread LaTeX documents by RedPenで節ごとのLaTeXファイルを添削している.節ごとのLaTeXファイルが複数になった場合は,以下のようにコマンド列を付け足していけばいい.

- script:
  name: Proofread LaTeX documents by RedPen
  code: |
    redpen -c redpen-conf-ja.xml -f latex 0_Abstruct.tex
    redpen -c redpen-conf-ja.xml -f latex 1_Introduction.tex

RedPenによる添削が一通り終われば,次にCompile LaTeX documentmaster.texをもとに文書のコンパイルテストを行う.この例ではLaTeXファイルからPDFファイルの生成までの流れを2回行っている.

設定ファイル内で記述したRedPenの添削対象となるLaTeXファイルについても必ず作成しておくこと.

以上全ての作業が完了したら作業内容をローカルリポジトリにコミットし,リモートリポジトリにプッシュする.するとWerckerがこのコミットを拾い,wercker.ymlに沿って自動的に必要なツールのインストールを行い,添削とコンパイルチェックを行ってくれるはずだ.添削に引っかかったり,コンパイルに失敗するとWerckerに登録したメールアドレスにメールが飛ぶ.

これで論文自動添削&自動コンパイルチェック環境が構築できた.あとは節ごとにLaTeXファイルを作成して執筆し,master.tex\input{}で節ごとのLaTeXファイルをインポートさせ,wercker.ymlでRedPenの添削設定を追記してコミット,プッシュすれば,Werckerで勝手に添削とコンパイルチェックをしてくれる.もし添削やコンパイルでエラーが出た場合はメールが届くので,Werckerで確認して適宜修正すればいい.