高速スライド作成のベスト プラクティス reveal.js

## About [@k_kato](https://twitter.com/k_kato)

```js
const addTimeline2016 = (profile) => {
    profile.timeline.push({
        name: "@k_kato",
        year: 2016,
        lang: "Scala",
        job: "Web",
        do: "『C# モダン Web 開発』執筆中 (進捗 0.2%)",
        try: "Microsoft MVP (落選 2016 年 7 月)"
    });
}
```

---

## Qiita スライド モード が素晴らしい

* スライド デザインから解放される！
 * ~~マウス職人芸~~
* コンテンツ作成に集中できる！
 * ~~デザインとビジネスロジックが密結合~~
* Web ブラウザだけでどこでもプレゼンできる！
 * ~~Write once, run anywhere~~

---

## Qiita スライド モード が素晴らしい

* スライドでシンタックス ハイライトが使える

```fsharp
(fun () -> printfn("F# は人生"))()
```

* Qiita なので SEO に強い（かも）
 * 検索エンジンにインデックスされないスライドは誰も見てくれない（かも） 😭

---

## Qiita スライド モードも素晴らしいがあえて reveal.js ではじめる高速スライド作成入門

---

## [reveal.js](http://lab.hakim.se/reveal-js/) とは？

reveal.js は 2011 年にスウェーデンの [Hakim El Hattab](https://github.com/hakimel) が開発した HTML プレゼンテーションのフレームワーク

* [HTML，CSS，Javascript](https://github.com/hakimel/reveal.js#markup) でスライドが書ける!
* [Markdown](https://github.com/hakimel/reveal.js#markdown) でも書ける! ([Paul Irish](https://gist.github.com/paulirish/1343518) の改造版!)

---

## [reveal.js](http://lab.hakim.se/reveal-js/) の機能

 * [シンタックス ハイライト](https://github.com/hakimel/reveal.js#code-syntax-highlighting) ([highlight.js](https://highlightjs.org/) を使用)
 * [フォント](https://github.com/hakimel/reveal.js#folder-structure)，[背景色](https://github.com/hakimel/reveal.js#slide-backgrounds)，[サイズ](https://github.com/hakimel/reveal.js#presentation-size)
 * [スライド方向](https://github.com/hakimel/reveal.js#internal-links)，[スライド エフェクト](https://github.com/hakimel/reveal.js#parallax-background)
 * [PDF 出力](https://github.com/hakimel/reveal.js#pdf-export)
 * [数式 (MathJax)](https://github.com/hakimel/reveal.js#mathjax)
 * 全機能は[こちら](https://github.com/hakimel/reveal.js#revealjs--)

---

# [reveal.js](http://lab.hakim.se/reveal-js/) スライド開発環境

1. [reveal.js](http://lab.hakim.se/reveal-js/): スライド作成フレームワーク
1. [highlight.js](https://highlightjs.org/): シンタックス ハイライト
1. [live-server](https://www.npmjs.com/package/live-server): 開発用 Web サーバー
1. [GitHub Page](https://pages.github.com/): 公開用 Web サーバー
1. [VS Code](https://code.visualstudio.com/): 開発エディター (※お好みで)

---

## reveal.js インストール
 1. reveal.js を[ダウンロード](https://github.com/hakimel/reveal.js/releases)する
 1. `reveal.js-3.6.0.zip` を解凍する
 1. [Node.js をインストール](https://docs.npmjs.com/getting-started/installing-node)する

##### 📝 コラム: Node.js は高速なのか?

PayPal の [Jeff Harrell](https://www.paypal-engineering.com/2013/11/22/node-js-at-paypal/) (2013) は，Node.js は Java Spring より秒間 2 倍のリクエストを処理できたと書きました。そして [.NET Core は Node.js の 8 倍高速](https://github.com/aspnet/benchmarks#plain-text-with-http-pipelining) ですが，導入事例が聞こえてこないのです 😭

---

## reveal.js スライド作成ビッグ ピクチャ
 1. `index.html` を編集する
   * [Markdown スライドに変更する](https://github.com/hakimel/reveal.js#external-markdown)
   * [シンタックス ハイライトを変更する](https://highlightjs.org/static/demo/)
 1. `package.json` を編集する
   * [live-server](https://www.npmjs.com/package/live-server) を追加する
 1. Markdown でスライドを記述する
 1. GitHub Page でスライドを公開する

---

## [1/4] index.html を編集する
 * [Markdown スライドに変更する](https://github.com/hakimel/reveal.js#external-markdown)
   * reveal.js は HTML でスライドを作成するようにデフォルト設定されている
   * Markdown でスライドが作成できるように設定を変更する
   * reveal.js の設定 index.html と スライド データ index.md を分ける ([単一責任原則 (SRP: Single Responsibility Principle)](https://en.wikipedia.org/wiki/Single_responsibility_principle) を実践)

---

```html:index.html
<div class="reveal">
	<div class="slides">
		<section data-markdown="index.md"  
				data-separator="^\n\n\n"  
				data-separator-vertical="^\n\n"  
				data-separator-notes="^Note:"  
				data-charset="utf-8">
		</section>
	</div>
</div>
```
---

## [1/4] index.html を編集する
 * [シンタックス ハイライトを変更する](https://highlightjs.org/static/demo/)
   * [highlight.js](https://highlightjs.org/static/demo/) から好みのスタイルをダウンロードして CSS を差し変える

```html:index.html
<link rel="stylesheet" href="lib/css/zenburn.css">
```
 * 僕は [Ethan Schoonover](http://ethanschoonover.com/solarized) の`solarized-dark.css` 派 (見やすいし，ほぼすべての[エディター & IDE](http://ethanschoonover.com/solarized#editors-ides) に展開されている)

---

## [2/4] package.json を編集する
 * [live-server](https://www.npmjs.com/package/live-server) を追加する
   * live-server は 2012 年にフィンランドの [Tapio Vierros](https://github.com/tapio) が開発した，軽量の Web サーバー
   * 1 度起動するだけで，ファイルの変更を Watch & 検知して Web ブラウザでプレビュー中のスライドを自動リロードしてくれる ([JS を埋め込んで Web Socket 通信でリロードしている](https://github.com/tapio/live-server#how-it-works))
   * 作成中のスライドを高速にプレビューできる

---

```json:package.json
{
  "name": "yourPresentationTitle",
  "devDependencies": {
      "live-server": "^1.0.0"
  },
  "scripts": {
      "build": "./node_modules/.bin/live-server"
  }
}
```

---

## [2/4] package.json を編集する
 * live-server を起動する

```bash:Terminal
$ npm run build
```
 * index.html が Web ブラウザで表示される
 * index.md を編集&保存で自動リロードされる

---

## [3/4] Markdown を編集する

```markdown:index.md
## Hello reveal.js

 * 改行 3 個で横スライド
 * 改行 2 個で縦スライド

```fsharp
(fun () -> printfn("F# は人生"))()
```　

```


---

## [4/4] [GitHub Page](https://pages.github.com/) でスライドを公開する

 * GitHub で *username*.github.io という名前でリポジトリーを作成する (*username* は取得した GitHub アカウント名)
 * *username*.github.io を `git clone` する
 * スライド一式を `git commit`，`git push` する
 * https://*username*.github.io を ブラウザで開く 

---
## [4/4] reveal.js x GitHub Page の例

* Markdown スライド例
 * [Stream vs. LINQ](https://github.com/kasecato/kasecato.github.io/tree/master/streamVsLinq)
 * https://kasecato.github.io/streamVsLinq/
* HTML スライド例
 * [GitHub x Maven Central x Coveralls x CircleCI](https://github.com/kasecato/kasecato.github.io/tree/master/ci)
 * https://kasecato.github.io/ci/

---

## まとめ

 * Qiita スライド モードは素晴らしい
 * reveal.js を使ってスライド作成環境が構築できた
 * live-server を使ってスライドの確認環境が構築できた
 * GitHub Page でスライドが公開できた
 * 高速スライド作成ができた (?)

---

# Happy Hacking Presentation!