スキル自身の言葉で
md-slides は、markdown形式のデッキを、任意のブラウザで動作する単一ファイルのHTMLプレゼンテーションに変換します。デッキとは、--- のHR区切りまたは # のH1見出しでスライドを分割したもので、任意で <!-- notes: ... --> のプレゼンターノートブロックを含められます。標準ライブラリのみを使う3つのPythonスクリプト(slide_splitter.py、presenter_notes_parser.py、deck_html_renderer.py)によるパイプラインで処理されます。
出力には、キーボードナビゲーション、URLハッシュによるディープリンク、プログレスバーとスライド番号、時計と次スライドプレビューを備えたプレゼンターモード、そして1ページ1スライドのPDF書き出し用の印刷用スタイルシートが含まれます。md-documentのmarkdownパーサーを再利用し、config_loader.py経由でデザインシステムのトークンを読み込みます。スライドの境界が不明瞭な入力、1スライドのみのデッキ、100行未満のファイル、--strict-notes の50%カバレッジを満たさないデッキは処理を拒否します。
生成されるもの
- 解決済みのデフォルト出力ディレクトリに deck-{slug}.html として書き出されるレンダリング済みHTMLデッキで、名前が重複した場合は -2、-3 のように番号が付加されます。
- 分割されたスライドを保持する中間JSONファイルと、その後にノートを付加したスライドのJSONファイルです。
- 印刷用スタイルシートを通じてブラウザから印刷することで生成される、1ページ1スライドのPDFです。
仕組み
- 01デッキを順序付けられたスライドに分割する
slide_splitter.py は元のmarkdownを読み込み、--- のHR行またはH1見出しで分割します。デフォルトでは境界のスタイルを自動検出し、順序付けられたスライドリストを書き出します。
- 02各スライドにプレゼンターノートを付加する
presenter_notes_parser.py は各スライドのノートブロックを走査し、そのスライドに紐付けます。これにより、プレゼンターモードの右側パネルに表示する内容が用意されます。
- 03単一ファイルのHTMLデッキをレンダリングする
deck_html_renderer.py はスライドとデザインシステムのトークンを組み合わせてデッキを出力します。コマンドラインでタイトルと出力先のパスを指定します。
- 04デザインシステムのトークンを適用する
デザインシステムから12個のブランドCSSカスタムプロパティが提供され、design_style によってスライドレイアウトの密度が変わります。
- 05デッキではない入力を拒否する
このスキルは、入力に明確なスライド境界がない場合、単一のスライドになってしまう場合、または --strict-notes によるノート網羅率ゲートを通過しない場合、変換ではなく終了します。