Markdownからpptxを出力するslidown
最近は仕事でPowerPointを使うことが増えたのだが、やはりMarkdownからプレゼンテーションを作りたいという偏執狂的な欲求が抑えられなくなったのと、私も開発に参加しているk1LoW/deckの快適な体験をPowerPointでも得たくなったため、deckと同様のMarkdownからpptxを出力するOSSを作った。名前はslidown。
https://github.com/Songmu/slidown/
Go製なのでgo install でも入るが、例によってHomebrewでもインストールできるようにもした。
$ brew install tap/Songmu/slidown
deckの「デザインとコンテンツの分離」という素晴らしいコンセプトを踏襲し、スライドマスタでデザインを調整する思想となっている。
使い方
deckと同じ様な、--- をスライド区切りとしたMarkdownを使えば、pptxが出力できる。ローカル完結なので、 slidown new などもなく slidown apply でいきなりpptxを出力できる
$ slidown apply slide.md
Wrote slide.pptx (11 slide(s))
出力先の指定や、テンプレートファイルの指定 (potxやpptx)も可能。--watch モードもあり、Markdown編集を見て、pptxを自動で出力し直してもくれる。詳細はリポジトリやドキュメントを参照して欲しい。
slidown apply slide.md --template template.potx
オープンフォーマットとしてのpptx
pptxは主にXMLを中心とするファイル群をzipでまとめたOffice Open XML (OOXML)というオープンフォーマットであり、ECMA-376で定められている。Microsoft 365 (Office) の他にも LibreOffice なども読み書きができる。おそらくそれぞれ独自拡張などはあると思うが詳しくはない。結局全部XMLに中には収まってはいるのは確かだ。
なので、実はローカル完結で機械的に読み書きさせすい。slidownの出力スピードもとても早い。仕様を確認しながらの実装は大変だが、今ならAIを使えばそれほど難しくない。
どの様にslidownを作ったか
実はslidownは完全にdeckのforkです。GitHubのfork機能は作っていないが、deckのリポジトリを引き継いでいます。古い履歴にはdeckの履歴が残っています。ライセンスなども引き継いでいます。
fork当時の最新のコミットからGitHub Copilotに一気に書き換えてもらいました。実装を簡単にするためと、deck自体にpptx出力機能が欲しいかと言うと、そうでもないなと思ったので、一旦別プロダクトとすることにしました。AI Slop Fork的なことをやったわけだけど、まあ、私もdeckの開発にはだいぶ参加させてもらったので大丈夫かなと思っています。
兄弟プロダクトとして、コラボレーションなり共通化なりはできるところはできると良いかと思っている。今回の実装の中でも、ヒントがえられた部分もあったので、deck側にアイデアとして戻せても良いかな、と思っています。
使い方などは別途まとめたいと思っていますし、まだできたばかりで不安定だとは思いますが、今の段階でも結構便利なので、是非ご利用ください。