はじめに
今回、色々と遊ぶ過程でスライド作成ツールを見直しました。 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を試してみました。
良かった点
良かった点は以下の4点です。
- Nodeが不要になり、依存も圧倒的に減った
- 記法がMarkdownの範囲に収まるので、これまでの記事執筆の経験が活きる
- OGPを作りやすく、スライド生成時のコードも減った
- Neovimから離れずにプレビューできる
marp-cliはバイナリも提供されており、Nodeを使わずに利用できます。 また、OGPもMarpの方が作りやすいです。 スライド生成時のコードもかなり減りました。 (元々Slidevだった頃は生成用のコードが数百行ありました) これにより、運用そのものも軽くなりました。
プレビューはnwiizo/marp.nvimを使うことで Neovimから離れずに済み、執筆体験もかなり良かったです。
おわりに
Marpを選んだ主な理由は以下の2点です。
- 独自記法を覚え続けなくてよい
- 依存が少ない
Vueによる拡張性の高さは魅力でしたが、CLIのシングルバイナリがない点とVueのコンポーネントを使う点でギリギリ納得できませんでした。 一方、Marpは表現力を失う代わりにSlidevのような課題がありませんでした。 シンプルに書いてシンプルに運用する点に魅力を感じて、採用することにしました。
その結果、Claude Designは使わなくてよくなりました。 生成AIの出番は画像や図を生成するときくらいで、依存はかなり弱まっています。 今後また変わる可能性がありますが、とりあえずはMarpでスライドを作っていく予定です。
最後まで読んでいただき、ありがとうございました!