GitLab CIでLaTeXコンパイルをどこでも出来るようにする
こんにちは、whywriteit レポート班のwhywaitaです。
LaTeX環境はWindowsでは少し難があったり、OSXでもEl Capitanではそのままインストール出来ない事態が発生したり、何かと構築/運用に対してハードルが高めです。
また、LaTeXは実際に書きたい文章量に対して組版の為に記載する必要のあるタグが多く、お世辞にも気軽に書ける言語とは言えません。
これらの状況を鑑みて、コンテナ技術であるDockerを用いて、gitとエディタとブラウザさえあればどこでもレポートが生成出来るような環境を作ってみました。
tl;dr
- docker-latex-jlisting
- masawada/mics_report
- fork版のこっちの利用推奨 kakakaya/mics_report
- 上記を良い感じに動かしてゴール!
準備
GitLabの構築などは今回は割愛します。GitLab Omnibusを使ってサクッとインストールしてください。
2,3年前はGitLabの構築/運用にかなり苦しい思いをしましたが、最近は非常に簡単に運用できるようになっています。これを機にGitLabに再チャレンジするのも手かも!
レポートリポジトリを作成
レポート毎にリポジトリを分けても良いですが、自分は面倒だったのでほぼ全てのレポートが入っているリポジトリを作成しています。
そして、そのリポジトリのルートディレクトリに以下の2つのファイルを設置しています。
#!/bin/sh | |
set -euo pipefail | |
REPORT_NAME=$1 | |
git clone https://github.com/kakakaya/mics_report ${REPORT_NAME} | |
rm -rf ${REPORT_NAME}/.git |
image: whywaita/docker-latex-jlisting:latest | |
before_script: | |
– ruby –version | |
media: | |
stage: build | |
script: | |
– cd media | |
– mkdir tmp | |
– mkdir output | |
– rake | |
artifacts: | |
paths: | |
– ./media/output/report.pdf |
このような感じです。(pre_report.sh でレポート環境を用意した結果です)
whywaita% tree -L 1 -a . [~/git/report]
.
├── .git
├── .gitlab-ci.yml
├── media # レポートディレクトリ
└── pre_report.sh
レポートを書く
masawada/mics_reportを用いれば、LaTeXコンパイルを非常に簡略化してくれます。
masawada/mics_report は素晴らしいソフトウェアなのですが、ここだけ残念なので、kakakaya/mics_reportの利用を推奨します。
mics_reportの使用方法については、当該リポジトリのREADMEを参照してください。
GitLab CIでコンパイルする
リポジトリにこの.gitlab-ci.ymlを置いて、レポート名を調整してください。
pre_report.sh
で第1引数に取ったレポート名をディレクトリパスに指定すればそれで動きます。便利ですね。
TeXファイルが書き上がったら、GitLabにpushしてみましょう。ちゃんと書けていれば、GitLabのビルドが走り、pdfファイルがダウンロード出来るようになります。
サンプルとして、 gitlab.com にリポジトリを用意してみました。実際に動いている様子はこちらでご確認ください。
https://gitlab.com/whywaita/sample-report-ci
終わりに
これによって、どこに居てもLaTeXコンパイルが出来る環境が手に入りました。
今回の技術の想定としては、メインマシンではLaTeX環境が入っていて、そこではmics_reportを手元のマシンで使いつつ、どこか外に行った際に、LaTeX環境の入っていないサブマシンでレポート修正したい!みたいな時に使えるのでは無いかと思います。(実際に筆者はそのようにつかっています)
サンプルリポジトリとして gitlab.com のGitLab CIを用いてレポートを作成しましたが、このSaaSはrunnerが共用になっていて、いつまで経ってもビルドが走らないのであまりお勧めしません。皆さんは自分のGitLabを立てて、自分でrunnerを用意しましょう。
では、良きGitLabライフを!