Markdownでスライドを作って公開する (reveal-md + GitHub Pages)

## はじめるまえに
この記事は[UEC Advent Calendar 2022](https://adventar.org/calendars/7581)の2日目の記事です。
昨日は俵屋宗達さんの「[本当に何も思いつかなかったけど](https://tawaraya-so.hatenablog.com/entry/2022/11/30/230836)」でした。
話題がない話題で4000字超...？

あと、

https://twitter.com/Tawaraya_So/status/1598675656052969472

ようこそVLLへ。

# はじめに
PowerPointをポチポチとクリックしながらスライドを作るの、だるくなったことないですか？
アニメーションを0.01秒単位で調整するのが面倒に感じたことはありませんか？

私はあります。

ある時までスライドを細かく凝りすぎていて、その反動で「いっそテキストで簡単にスライド作れたらなー」と思っていたところ

https://qiita.com/Targityen/items/40ae4795e2cb77c1adc6

という素晴らしい記事を読んで、[reveal.js](https://revealjs.com/)を使い始めました。
読んだことない方はぜひ一読を。

その後なんやかんやあって、今は[reveal-md](https://github.com/webpro/reveal-md)というツールを使っています。

この記事では、私がたどり着いたMarkdownでのスライド作成と公開のあれこれを共有します。

ちなみにこちらが完成したページです。

https://slide.suzuke.dev/

## reveal.jsのいいところ！
* Markdownで文書を書くだけでスライドになる
→発表の台本を書けばスライドもできる

* HTMLになる
→サイトに公開しておけばいつでもどこでもプレゼンできる

* 横だけでなく下にも移動できる
→「章立て」されたスライドが作れる
![syou.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/759481/122af9a9-0235-d0a8-7cef-3c47cd72ee97.gif)


# 本記事の対象
* いい感じの発表用スライドを楽に作りたい
* 何もわからんけどプログラミング(?) でスライド作るのかっこいいなと思っている
* Beamerは疲れた
* reveal-mdの資料をどうしても日本語で読みたい

技術面は、シェルで何かを実行できてGitHubアカウント持ってる程度でたぶん大丈夫です。自分がそうなので。

# 環境

* [reveal-md](https://github.com/webpro/reveal-md) 5.3.4  **今回の主役**

https://github.com/webpro/reveal-md

* GitHub Pages
* Ubuntu 20.04 (WSL)
* Python 3.9.10

reveal-md以外は類似のやつでいいですし、極端なバージョン依存はないと思います。
試したところでは、Netlifyでも普通に大丈夫でした。

ただし、投稿時点でのreveal-md最新バージョン(5.3.4)ではカスタムCSSなどのリンクにバグがあります。
対応策も書きますが、後々のバージョンアップで直ると思いますのでそのあたりは確認しておいてください。

# やりかた
流れとしては
1. [環境の用意](##環境の用意)
2. [スライドの作成](##スライドを作る)
3. [HTMLを生成](##HTMLを生成する)
[(バグ潰し)](###バグの対処)
4. [アップロードと公開](##アップロードと公開)

です。

## 環境の用意

reveal-mdの[README](https://github.com/webpro/reveal-md)に従って導入していきます。

[npm(Node.js)](https://nodejs.org/ja/) が無ければ入れてください。

```sh:インストール
npm install -g reveal-md
```

どうせGitHub Pagesに上げるので、最初からリポジトリを作って適当な場所にcloneしておきましょう。
例えば、myrevealというリポジトリ名にします。

```sh
git clone https://github.com/youridxxxx/myreveal.git
```
ディレクトリ構成は次のようにします。変えた場合は以降の記述を適宜読み替えてください。
```sh
myreveal
├── docs/       GitHub Pages公開用
├── fix/        バグやらの修正用スクリプト
├── md/         スライドのMarkdown
├── plugin/     reveal.jsのプラグイン
└── theme/      カスタムテーマ
└── .nojekyll   GitHub Pages用(jekyll無効化)

```

## スライドを作る
`md/test/test_slides.md`を作り、それを編集していきます。

```markdown:test_slides.md
# Reveal!
うおうお
```

これを表示させてみましょう。
下のコマンドを実行してライブサーバーを起動し、出てきたlocalhostにアクセスします。

```sh
> reveal-md ./md -w
Reveal-server started at http://localhost:1948
```

開くとリンクがあるのでクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/759481/db5a3e4e-bcf7-c7e3-1b40-5dd579d1a3e8.png)

じゃん！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/759481/12ddeaca-5d33-88c8-3981-98f4226b5659.png)


スライドができましたね。

とはいえ、このままだとただの1枚絵なのでスライドらしくありません。
2,3ページくらい付けてみましょう。`---`や`--`がページ区切りです。

変更を保存したら、ブラウザのページを再読込してください。

```md:test_slides.md
# Reveal!
うおうお

---

# 次のページ

--

## 下のページ

---

さらに次のページ
```

![hor_var.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/759481/96d00b99-35af-48ce-4c22-6dda669bc135.gif)


ライブサーバーの停止はコマンドラインで`Ctrl+C`して止めましょう。

### テーマを変える
先頭にパラメータを指定するYAMLを書くと、テーマやタイトルなどを設定できます。

```md:test_slides.md
---
theme: solarized
revealOptions:
    transition: "slide"
title: "test title"
---

# Reveal!
(略)
```

![hor_sor.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/759481/5f5a9c14-e0a1-1f90-ac9e-5cec1607f019.gif)

## HTMLを生成する
先程見たスライドを静的サイトとして公開できるようなHTMLにエクスポートします。

```sh
> reveal-md md/ --static docs
❏ reveal-md/node_modules/reveal.js/dist → docs/dist
❏ reveal-md/node_modules/reveal.js/plugin → docs/plugin
★ docs/index.html
（略）
Wrote static site to docs
```

reveal-md最新バージョン(5.3.4)には一部のパスにバグがありますので、[バグへの対処](###バグの対処)を参照してください。

 
### バグの対処
reveal-md(v5.3.4)ではテーマCSSのパスにバグがあります。
各markdownファイルごとに生成された`*_slides.html`について、

|変更前|変更後|
|---|---|
|`href="/_assets/theme`|`href="./../_assets/theme`|
|`href="./dist/theme/`|`href="./../dist/theme/`|

と修正する必要があります。

## アップロードと公開

[GitHub Pages](https://docs.github.com/ja/pages/getting-started-with-github-pages/about-github-pages)を使います。

まずはリモートに変更をアップロードしましょう。

```sh
> git add .
> git commit -m "add test page"
> git push
```

次は、そのリポジトリの設定から、docs以下を公開するように設定したらもう完了です。
Saveを押すと出てくるリンクにアクセスしましょう！
処理が終わるまでちょっとかかるかもしれません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/759481/81fb5696-9c53-5805-9488-74decdc6d712.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/759481/04a3ea5e-06b6-7933-314d-f0ee91442f11.png)
できた！


# おわりに

VLLでも工研でも、なんなら技術英語でも散々やったreveal.js布教、これでまあ一応ゴールとしておきます。
これからも布教活動はすると思いますが、気になった方はぜひ使ってみてください。絶対楽だから。

明日はしらたきさんの「開催記（開催できたら）」だそうです。楽しみですね！

https://adventar.org/calendars/7581