GitHub でフォークする

スライドは Markdown で、
レンダリングは純粋な Go で。

slides は Marp と同じ Markdown を読み込みます。ディレクティブ、スライド間の ---、![bg] による背景、スピーカーノート、組み込みテーマ。そのうえで Marp にはない 2 つの機能を加えます。デッキの中で使える Go テンプレートと、見た目を繰り返し書く代わりにスライドの役割を宣言できるスライドの種類です。

v0.13.0 — リリース済みHTML、expand、PNG/JPEG、アクセシブルなベクター PDF、編集可能な PPTX と ODP、数式、行番号と注釈付きのコード、絵文字、HCL、watch、serve、発表者ビューと一覧ビューに対応済みヘッドレス Chrome 不要
talk.md
---
marp: true
paginate: true
footer: {{ .talk }}
data:
  talk: Pure Go slides
  topics: [Why, How, Next]
---

<!-- _kind: title -->
# {{ .talk }}

{{ range .topics }}
---

# {{ . }}
{{ end }}
1 つの組織、4 のリポジトリ
互換性

Marp のデッキは、そのまま go-slides のデッキです。

構文は Marpit と Marp Core のものであり、独自の方言ではありません。Marp 向けに書いたデッキはここでも同じように読み込まれ、slides expand を使えば素の Marp Markdown に戻せるので、以下の 2 つの追加機能を使っても囲い込まれることはありません。

➗

スライドとディレクティブ

--- でスライドを区切ります。グローバル、ローカル、スポット(_class)のディレクティブをフロントマターや HTML コメントに書け、Marp と同じくスライドからスライドへ引き継がれます。

🖼️

画像と背景

![bg] とそのサイズやフィルター、分割背景、そして Marp が解釈する画像キーワード。

🗒️

スライドの周辺

ヘッダー、フッター、ページ番号。コメントから作るスピーカーノート。段階表示のリスト。1 枚のスライド専用の CSS を書く <style scoped>。

🎨

組み込みテーマ

default、gaia、uncover を、Marp と同じく theme: で選べます。

1 つめの追加機能

Go テンプレートを、デッキの中で。

デッキは text/template として、Markdown の解析より前に評価されます。そのためテンプレートでスライドを生成でき、デッキを「データ+レイアウト」として書けます。

🔤

値

{{ .title }} でフロントマターを読み、その data: マッピングにデッキが必要とするその他の値を置けます。

🔁

データからスライドを

--- を出力する {{ range }} はスライドのジェネレーターです。項目ごと、登壇者ごと、リリースごとに 1 枚のスライドを作れます。

#️⃣

ページ番号と総数

{{ page }} と {{ total }} はデッキを分割して初めて決まる値なので、その時点で埋め込まれます。

🧾

コードには手を加えません

コードブロックとインラインコードは既定では評価されないので、Go テンプレートを解説するスライドでもそのまま表示できます。include で別ファイルを取り込めます。

2 つめの追加機能

スライドが、自分の役割を語ります。

kind: section は、ヘッダー、フッター、ページ番号、クラス、背景といったローカルディレクティブのプリセットに名前を付けます。kind: はそのスライドと以降のスライドに、_kind: はそのスライドだけに適用されます。スライドに直接書いたディレクティブが常に優先されます。

🏷️

組み込み

title、section、content、blank。いずれも再定義できます。

📁

一度定義して共有

フロントマターの kinds: に書くか、チームのすべてのデッキが参照する kinds の YAML ファイルにまとめられます。

🧹

設定が漏れ出さない

種類を切り替えると前の種類が設定したものはクリアされるので、クラスやフッターが次のセクションまでついてくることはありません。

試してみる

デッキをブラウザで。

プレイグラウンドは、WebAssembly にコンパイルした go-slides そのものです。左側に書くと、右側のスライドが追従します。インストールは不要で、サーバーには何も送信されません。 プレイグラウンドの画面は英語です。

⚡

ライブ

入力に合わせてワーカー内でスライドがレンダリングされ、プレビューはエディターと連動してスクロールし、ミニマップとスライドのサムネイル列も追従します。スライドショーはトランジション付きで再生されます。「Present」を押すと、ノートとタイマー付きの発表者ビューが別ウィンドウで開きます。

💡

ヘルプを内蔵

