Jekyllでプレゼンするためにremark.jsを使った話

## 結論を先に一言で

jekyll + redcarpetの人がremark.jsを使うなら、
assetsとしてmarkdownファイルを用意して、remark.jsが外部ファイルを読み込むように設定しよう


## どういうことなのか

普段、技術メモをgithub pagesでjekyllを使ってとっていました

技術メモの内容からLTしようと思ったときに、
markdownで書いたメモの内容をプレゼンテーション形式にできたら楽だと思いました。

markdownからスライドを作るツールとしては、
すでにいくつかあるようで、自分も以下の記事を参考にremark.jsを使うことにしました。

[Markdownでプレゼン用スライドをつくる方法いろいろ](http://qiita.com/shu223/items/7193ca05bb8a75fe4854)

## 失敗したパターン

remark.jsのREADMEを参考に、jekyll用のテンプレートを作ります。
idがsourceになっているテキストエリアにmarkdownを書くことでプレゼンにしてくれるらしいので
そこにjekyllでとっていたメモを表示するようにしました。

```html
<!DOCTYPE html>
<html>
  <head>
    <title>Title</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    <style type="text/css">
      @import url(https://fonts.googleapis.com/css?family=Yanone+Kaffeesatz);
      @import url(https://fonts.googleapis.com/css?family=Droid+Serif:400,700,400italic);
      @import url(https://fonts.googleapis.com/css?family=Ubuntu+Mono:400,700,400italic);

      body { font-family: 'Droid Serif'; }
      h1, h2, h3 {
        font-family: 'Yanone Kaffeesatz';
        font-weight: normal;
      }
      .remark-code, .remark-inline-code { font-family: 'Ubuntu Mono'; }
    </style>
  </head>
  <body>
    <textarea id="source">
    {{ content }}
    </textarea>
    <script src="https://gnab.github.io/remark/downloads/remark-latest.min.js">
    </script>
    <script>
      var slideshow = remark.create();
    </script>
  </body>
</html>
```

ためしに書いたmarkdownも、READMEの内容そのまんまです。

```
---
layout: default
title: test
---

class: center, middle

# Title

---

# Agenda

1. Introduction
2. Deep-dive
3. ...

---

# Introduction
```

### 水平線がでてきた

jekyll serverして見てみると、1スライドに上で書いたmarkdownが表示されます。
remark.jsではハイフン3つがスライドの区切りのはずなのに、
水平線(hr要素)になっているのはなぜだ？と思っていました。

原因は、jekyllの設定でmarkdownのレンダリングにredcarpetを使うようにしていたため、
redcarpetの拡張文法で、ハイフン3つがhr要素にレンダリングされていたからでした。

## うまくいったパターン

解決策としては、markdownがjekyllにレンダリングされなければいいことなので、
プレゼンの内容をassetsフォルダ(画像とかCSSとか置いているフォルダ)に配置しました。

### メモの書き方

メモ(_postフォルダに保存するもの)の書き方は以下の通りです。

- レイアウト指定
- タイトル
- プレゼンに変換されるmarkdownのパス

だけ設定して何も書いていません。

```
---
layout: layout_remark
title: テスト
source: /assets/remark/2015-03-05-test.md
---
```

2015-03-05-testには、READMEに書いてあるmarkdownを書いておきます。

### レイアウトの書き方

次にレイアウトのHTMLを変更します。

```html
<!DOCTYPE html>
<html>
  <head>
    <title>Title</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    <style type="text/css">
      @import url(https://fonts.googleapis.com/css?family=Yanone+Kaffeesatz);
      @import url(https://fonts.googleapis.com/css?family=Droid+Serif:400,700,400italic);
      @import url(https://fonts.googleapis.com/css?family=Ubuntu+Mono:400,700,400italic);

      body { font-family: 'Droid Serif'; }
      h1, h2, h3 {
        font-family: 'Yanone Kaffeesatz';
        font-weight: normal;
      }
      .remark-code, .remark-inline-code { font-family: 'Ubuntu Mono'; }
    </style>
  </head>
  <body>
    <script src="https://gnab.github.io/remark/downloads/remark-latest.min.js">
    </script>
    <script>
        var slideshow = remark.create({
            sourceUrl: '{{ page.source }}'
        });
    </script>
  </body>
</html>

```

大事なのは、以下の部分。
remark.createするときにsourUrlを指定して外部ファイルを読み込むことができるので
メモに書いてあったsourceのパスを読み込んでくれるように書きます。

```html
<script>
    var slideshow = remark.create({
        sourceUrl: '{{ page.source }}'
    });
</script>
```

これでビルドするとメモの一つがスライドに変換されて
LTとかですぐ発表できるようになります。

すごくLTしたくなってきました。

## さいごに

ためしに作ってみたのが以下のプレゼンです。
[チェックイン風アプリを5分でつくる](http://rebirthble.github.io/2015/03/05/location-demo.html#1)