メインコンテンツへスキップ
  1. Blogs/

Marpで編集可能なPowerPoint(.pptx)出力をDocker環境で試してみた

2 分
VSCode Docker Markdown
0222-nnn
著者
0222-nnn
猫が好き
目次

はじめに
#

最近、Marpを使って資料を作成することがあり、その際に Marpが編集可能なPowerPointに出力できることに気がついたので試してみました。

Marpとは
#

Marpとは、Markdownでスライド(PDF、PowerPoint)を作れるツールです。

以前からPowerPointに出力することはできましたが、 編集できない画像としてデータが出力されていました。

オプションで--pptx-editableを指定すれば 編集可能なデータでPowerPointを出力できるようです。

marp marp-team/marp-cli

試してみる内容
#

VSCodeの拡張機能のMarp for VS Codeだけでは、 編集可能なPowerPointに出力することができませんでした。

しかし、OSに必要な設定をインストールしたくないので、 今回はコンテナを使って出力を試してみました。

実行環境について
#

Windows上のVSCodeでMarkdownを作成後、 WSL上のDockerでmarp-cliコンテナを起動して Windows上のディレクトリをマウントさせて出力を実行してみます。

実行環境のバージョンについて
#

  • Windows Ver: 11(WSL有効済み)
  • WSL Ver: 2.5.7.0
  • Docker Ver: 28.3.3
  • Image

コンテナImageの作成
#

公式が提供しているmarp-cliのImageには、編集可能なPowerPointを出力するために 必要なアプリケーション(libreoffice)が不足しているので、一旦Imageを作成してから実行します。

以下のようにDockerfileを作成後、ビルドしてImageを作成します。

Dockerfile

FROM marpteam/marp-cli:latest

# LibreOfficeをインストール
# キャッシュクリア: rm -rf /var/lib/apt/lists/*でイメージサイズを最適化
RUN apt-get update && apt-get install -y \
    libreoffice \
    && rm -rf /var/lib/apt/lists/*

ビルド

docker build -t marp-cli-libreoffice .

もし、公式Imageをそのままの状態でオプション--pptx-editableを使用すると以下のような エラーになり出力が失敗します:

[ ERROR ] Failed converting Markdown. (LibreOffice soffice binary could not be found.)

サンプルMarkdownの作成
#

サンプルでChatGPTに考えてもらった「美味しいカレーのレシピ」を使って 編集可能なPowerPointの出力を試してみます。

recipe.md

---
marp: true
title: 美味しいカレーのレシピ
theme: default
paginate: true
---

<!-- class: lead -->
# 美味しいカレーのレシピ
家庭でもプロの味を再現!

---

## 材料(4人分)

- 鶏もも肉: 300g  
- 玉ねぎ: 2個  
- にんじん: 1本  
- じゃがいも: 2個  
- カレールウ: 1/2箱(約100g)  
- 水: 600ml  
- サラダ油: 大さじ1  

---

## 手順

1. 野菜と肉を一口大に切る  
2. 玉ねぎを炒めて甘みを出す  
3. 肉を加えて表面を焼く  
4. 水を入れて煮込み、アクを取る  
5. ルウを加えて溶かす  
6. 弱火で10分煮込む  

---

## コツ・ポイント

- 玉ねぎは**きつね色**になるまで炒める  
- 隠し味に**リンゴやハチミツ**を少量  
- ルウは火を止めてから少しずつ溶かす  

---

## 完成!

🍛 美味しいカレーの出来上がり!  
家族や友達と一緒に楽しもう!

変換を試してみる
#

サンプルファイルのrecipe.mdを配置してディレクトリをマウントして変換を行ってみます。

docker run --rm -v $PWD:/home/marp/app/ marp-cli-libreoffice recipe.md --pptx --pptx-editable --allow-local-files

実際に試してみると以下のような結果になりました。

tech-0222@MSI:sample$ docker run --rm -v $PWD:/home/marp/app/ marp-cli-libreoffice recipe.md --pptx --pptx-editable --allow-local-files
[  INFO ] Converting 1 markdown...
[  WARN ] [EXPERIMENTAL] Converting to editable PPTX is experimental feature.
          The output depends on LibreOffice and slide reproducibility is not
          fully guaranteed.
[  WARN ] Insecure local file accessing is enabled for conversion from
          recipe.md.
[  INFO ] recipe.md => recipe.pptx
tech-0222@MSI:sample$ 

変換後のファイルを確認すると、編集可能な状態でしたが、編集可能な単位が文書ではなく、 ワードやフレーズ単位で、ちょっと想像したものとは違っていました。

例えば、材料のページを見ると以下のようにバラバラな状態でした…

変換後のページサンプル

まとめ
#

今回は、Marpで編集可能なPowerPointへの出力を試してみました。

コンテナ化も簡単でかなり気軽に利用できましたが、 公式でも--pptx-editableは実験段階(EXPERIMENTAL)と なっているので、編集が簡単なものではありませんが、 PowerPointファイルで編集が可能になったのは便利だと感じました。

もっと編集単位がきれいになることに期待ですね。