ディレクティブ、種類、テンプレート関数の補完と解説。問題は該当行に表示。数式、画像、背景などのサンプルデッキ(画像ファイルはエディターにドロップできます)。ドキュメントへのリンク。ファイルパネルには、テーマ、種類、データファイル、ドロップしたメディアといったプロジェクト一式が、slides コマンドが作るのと同じ構成で並びます。Format タブは、太字、斜体、下線、リスト、グリッドから作る表、スライドの文字揃え、リンクの Markdown を代わりに書いてくれます(元に戻すこともできます)。すべてのペインはサイズを変更できます。

🔗

共有・保存・保持

リンクの # にはデッキそのものが圧縮して格納されます。HTML、ベクター PDF、編集可能な PowerPoint や OpenDocument として保存でき、すべてブラウザ内で生成されます。プロジェクト全体を .zip でダウンロードすることもできます。下書きはリロードしても残り、保存先はお使いのブラウザだけです。

できること

まず HTML。残りは、ブラウザを操作せずに。

marp-cli は画像や PDF をヘッドレス Chrome を操作してレンダリングします。go-slides では、代わりにフリート自身の Go ライブラリがそれを担います。画像と PDF は v0.1.0、PPTX・数式・ハイライトは v0.2.0、ODP・見出しの自動フィット・HCL は v0.3.0、ベクター PDF(テキスト選択可能)と絵文字は v0.4.0 で登場しました。v0.5.0 では PPTX と ODP が編集可能になりました(marp-cli の PPTX は画像です)。v0.6.0 で watch、serve、トランジション、marp-cli のオプション、v0.7.0 で発表者ビューが加わりました。詳しくはドキュメントをご覧ください。

HTML v0.1.0

Marp と同じく、デッキごとに 1 ページを出力します。各スライドはウィンドウに合わせて拡大縮小する SVG 枠付きの <section> で、テーマの CSS とキーボード操作のビューアーが付きます。

slides expand v0.1.0

テンプレートを評価し、種類をスポットディレクティブに変換したデッキを、素の Marp Markdown として書き戻します。そこから先はどの Marp ツールにも渡せます。

ノート、種類、テーマ v0.1.0

slides notes はスピーカーノートを出力し、slides kinds と slides themes はデッキで指定できるものを一覧表示します。

slides.yaml v0.1.0

デッキを集めたフォルダー用の設定ファイル。共有の種類、テーマ、テンプレートのデータ、HTML のオプション、言語を指定できます。

PNG / JPEG v0.1.0

--images png|jpeg はスライドごとに 1 枚の画像(deck.001.png, …)を、--image は最初のスライドを書き出します。レンダリングはヘッドレス Chrome ではなく、Go で書かれたブラウザエンジン go-webengine が行います。--image-scale 2 で 2 倍の密度で描画します。

PDF v0.1.0

--pdf または -o deck.pdf:スライドのサイズで 1 スライド 1 ページ、スライドと見出しのアウトライン付きで、go-pdfkit が書き出します。フォントは埋め込まれ、ネットワークには一切アクセスしません。v0.4.0 からページはベクターになりました。テキストは選択でき、図形はシャープで、100 スライドで 758 KiB(marp-cli は 837 KiB)です(--pdf-raster で 1 ページ 1 画像のままにできます)。

PPTX v0.2.0

--pptx または -o deck.pptx:スピーカーノートとデッキのメタデータ付きで、go-ooxml が書き出します。v0.5.0 からスライドは編集可能です。デッキ自身のフォント(埋め込み)によるテキストボックス、図形、グラデーション、一度だけ格納される画像で構成され、画像になる marp-cli とは異なります(--pptx-raster で画像のままにできます)。100 スライドで 348 ms・760 KiB、marp-cli は 7.8 s・7.2 MiB です。

数式とハイライト v0.2.0

$…$ と $$…$$ は go-tex が組版し、コードブロックは go-rouge がハイライトします。HTML ページ、画像、PDF のいずれでも有効です。

ODP v0.3.0

--odp または -o deck.odp:スピーカーノート付きの OpenDocument プレゼンテーション。PPTX と同じく v0.5.0 から編集可能です(--odp-raster で 1 スライド 1 画像)。

見出しの自動フィット v0.3.0

# <!-- fit --> Title は、ページでもすべてのエクスポートでも、スライドの幅いっぱいに 1 行で表示されます。

絵文字 v0.4.0

:smile: のショートコードと Unicode 絵文字(😄 👩‍💻 🇫🇷)は、Marp Core とまったく同じ形の Twemoji 画像になります。ただし CDN から読み込むのではなく go-icons/twemoji から埋め込むので、ネットワーク不要で、ページ、画像、PDF、PPTX、ODP に描画されます。絵文字 →

