【ITニュース解説】Streamline Your LaTeX Workflow with Docker and VS Code: The Ultimate Setup Guide
2025年09月16日に「Dev.to」が公開したITニュース「Streamline Your LaTeX Workflow with Docker and VS Code: The Ultimate Setup Guide」について初心者にもわかりやすく解説しています。
ITニュース概要
LaTeX文書の遅いコンパイルをDockerとVS Codeで高速化するガイド。プリアンブルの事前コンパイルや索引生成、ドラフトモード活用といった最適化手法を組み合わせる。これにより、ビルド時間を約70%短縮し、再現性の高い開発環境を構築できる。
ITニュース解説
LaTeX(ラテフ)は、論文や技術文書、書籍など、高品質な文書を作成するための組版システムだ。しかし、文書のページ数が増えたり、複雑な図や多数の参考文献が含まれるようになると、そのコンパイル(文書ファイルからPDFなどの最終出力を生成する作業)にかかる時間が非常に長くなるという問題が頻繁に発生する。特に、学位論文のような大規模な文書を扱う場合、この待ち時間は作業効率を大きく低下させる要因となるため、最適化が求められる。
かつてのLaTeX文書のコンパイルは、複数のツールを順番に実行する必要がある複雑なプロセスだった。その後、pdflatexやxelatexのようなツールが登場し、LaTeXファイルを直接PDFにコンパイルすることが主流となり、簡略化された。
しかし、現代の標準的なワークフローでも、PDFの生成は一回で終わるわけではないことが多い。文書中に引用、相互参照、用語集といった情報が含まれる場合、pdflatexはまずソースファイルを解析して、これらの情報が記述された.auxファイルのような補助ファイルを出力する。次に、参考文献を管理するBibTeXのようなツールが、参考文献データに基づいて、整形された参考文献リストを含む.bblファイルを生成する。その後、pdflatexが.bblファイルを読み込み、本文中に組み込む。この段階ではまだ未解決の参照が残っているため、最終的なPDFを完成させるには、さらにpdflatexを複数回実行して、すべての相互参照を解決する必要がある。このように、複数のステップと複数回のコンパイル実行が標準的な流れとなっている。
これらのプロセス全体にかかる時間を短縮するためには、まずどこがボトルネックになっているかを正確に把握する必要がある。そこで、ベンチマークテストを行うことが重要になる。筆者は、18ページのテンプレート文書を用いて、テスト環境の一貫性を保つためにDockerコンテナを使用し、初期状態でのコンパイル時間を測定した。結果は、18ページで合計30.778秒、1ページあたり平均1.710秒というものだった。この数値は、文書サイズが大きくなるにつれてさらに増加するため、改善の余地が大きいことがわかる。
ここからは、具体的な最適化手法について説明する。
一つ目は、makeglossariesツールの活用だ。このツールは、文書内の用語集や頭字語のインデックスを事前に生成するスクリプトで、glossariesパッケージの一部として提供されている。makeglossariesをビルドプロセス内で明示的に呼び出すことで、複数回のpdflatex実行時にインデックスを再生成する手間を省き、全体の処理を高速化できる。この変更を加えることで、合計コンパイル時間は16.710秒(1ページあたり0.928秒)に短縮され、約45.7%の速度向上を達成した。
二つ目は、プリアンブルの事前コンパイルだ。LaTeX文書のプリアンブルとは、\documentclassから\begin{document}までの間に記述される部分で、多くのパッケージの読み込みやカスタム定義が含まれる。この部分の処理はコンパイル時間の大部分を占めるため、事前にコンパイルして.fmtファイルとして保存し、後のpdflatex実行時にこの.fmtファイルを読み込むようにすることで、パッケージコードの再処理を回避できる。これは非常に効果的な最適化手法であり、上記makeglossariesの最適化に加えてこのプリアンブルの事前コンパイルを導入した結果、合計コンパイル時間は13.160秒(1ページあたり0.731秒)となり、初期状態から約57.2%もの速度向上を実現した。ただし、すべてのパッケージが事前コンパイルに対応しているわけではないため、導入後は文書を徹底的にテストする必要がある。
三つ目は、pdflatexのコマンドライン引数を活用する方法だ。
-interaction=batchmodeという引数は、コンパイル中にユーザーとの対話(エラーや警告の表示、入力プロンプトなど)をすべて抑制する。これにより、自動化されたビルド環境でpdflatexが途中で停止することなく実行されるため、処理がスムーズになる。エラーが発生した場合でも、ログファイルを確認することで内容を把握できる。この引数を追加することで、わずかながら速度が向上する。
もう一つ有用な引数は-draftmodeだ。この引数はpdflatexに、最終的なPDFを完全にレンダリングするのではなく、ドラフト(下書き)として補助ファイルの生成に特化させるよう指示する。これにより、画像などの重い要素のレンダリングがスキップされ、コンパイル時間が大幅に短縮される。主に、文書の構造や参照関係を確認する際など、高速なフィードバックが必要な場合に非常に有効だ。
これらの最適化手法を組み合わせた新しいコンパイルプロセスが考案された。その手順は以下のようになる。
pdflatexでプリアンブルを事前コンパイルする。pdflatex -interaction=batchmode -draftmodeでドラフトモードかつバッチモードで最初のコンパイルを行う。bibtexで参考文献を処理する。makeglossariesで用語集のインデックスを生成する。pdflatex -interaction=batchmode -draftmodeで再度ドラフトモードかつバッチモードでコンパイルを行う。- 最後に
pdflatexで最終的なPDFを生成する。 この最適化されたパイプラインを適用した結果、合計コンパイル時間はわずか9.212秒(1ページあたり0.512秒)となり、初期状態と比較して約70.1%もの劇的な速度向上を達成した。これにより、60ページの文書でも1ページあたり約1秒という高速なコンパイル時間を実現できる見込みだ。
このような複雑なビルドプロセスを、複数のマシンや共同作業者間で一貫して実行するためには、開発環境の管理が重要になる。そこで、Dockerの利用が推奨される。Dockerは、アプリケーションとそのすべての依存関係を「コンテナ」と呼ばれる独立した環境にカプセル化する技術だ。これにより、異なるOSや環境であっても、常に同じ設定でツールを実行できる。LaTeXの場合、texlive/texlive:latestのような既に必要なツールがすべてインストールされているDockerイメージを利用できる。ローカルにTeX環境をインストールする代わりに、Dockerコンテナ内でこれらのコマンドを実行することで、環境構築の手間を省き、再現性の高い開発環境を簡単に構築できる。
文書作成のためのエディタとしては、Visual Studio Code(VS Code)が非常に優れている。VS Codeは「LaTeX Workshop」という拡張機能を使うことで、LaTeX文書の作成からコンパイル、プレビューまでを一貫してサポートする。また、VS Codeのプロジェクト固有設定機能を利用し、.vscode/settings.jsonファイルにビルドパイプラインの定義やショートカットなどの設定を記述することで、これらの設定を他の開発者と共有したり、複数のデバイス間で同期させたりすることが容易になる。これにより、チーム全体で一貫した開発体験を享受できる。
さらに、この最適化されたLaTeX開発環境をすぐに利用できるよう、GitHubでテンプレートリポジトリが提供されている。このテンプレートには、PlantUML図の自動生成、未使用ラベルや図の検出、PDF圧縮、Markdown変換スクリプトなど、LaTeX開発をさらに便利にするための追加スクリプトやツールが含まれている。
今後のさらなる最適化の可能性としては、latexmkやararaといった他のビルドドライバーの検討、TikZやPGFPlotsで作成された複雑な図の事前コンパイル、多数の画像が含まれる文書のための画像処理パイプラインの導入などが挙げられる。画像処理パイプラインでは、画像を表示サイズに合わせて縮小したり、適切な圧縮形式に変換したりすることで、ビルド時間を大幅に削減できる可能性がある。
まとめると、文書の肥大化によって遅くなるLaTeXコンパイルは、プリアンブルの事前コンパイル、インデックスの事前生成(makeglossaries)、pdflatexの適切なコマンドライン引数(-interaction=batchmode、-draftmode)の活用、そしてDockerによる再現性の高い環境構築、VS Codeとその拡張機能による効率的な開発環境の構築という組み合わせによって、大幅に改善できる。これらの手法を適用することで、初期のビルド時間から約70%もの速度向上を達成し、例えば18ページの文書であれば30秒以上かかっていたコンパイル時間を約9秒にまで短縮できた。これは、システムエンジニアとして、複雑なプロジェクトにおけるボトルネックを特定し、ツールやプロセスの改善によってパフォーマンスを最適化するという、非常に実践的なスキルを学ぶ良い例となるだろう。