tech

スライド作成にMarpを選んだ話

はじめに

今回、色々と遊ぶ過程でスライド作成ツールを見直しました。 Markdown記法を使用できると嬉しいので、候補はSlidevとMarpの2つで検討しました。 試行錯誤したので、個人のADR的に残しておきます。

きっかけ

きっかけは2つあります。

1つは、ドメインを取得したので遊んでみたかったことです。 サブドメインを切って何か置きたいな、くらいの温度感でいました。 スライドをセルフホストしている方をしばしば見かけたので、それをやってみようと思いました。

もう1つは、Claude Designにかなり依存していたことです。 今の作り方では、最悪AIが使えなくなったとき自分で対応できません。 生成AIへの依存を減らしたい、という動機です。

Slidevの検討

序盤

序盤はSlidevが優勢でした。

SlidevPresentation slides for developers sli.dev

Claude Designで作ったスライドテンプレートは、わかりやすさを重視した分Markdown記法から見ると若干アウトローな書き方になっていました。 アウトローな部分をそのまま再現しようとすると、Markdownの範囲では収まりません。 HTMLやコンポーネントを書くことのできる環境が要ります。 その点でSlidevの方が有利に見えていました。

実際に触ってみると期待どおりでした。 VueのHTMLとCSSでコンポーネントが完結するので、あとからの修正や拡張も容易です。

引っかかったところ

一方で、CLIのシングルバイナリがない点は好ましくありませんでした。 Nodeが必須になるためです。

そこで、Nodeを除去したSlidevにできないかも検討しました。 VueのCDNを読み込む形で動くGoのローカルサーバも作ってみました。 そこまで試した上で、引っかかったのはもうひとつの点です。

Markdown以外の独自記法を記憶しておくコストが僅かに発生します。 Markdownから見てアウトローな表現は5〜6個ですが、Markdown記法に変えてもそこまで問題がない程度でした。 表現力とコストのトレードオフを考えた時、見合う気がしませんでした。

Marpの検討

そこで、もう1つの候補であるMarpを試してみました。

Marp: Markdown Presentation EcosystemMarp (also known as the Markdown Presentation Ecosystem) provides an intuitive experience for creating beautiful slide decks. You only have to focus on writing … marp.app

良かった点

良かった点は以下の4点です。

  1. Nodeが不要になり、依存も圧倒的に減った
  2. 記法がMarkdownの範囲に収まるので、これまでの記事執筆の経験が活きる
  3. OGPを作りやすく、スライド生成時のコードも減った
  4. Neovimから離れずにプレビューできる

marp-cliはバイナリも提供されており、Nodeを使わずに利用できます。 また、OGPもMarpの方が作りやすいです。 スライド生成時のコードもかなり減りました。 (元々Slidevだった頃は生成用のコードが数百行ありました) これにより、運用そのものも軽くなりました。

プレビューはnwiizo/marp.nvimを使うことで Neovimから離れずに済み、執筆体験もかなり良かったです。

おわりに

Marpを選んだ主な理由は以下の2点です。

  1. 独自記法を覚え続けなくてよい
  2. 依存が少ない

Vueによる拡張性の高さは魅力でしたが、CLIのシングルバイナリがない点とVueのコンポーネントを使う点でギリギリ納得できませんでした。 一方、Marpは表現力を失う代わりにSlidevのような課題がありませんでした。 シンプルに書いてシンプルに運用する点に魅力を感じて、採用することにしました。

その結果、Claude Designは使わなくてよくなりました。 生成AIの出番は画像や図を生成するときくらいで、依存はかなり弱まっています。 今後また変わる可能性がありますが、とりあえずはMarpでスライドを作っていく予定です。

最後まで読んでいただき、ありがとうございました!

参考文献