HCL v0.3.0

デッキが YAML を受け付ける場所ならどこでも HCL2 が使えます。---hcl のフロントマター、slides.hcl、種類やデータのファイルで、式や関数を書けます:footer = "${upper(data.company)} · ${page()}/${total()}"。slides expand はフロントマターを YAML として書き戻します。HCL →

Watch、serve、プレビュー v0.6.0

--watch は変更された部分を再ビルドし、開いているページを再読み込みします。--server dir はデッキのフォルダーを配信します。deck.md はページとして、deck.md?pdf、?pptx、?png、?notes はリクエスト時に変換され、127.0.0.1 上で Host と Origin を検査し、フォルダーの外には出ません。--preview はブラウザを開きます。marp-cli のルートとライブリロードを、ポートを外部に開かずに実現します。コマンドライン →

複数のデッキ v0.6.0

slides -I decks/ -o site/ はフォルダー以下のすべてのデッキを変換し、ディレクトリ構成をそのまま再現します。複数のファイル、フォルダー、パターンを一度に指定でき、-P で並列数を指定できます。

トランジション v0.6.0

marp-cli の <!-- transition: fade 1s --> と 33 種類の組み込みトランジションを、ブラウザの View Transition API で再生します。画面上のコントローラーと --template bare にも対応しています。

PDF のノート、メタデータ、marp-cli のオプション v0.6.0

--notes はスピーカーノートをテキストで書き出し、--pdf-notes は PDF のページに載せ、--pdf-outlines はしおりを付けます。--title、--author、--keywords、--url、--og-image、--theme に対応し、marp-cli の .marprc と --config-file(JSON、YAML)も読み込みます。

一覧ビュー v0.8.0

o を押すと、すべてのスライドがグリッドで表示されます。矢印キーで選び、Enter かクリックで移動します。ページ上でも発表者ビュー上でも使え、marp-cli の URL と同期方式に従い、ネットワークは不要です。スライドにはラベルが付きフォーカス可能で、閉じた一覧ビューは inert になります。コマンドライン →

発表者ビュー v0.7.0

ページで p を押すと、現在のスライド、次のステップ、スピーカーノート(エスケープ済みで、聴衆側のスクリーンリーダーには読まれません)、時計とタイマーが別ウィンドウに表示され、2 つのウィンドウが互いに追従します。marp-cli の URL と同期方式を localStorage で実現し、サーバーもネットワークも不要です。1 ページあたり約 10 KB です。コマンドライン →

行番号とコードの注釈 v0.8.0

```go {lineNumbers} はコードブロックに行番号を付けます({lineNumbers=10} で 10 から開始)。行末のコメントにマーカー(// <1>)を書き、番号付きリストを続けると、その行と対応する注釈に番号付きの丸印が付きます。ページ、画像、PDF、PPTX、ODP で有効で、番号や丸印はコードと一緒にコピーされません。数式とコード →

組織

リポジトリ

slides v0.13.0

slides コマンドとそのライブラリ。Marp の Markdown を Go で解析・レンダリングし、その上に Go テンプレートとスライドの種類を加えます。v0.13.0 としてリリース済み:go install github.com/go-slides/slides/cmd/slides@latest。

docs v0.13

v0.13.0 を解説するドキュメント(Hugo + Hextra)。入門、Marp との互換性、テンプレート、種類、コマンドラインを扱います。ソース →

vscode v0.3.0

Marp for VS Code が Marp にとってそうであるように、go-slides のための VS Code 拡張機能です。WebAssembly にコンパイルした go-slides が VS Code の Markdown プレビューでデッキを表示し(バイナリ不要、vscode.dev でも動作)、テンプレートを経由してもエディターと同期スクロールし、エラーは「問題」パネルに表示され、ディレクティブ・種類・テンプレート関数を補完し、エディターの横に一覧ビューと発表者ビューを開き、slides でエクスポートします。GitHub のリリースに添付された .vsix をインストールしてください。Marketplace と Open VSX での公開は準備中で、まだ公開されていません。VS Code →

brand 利用可能

ロゴマーク(ドキュメントファミリーのインディゴで描いた、スタンドに載ったスライド)と、その各種フォーマット:SVG、PNG、JPG、ICO、ICNS、アバター、ソーシャル画像。

ドキュメントファミリーの一員です。

go-richdoc、go-ooxml、go-tex、go-docutils とともに、文書の読み込み・組版・書き出しを Go で行います。C は一切使いません。

GitHub の組織ページへ →