mabots' blog

知のレバレッジを最大化せよ (旧はてなダイアリーから移転しました。)

Middleman で Slim をサクッと使えるようにする

Middleman の build と、Movable Type の publish ってなんだかシンパシーを感じてしまいますね。ところで、静的サイトジェネレーターの Middleman *1Rails で使われるとてもシンプルなテンプレートエンジン Slim *2 をサクっと使う方法をまとめました。

導入編

もうすでに project をつくってしまった状態で Slim 化する想定です。なお、様々なプロジェクトテンプレートが用意されており、プロジェクト作成時にそれを使うのもよいでしょう。

$ gem install middleman
$ middleman init PROJECT_NAME
$ cd PROJECT_NAME
$ bundle exec middleman s

Slim の導入

Gemfile を編集

gem "slim"

Bundle / Bundle Install

$ bundle

Config.ru を編集

Slim::Engine.set_default_options :pretty => true

Slim::Engine.set_default_options :shortcut => {
  '#' => {:tag => 'div', :attr => 'id'},
  '.' => {:tag => 'div', :attr => 'class'},
  '&' => {:tag => 'input', :attr => 'type'}
}

Slim ファイルの作成と確認

適当な拡張子の slim ファイル (aaaaa.html.slim) を /source 以下に作ってみます。

.welcome
  h1 Middleman is Watching
  p.doc
    = link_to "Read Online Documentation", "http://middlemanapp.com/"

ただそのまま http://localhost:4567/aaaaaa.html にアクセスしても設定がロードされていないので Not Found になります。そこで middleman server を再起動すれば Slim で記述された内容がレンダリングされます。

Ctrl-C 
$ bundle exec middleman s

デフォルトの application layout を Slim 化してみる

Middleman で用意している layout.erb (source/layouts/layout.slim) を Slim 化したサンプルを下記に貼り付けておきますので、ご参考にどうぞ。

html
  head
    meta charset="utf-8"
    /! Always force latest IE rendering engine or request Chrome Frame
    meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible"
    /! Use title if it's in the page YAML frontmatter
    title= current_page.data.title
    = stylesheet_link_tag "normalize", "all"
    = javascript_include_tag  "all"
  body class= page_classes
    = yield

*1:http://middlemanapp.com/jp/

*2: Haml よりも少し高速に動作し、より少ない文字量でマークアップが可能 http://slim-lang.com/