← ブログ一覧
フルスタック6分

Marp CLIとは?Markdownだけでスライドを作りPDF/PowerPointに変換するCLIを実際に動かしてみた

  • #Marp CLI
  • #Markdown
  • #スライド

スライドを作るたびにPowerPointやKeynoteでレイアウトを整える作業に時間を取られる、Gitで差分管理したい、という悩みへの答えの1つが「Markdownでスライドを書く」という発想です。これを実際に使えるツールにしているオープンソースのCLIが、marp-teamが公開している「Marp CLI」です。GitHubリポジトリは https://github.com/marp-team/marp-cli 、npmパッケージは @marp-team/marp-cli として配布されています。

この記事は公式リポジトリのREADME(一次情報)と、このクラウド環境へ実際にインストールしてMarkdownをHTML・PDF・PowerPointに変換した結果をもとに書いています。検証時点でインストールされたバージョンはMarp CLI v4.5.1(内部で使われる変換エンジンのMarp Coreはv4.4.0)でした。

Marp CLIとは

READMEの説明によれば、Marp CLIは「Marp」(および同じMarpitフレームワークを使う任意のスライドコンバーター)のためのCLIインターフェースで、Marp/Marpit形式のMarkdownファイルをHTML/CSS、PDF、PowerPoint文書、画像に変換できるとされています。npmレジストリ上の公開情報ではライセンスはMIT、ホームページは https://github.com/marp-cli#readme として登録されています(実際にはGitHub上のLICENSEファイルの内容もMIT Licenseで、2018年のMarp teamによる著作権表記でした)。

配布方法は複数あり、READMEには次が挙げられています。インストール不要で最新版を試せる npx @marp-team/marp-cli@latest 、プロジェクトに固定したい場合の npm install --save-dev @marp-team/marp-cli 、コマンドとして常用したい場合の npm install -g @marp-team/marp-cli に加えて、macOS/Linux向けのHomebrew(brew install marp-cli)、Windows向けのScoop(scoop install marp)、公式のDockerイメージ(Docker Hub: marpteam/marp-cli、GitHub Container Registry: ghcr.io/marp-team/marp-cli)、Node.js同梱のスタンドアロンバイナリも用意されています。この記事ではNode.js v22が入ったこのクラウド環境で、npxから直接試しています。

実際に動かす:MarkdownからHTMLへ

まず、フロントマターで marp: true と theme: default、paginate: true を指定した2ページだけの簡単なMarkdownファイルを用意し、npx @marp-team/marp-cli@latest slide.md -o slide.html を実行しました。結果は数秒で完了し、109,226バイトのslide.htmlが生成されました。ブラウザで開くと、Marpitのフロントマター directiveで指定した設定どおりにページ送りができる、自己完結したHTMLプレゼンテーションになっていました。HTML変換はブラウザを一切必要とせず、Node.jsだけで完結する点が確認できました。

PDF・PowerPoint変換には「ブラウザ」が必要だった

次にPDF変換(--pdf、または出力ファイル名を.pdfにする)を試したところ、最初は次のエラーで失敗しました。「CLIError: No suitable browser found. Please ensure one of the following browsers is installed: chrome, edge, firefox」。READMEにも、PDF・PPTX・画像への変換にはGoogle Chrome、Microsoft Edge、Mozilla Firefoxのいずれかのインストールが必要という注記があり、実際にその通りの挙動でした。

このクラウド環境にはブラウザ自動検出の対象パスにChromiumが無かったため、READMEに記載されている --browser-path オプションでChromiumの実行ファイルを明示的に指定したところ、変換に成功しました。コマンドは npx @marp-team/marp-cli@latest --browser-path /path/to/chrome slide.md -o slide.pdf で、生成されたslide.pdfは25,674バイトでした。同じ方法で --browser-path を付けたまま出力先を.pptxに変えると、124,662バイトのPowerPointファイルが生成され、READMEの説明どおりPDFとPPTXの両方が同じブラウザ経由の仕組みで作られていることを確認できました。自動検出でブラウザが見つからない環境(このクラウド環境のような場合)では、--browser(chrome/edge/firefoxのどれを使うか)と --browser-path(実行ファイルの場所)の2つのオプションを覚えておくと詰まらずに済みそうです。

テーマ・ウォッチモード・セキュリティ上の注意

Marp Core(Marp CLIが使う変換エンジン)のREADMEによると、組み込みテーマは default・gaia・uncover の3種類で、Markdown側のフロントマターに theme: gaia のように書くだけで切り替えられます。CLI側にも --theme オプションがあり、ビルトイン名のほかに独自CSSファイルのパスも指定できます。

ファイルの変更を監視して自動で再変換する --watch(-w)オプションや、ディレクトリをサーバーとして公開し、クエリ文字列(?pdf など)でオンデマンドに変換結果を返す --server(-s)オプションもREADMEに説明がありますが、この記事では対話的な確認が難しいクラウド環境のため、実際には試していません。

もう1点、READMEが明記している注意点があります。PDF・PPTX・画像への変換はブラウザ経由で行われるため、セキュリティ上の理由からローカルファイルへのアクセスは既定でブロックされるとのことです。どうしても画像などのローカルファイルを読み込ませたい場合は --allow-local-files オプションが用意されていますが、READMEにも「信頼できるMarkdownに対してのみ使うこと」という注記があり、見知らぬMarkdownファイルに対して気軽に付けるべきオプションではなさそうです。

まとめ

Marp CLIは、Markdownで書いたスライドをHTML・PDF・PowerPoint・画像に変換できるオープンソースCLIです。実際に動かした範囲では、HTML変換はブラウザ不要でNode.jsだけで完結し、PDF・PPTX変換にはChrome/Edge/Firefoxのいずれかが必要という設計がそのまま確認できました。このクラウド環境のようにブラウザが自動検出されない場合でも、--browser-pathで実行ファイルを指定すれば変換できることも実際に確かめられています。GitやMarkdownエディタでの編集に慣れている人が、スライド作成までテキストベースのワークフローに乗せたい場合の選択肢として試す価値があるツールです。

参考リンク

まずは、やりたいことを聞かせてください

「何から手をつければいいか分からない」段階でも大丈夫です。 ご相談・お見積りは無料。碧南近郊なら直接伺います。