Sphinxの環境構築で楽をする: HTMLとPDFを生成するDockerコンテナを作った
勢い余って直構築 → Dockerでやろう
ドキュメンテーションジェネレータの「Sphinx」を詳しく説明している次の記事を見つけた。
Sphinxは以前から注目していたツールで、使いこなしてみたくなり、記事をなぞる形で環境構築を始めた。reStructuredTextではなくMarkdown形式で原稿を書くようにして、Mermaid記法への対応を試してみたり、Mermaidの図はLaTeXに持っていきにくそうだから図の記法をPlantUMLへ切り替えて、PlantUMLを描画するためのJava環境を用意し、LaTeXを経由したPDFファイルの中に図が描けていることを確認して……と、いくつかの問題を時間をかけてやっと乗り越えられそうだと思ったときに、気づいた。
昨今、Sphinxみたいなややこしいソフトウェアの環境構築は、Dockerを使って仮想的に行う潮流だった。ということは、この場合もDockerコンテナを用意すると便利では? (そういえば拙作LibLibでやってたなあ)
GitHubに公開してます
上記の着想から数日を費やし、Sphinx環境のDockerコンテナをコマンド一発で用意できるファイル一式を完成させて、mah-jp/sphinx-docker_gen-html-pdfというリポジトリ名でGitHubにアップロードした。
Sphinxでのドキュメンテーションを始める際、Dockerの力を使うと圧倒的に楽ができる。そのような時にはよかったらこのリポジトリをcloneしてみてください。
おまけ: 完成までのTry and Errorの軌跡
上記リポジトリのファイル一式を完成させるまで、いくつかのエラーを解決する必要があった。特にCase-3などはウェブ情報が少なくて、(M1 MacのDockerをx86-64として動かしてみてエラーの変化を調べたりなど) なかなかの試行錯誤を伴う道のりだった。誰かの参考になるかもしれないのでメモを残します。
Case-1.
/docs/sample.rst:00: WARNING: epstopdf command 'epstopdf' cannot be run
texlive-font-utils
パッケージをインストールする
Case-2.
WARNING: command 'mmdc' cannot be run (needed for mermaid output), check the mermaid_cmd setting
npm
パッケージをインストールした上で、npm install -g @mermaid-js/mermaid-cli
を実行する
Case-3.
b'\nError: Failed to launch the browser process!\nrosetta error: failed to open elf at /lib64/ld-linux-x86-64.so.2\n
これはM1のmacOS環境 (Ventura 13.6.7) で遭遇した。Dockerイメージのアーキテクチャはarm64のはずなのに、なぜだか「Rosetta」や「x86-64」がエラーメッセージに登場する。わけがわからない。
- 参考リンク: 具体的には無し (いくつかの情報を突き合わせての私なりの推理だが、Puppeteerがブラウザを発見できない場合、Puppeteerがx86-64版のブラウザを勝手にインストールしてしまうのだろうか)
chromium
パッケージをインストールする- conf.py:
mermaid_params = ['-p', 'puppeteer-config.json']
を追加 - puppeteer-config.jsonを次の内容で新規作成する
{ "executablePath": "/usr/bin/chromium" }
Case-4.
b'\nError: Failed to launch the browser process!\n[0000/000000.000000:ERROR:zygote_host_impl_linux.cc(99)] Running as root without --no-sandbox is not supported.
- 参考リンク: mermaid-cli/puppeteer-config.json at master · mermaid-js/mermaid-cli
- puppeteer-config.jsonを次の内容に変更する
{ "executablePath": "/usr/bin/chromium", "args": ["--no-sandbox"] }