azukipochette's weblog

memory dump (mini)

Markdown から PowerPoint (pptx) を作成したくて Docker イメージを作ったという話

Markdown から PowerPoint を生成できたら便利そうなのにと思ったら、いつの間にか Pandoc が公式に PowerPoint (pptx) への出力に対応していました。

昔は、PDF までは変換できて、あとは Adobe Acrobat の機能で PowerPoint 化する必要があったのですが、PDF を経由しなくても変換できるのはいいですね *1

https://pandoc.org

インストールするイメージはここにあります。結構よい頻度で更新されているのも好印象です。

ただ...この Pandoc というのは、Haskell ベースなツールなのです。 Windows な人は普通に msi をインストールしそうなものですが、私はこういう一時的にしか使わないツールなのに、結構大きな実行環境がセットなものをインストールしたくない!という人なので、msi は使いたくありません。

実行環境をまるっと手に入れて使い終わったら捨てたい...そう、いまこそ Docker の出番です。

ただ、Ubuntu のパッケージマネージャーで落ちてくるのが古くて PowerPoint 変換に未対応だったりする罠がありまして、なかなか簡単ではありませんでした。 とうわけで、結局、自分で Dockerfile から Docker イメージを作ることにしました。

せっかくなので、下記に張り付けておきます。

FROM ubuntu:18.04

# Update ubuntu
RUN apt-get update -qq
RUN apt-get upgrade -qq

RUN apt-get install -y wget
RUN wget -q https://github.com/jgm/pandoc/releases/download/2.2.1/pandoc-2.2.1-1-amd64.deb
RUN dpkg -i pandoc-2.2.1-1-amd64.deb

# Install texlive
RUN apt-get install -y texlive-latex-recommended

# install wkhtmltopdf
RUN apt-get install -y -qq xvfb libfontconfig wkhtmltopdf

RUN apt-get clean

VOLUME /workspace
WORKDIR /workspace

Pandoc で PowerPoint へ変換する

まず、上記の Dockerfile から Docker Image を作ります。 お使いのエディターで Dockerfile を作ってそのフォルダー上で下記のコマンドを実行します。 Dockerfile の作成には時間がかかりますので、ご注意を。

docker build -t <yourname>/pandoc .

作成が完了したら、作成したイメージを下記のコマンドで実行します。 -v はホスト環境のボリュームを Docker のコンテナにマッピングするものです。この値は私の環境用の値にしているので、お好きな値に変えてください。

docker run -v /Users/<yourname>/share:/workspace -it <yourname>/pandoc /bin/bash

bash が起動したら、以下のコマンドで Markdown から pptx に変換します。拡張子から判定してくれるので、簡単でいいですね。

pandoc test.md -o test.pptx

おまけ

Dockerfile から docker build を試していると気が付けば大量の停止コンテナと<none>:<none> なイメージができますよね。

これの削除方法も紹介しておきます。Web で検索すると古い削除方法をよく見かけますが、今のコマンドは以下です。

停止中のコンテナを一括削除するコマンド

docker container prune

リポジトリ名とタグがない (<none>:<none> な) イメージを一括削除するコマンド

docker images prune

では、良い Pandoc 生活を。Enjoy!

*1:なにより Adobe Acrobat を買わなくていいのがいい(笑)