最近スライドを作らないといけないことがあったのですが、その作業の面倒さと成果物の差に閉口してしまいました。 「昔見ていた営業さんとかこういうの毎日やってたんだな」と思い返すのですが、つらいのは事実。
最近は、「自分が欲しいと感じるもの大体だれかやっている。」というのが常なので調べると、マークダウンからスライドを作るツールがいくつか出てきました。それぞれ触ってみました。
参考
個人的ざっくり感想
reveal.js アニメーション・演出かっこいい =>プレゼン向け
Marp スライドとしてやりたいことが大体叶う =>スライド向け
reveal.js 導入 VS-code での運用もよく見かけるんですが、自分は vs-code の拡張入れすぎて管理しきれないかなと感じています。 (便利なのはわかっているけれど。) リポジトリをクローンして始めていきます。
1 2 3 4 5 6 7 git clone https://github.com/hakimel/reveal.js.git cd reveal.jsnpm install npm start
localhost:8000
にアクセスすると下のように表示が出ます。
この時開いているファイルは、index.html
です。
使ってみる localhost:8000/demo.html
が、demo ページになっています。 こちらが非常に便利で、おそらく結構な機能を網羅しています。 HTML で記述する場合は、これを見れば同じような演出ができるリファレンスとして優秀でした。
今回はマークダウンで書くことが目的なので、試していきます。
index.html
を以下のように書き換えました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 <!DOCTYPE html > <html > <head > <meta charset ="utf-8" /> <meta name ="viewport" content ="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /> <title > reveal.js</title > <link rel ="stylesheet" href ="dist/reset.css" /> <link rel ="stylesheet" href ="dist/reveal.css" /> <link rel ="stylesheet" href ="dist/theme/black.css" id ="theme" /> <link rel ="stylesheet" href ="plugin/highlight/monokai.css" id ="highlight-theme" /> </head > <body > <div class ="reveal" > <div class ="slides" > <section data-markdown ="slide.md" data-separator ="^---" data-separator-vertical ="^~--" data-separator-notes ="^Note:" data-charset ="utf-8" data-background-color ="gray" color ="#AAA" > </section > </div > </div > <script src ="dist/reveal.js" > </script > <script src ="plugin/notes/notes.js" > </script > <script src ="plugin/markdown/markdown.js" > </script > <script src ="plugin/highlight/highlight.js" > </script > <script > Reveal .initialize ({ hash : true , markdown : { smartypants : true , }, plugins : [RevealMarkdown , RevealHighlight , RevealNotes ], }); </script > </body > </html >
data-markdown="slide.md"
とある通り、スライド本体は slide.md に記載します。 そのほかの設定項目の内容は以下の通りです。
data-markdown=”slide.md” スライドのマークダウンのパス
data-separator=”^---“ スライドのページ区切りを示す文字列定義
data-separator-vertical=”^~--“ 縦方向のページ遷移をするスライドのページ区切りを示す文字列定義
data-separator-notes=”^Note:” 発表時メモを記述するエリアの指定
data-charset=”utf-8” 読み込むマークダウンの文字コード設定
data-background-color=”gray” スライド全体の背景設定
color=”#AAA” スライド全体の文字色指定
slide.md 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 <!-- .element data-background-color="#909000" --> # reveal.js を試す <!-- .element style="color:#A0A0A0;" --> 背景色を個別設定 --- ### 文字色設定 - りんご <!-- .element style="color:#FF0000" -->- みかん <!-- .element style="color:#EBAE28" -->- もも <!-- .element style="color:#E3B3C7" -->Note: 発表者ノートを Note:以降に記載できる あいうえお --- <!-- .element data-transition="zoom" --> ### ページ送り ZOOM --- <!-- .element data-transition="fast" --> ### ページ送り 早い --- <!-- .element data-transition="slow" --> ### ページ送り 遅い --- <!-- .element data-transition="slide-in fade-out" --> ### ページ送り スライドしてフェードで次へ --- <!-- .element data-background-image="img/img.jpg" --> ### 背景に画像を設定 --- ### 縦ページ遷移 ~-- ### フラグメントありていに言うならアニメーション デフォルト <!-- .element: class="fragment" data-fragment-index="1" --> フェードアウト <!-- .element: class="fragment fade-out" data-fragment-index="2"--> 上フェード <!-- .element: class="fragment fade-up" data-fragment-index="3"--> 下フェード <!-- .element: class="fragment fade-down" data-fragment-index="4"--> 左フェード <!-- .element: class="fragment fade-left" data-fragment-index="5" --> 右フェード <!-- .element: class="fragment fade-right" data-fragment-index="6"--> フェードイン・フェードアウト <!-- .element: class="fragment fade-in-then-out" data-fragment-index="7"--> フェードイン・50%透明に <!-- .element: class="fragment fade-in-then-semi-out" data-fragment-index="8"--> 取り消す <!-- .element: class="fragment strike" data-fragment-index="9" --> ~-- ### フラグメントありていに言うならアニメーション 2 大きくする <!-- .element: class="fragment grow" data-fragment-index="1" --> 小さくする <!-- .element: class="fragment shrink" data-fragment-index="2"--> 赤くする <!-- .element: class="fragment highlight-red" data-fragment-index="3" --> 一旦赤くする <!-- .element: class="fragment highlight-current-red" data-fragment-index="4" --> 青もある <!-- .element: class="fragment highlight-blue" data-fragment-index="5" --> 一旦青くする <!-- .element: class="fragment highlight-current-blue" data-fragment-index="6" --> 緑もある <!-- .element: class="fragment highlight-green" data-fragment-index="5" --> 一旦緑にする <!-- .element: class="fragment highlight-current-green" data-fragment-index="6" --> --- ### 画像を表示 (はみ出す) ![](img/img2.jpg ) --- ### 画像を表示 (はみ出さないように自動調整) <img src ="img/img2.jpg" class ="r-stretch" /> ```md ![](ファイルパス) ``` を使うと自動調整がうまく効かない --- ### 画像を表示 (はみ出さないように手動サイズ調整) ![](img/img2.jpg ) <!-- .element: width="100px" --> --- ### なるべく大きく <!-- .element: class="r-fit-text" --> なるべく大きく <!-- .element: class="r-fit-text" --> サイズ無調整
動かしてみると以下のようになります。
PDF への変換はhttp://localhost:8000/?print-pdf
にアクセスし、そのページを PDF として保存するとのことです。 確認してみたところ、横に遷移するページは変換が正しく行われていたのですが、縦に遷移するページ以降がおかしくなっていました。 プレゼン用途と配布用途では分離した方が良さそうです。
縦スクロールしたり、アニメーションがリッチでかっこいい感じのものができました。
Marp 導入 1 2 3 npx @marp-team/marp-cli -w -s ./
http://localhost:8080/slide.md
にアクセスすると、白いページだけ表示されます。
使ってみる slide.md を書き換えてスライドを作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 --- title: スライドのタイトル description: スライドの説明 # テーマ設定 defult gaia uncover theme: defult # 1ページ目のページ表示するか paginate: false # 2ページ目以降のページ表示するか _paginate: true # ヘッダー文字列設定 header: ヘッダー文字列 # フッター文字列設定 footer: フッター文字列 # サイズ指定 4:3 と 16:9 が設定できた size: 16:9 marp: true style: | section.titlepage * , h1{ text-align: center; } section.titlepage{ background-color: #AA0 } header, footer{ text-align: center; } --- <!-- _ class: titlepage --># Marp 背景色をクラス付与で個別設定 ``` <!-- _class: titlepage --> ``` --- <!-- _backgroundColor: gray --> 背景色を HTML コメント で個別設定 ```md <!-- _ backgroundColor: gray -->``` `_`をつけると適用先が現在のページだけに `_`がないと記述したページ以降すべてに適用 --- <!-- _color: #FF0000 --> # 文字色指定 ページ単位で文字色を指定 ``` md<!-- _color: #FF0000 --> ``` - りんご - みかん - もも --- # 画像(ただ貼り付け) ![](./img/img.jpg ) ```md ![](./img/img.jpg ) ``` --- # 画像(背景として貼り付け) ![bg ](./img/img.jpg ) ```md ![bg ](./img/img.jpg ) ``` --- # 画像(半透明で貼り付け) ![bg opacity:.5 ](./img/img.jpg ) ```md ![bg opacity:.5 ](./img/img.jpg ) ``` --- # 画像(ブラー効果をつけて貼り付け) ![bg blur:10px ](./img/img.jpg ) ```md ![bg blur:10px ](./img/img.jpg ) ``` --- # 画像(右半分に指定して貼り付け) ![bg right ](./img/img2.jpg ) ```md ![bg right ](./img/img2.jpg ) ``` --- # 画像(右半分に 2 枚貼り付け) ![bg right ](./img/img2.jpg ) ![bg right ](./img/img2.jpg ) ```md ![bg right ](./img/img2.jpg ) ![bg right ](./img/img2.jpg ) ``` --- # 画像(右側に 20%の範囲を設定して貼り付け) ![bg right:20% ](./img/img2.jpg ) ```md ![bg right:20% ](./img/img2.jpg ) ``` --- # リスト - 1つめ - 2つめ - 3つめ ```md - 1つめ - 2つめ - 3つめ ``` --- # フラグメントリスト * 1つめ * 2つめ * 3つめ `-` をつけるとただのリスト `*` をつけるとフラグメントリスト ```md * 1つめ * 2つめ * 3つめ ``` --- # 番号付きリスト 1. 1つめ 2. 2つめ 3. 3つめ ```md 1. 1つめ 2. 2つめ 3. 3つめ ``` --- # 番号付きフラグメントリスト 1) 1つめ 2) 2つめ 3) 3つめ `数字.` をつけるとただの数字付きリスト `数字)` をつけると数ぎ付きフラグメントリスト ```md 1) 1つめ 2) 2つめ 3) 3つめ ```
こちらを動作させると次のようになります。
画像の貼り付け機能が便利で、右寄せすると文字は左側に寄せられるので、非常に便利です。
例えばこんな感じ。
1 2 3 4 5 6 7 <!-- header: "" --> <!-- footer: "" --> ![bg right ](./img/img2.jpg ) 吾輩は猫である。名前はまだ無い。 どこで生れたかとんと見当がつかぬ。何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。吾輩はここで始めて人間というものを見た。しかもあとで聞くとそれは書生という人間中で一番獰悪な種族であったそうだ。この書生というのは時々我々を捕えて煮て食うという話である。しかしその当時は何という考もなかったから別段恐しいとも思わなかった。ただ彼の掌に載せられてスーと持ち上げられた時何だかフワフワした感じがあったばかりである。掌の上で少し落ちついて書生の顔を見たのがいわゆる人間というものの見始であろう
雑にレイアウトしてイイ感じにしてくれるという、「さっとスライドを作りたい」という需要には答えてくれています。
reveal.jsとの違いとしては、指定した16:9や4.3ではないサイズで開かれたときに、Marpは見切れます。 印刷も検討に入れて調整するときには、見切れてくれた方が助かるので、冒頭の感想でスライド向けと書きました。
エクスポートは以下のコマンドで実行できます。
1 2 3 4 5 npx @marp-team/marp-cli .\slide.md -o output.pdf npx @marp-team/marp-cli .\slide.md -o output.html
HTMLへの出力は、注意が必要で画像などのフォルダは、同じ構成で持っておく必要があります。 今回の場合、img/img.jpg
でアクセスしているのでHTMLファイルも同じ構成でファイルアクセスできる必要があります。
今回はreveal.jsとMarpを試しました、最初はremarkも書こうかと思いましたが息切れです。 どちらか片一方という判断はまだできてませんが、積極的に使用したいと考えています。
ではでは。