deck.js とうまくやっていくための gem を作った
deck.js は便利です。
HTML でスライドを書くツールは色々あるけど、デフォルトのテーマでも見栄えが良かったり、プログラマブルなところが気に入ってます。
ただその HTML っていうのが結構大変で・・・
- (deck.js に付いてるテンプレート)
- deck.js/boilerplate.html at master · imakewebthings/deck.js · GitHub
JS や CSS を読み込んだり、HTML (Snippet) をコピペしたりと、スライド意外の部分でやる事が多いです。そもそも HTML でがっつりスライドを書くってのもしんどいですね。
そんなこともあって、「slim とか軽量なテンプレート言語で書けたらなー」とか「おいしいとこだけ書けたらなー」とか思いながら Ruby でスクリプト作ってたら、「これ意外と有用なんじゃね?」ってレベルになったので gem として公開してみる事にしました。
荒削りかつ不親切な部分もありますが、よければ使ってやってください。
ソースは以下から。
インストール
Ruby が入ってれば gem でインストールできます。
後で Bundler も使うので、入ってなければインストールしておいてください。
$ gem install deckr $ gem install bundler # 入ってなければ
Sinatra アプリケーションの作成
適当なディレクトリで以下のコマンドを実行します。(presentations は任意の名前でOK)
$ deckr new presentations
実行すると、指定したディレクトリ以下に Sinatra アプリケーションが作られます。
presentations ├── Gemfile ├── config.ru ├── deck │ └── ... └── views ├── index.slim └── layout.slim
deck には deck.js のファイル群、views にはスライドのテンプレートが入ってます。Gemfile や config.ru はおなじみのファイルですね。
加えて以下のコマンドを実行すれば Web サーバーが起動します。
$ cd presentations $ bundle install --path vendor/bundle $ bundle exec rackup
ブラウザで http://localhost:9292/ にアクセスすれば、サンプル的なやつが表示されると思います。
テンプレートの書き方
以下はデフォルトの views/index.slim の内容です。
deck っていうヘルパーが使える事を除いては普通のテンプレートです。
- @title = "Your deck.js Presentation" - deck.style "web-2.0" - deck.transition "horizontal-slide" - deck.enable "goto", "menu", "navigation", "status", "hash", "scale" .slide h1 Slide .slide h1 Content .slide h1 Here
最初の 4 行ではスライドを設定しています。こう書いとけば views/layout.slim の方でよろしくやってくれるようになってます。
1 行目は単純に変数を設定してるだけですね。@title が設定されていれば title タグに出力されるようになってます。
2~3 行目の deck.style, deck.transition でテーマを指定しています。それぞれ deck/themes/style, deck/themes/transition 以下のファイルに対応します。
4 行目の deck.enable では Extension を有効にしています。deck/extensions 以下のディレクトリに対応します。
それ以降にはスライドの内容を書いていきます。
.slide (<div class="slide">...</div>) の内容がスライド 1 ページに対応します。
たとえばアジェンダだとこんな感じでしょうか。
.slide h2 Agenda ol li foo li bar li baz
テンプレートの追加とか
テンプレートを追加する時は、ちょっと面倒ですが config.ru にルートを追加してください。
たとえば views/foo.slim を追加する場合、以下のような感じです。
get "/foo" do slim :foo end
また、以下のようにすれば slim 以外のテンプレート言語も利用出来ます。
get "/bar" do erb :bar, :layout_engine => :slim end
やるかわからない TODO
- 静的 HTML ファイルのビルド
- Extension のビルド (Coffee Script とか SCSS とかをコンパイル)
- deck.js を github から落としてくるようにする (今は gem に添付してるやつだけ)