はじめまして。
Q&Aコミュニティ テルミー」(以下、テルミー)のフロントエンドを担当しています富澤と申します。
今回は、テルミーの開発で使用しています、「Haml」について紹介と使用しての雑感をお話させて頂ければと思います。


まず、Hamlを採用した経緯について少しお話しさせて頂きます。

テルミーは、昨年の終わり頃から今年の2月中旬にかけてRuby on Railsで作り直していたのですが、その際、Hamlならサーバーサイドエンジニアにもviewのテンプレートが扱いやすいということで採用しました。


では、Hamlについて簡単ではありますが、紹介させて頂きます。

そもそもHamlって?

Hamlとは、「HTML abstraction markup language」の略で、“はむる”と読みます。
HTMLを生成するためのマークアップ言語で、インデントと簡単な構文でシンプルに記述することができます。
本家サイトには、Haml開発の基本原則として以下の4つを掲げています。

1. Markup Should be Beautiful
2. Markup Should be DRY
3. Markup Should be Well-Indented
4. HTML Structure Should be Clear

英語が得意ではないので和訳は避けますが、なんとなく伝わりますでしょうか?


インストール方法は、以下のようにgemコマンドでインストールします。

$ gem install haml

基本的な記述

以下のように、タグ名の先頭に%をつけて、記述していきます。

Hamlの記述

%p= "ゆる~いQ&Aコミュニティ テルミー"

出力結果

<p>ゆる~いQ&Aコミュニティ テルミー</p>

入れ子の場合は以下のように記述します。インデントが必ず必要で半角2spaceとします。

Hamlの記述

%div
  %p
    %span= "ゆる~いQ&Aコミュニティ テルミー"

出力結果

<div>
  <p>
    <span>ゆる~いQ&Aコミュニティ テルミー</span>
  </p>
</div>

空白・改行の制御

"<"をタグの後ろにつけることでタグの内側、">"をタグの後ろにつけることでタグの外側の空白・改行を取り除きます。インライン要素が続く場合や<li>を"display: inline-block;"にした時などに有効です。また、"><"のように両方使用することも可能です。

Hamlの記述

%p<
  %i><= "ゆる~いQ&Aコミュニティ "
  %span><= "テルミー"

出力結果

<p><i>ゆる~いQ&Aコミュニティ </i><span>テルミー</span></p>

属性の追加

href, alt, titleなどの属性を追加する場合は、タグ名の後に{}もしくは()を書き追加することができます。

Hamlの記述

%a{:href => "http://tell-me.jp", :title => "テルミー"}
  %img{:src => "hoge.png", :alt => "ゆる~いQ&Aコミュニティ テルミー"}

出力結果

<a href="http://tell-me.jp" title ="テルミー">
  <img alt="ゆる~いQ&Aコミュニティ テルミー">
</a>

idとclass

idとclassは、cssセレクタと同じ記述方法で追加することができます。

Hamlの記述

%a#hoge.fuga{:href => "http://tell-me.jp", :title => "テルミー"}
  %img{:src => "hoge.png", :alt => "ゆる~いQ&Aコミュニティ テルミー"}

出力結果

<a href="http://tell-me.jp" title ="テルミー" id="hoge" class="fuga">
  <img alt="ゆる~いQ&Aコミュニティ テルミー">
</a>

その他

Rubyの構文が使用できるため、変数・条件分岐などが使用できます。ですので、以下のように配列をeachでループさせることも可能です。

Hamlの記述

%ul
  - numbers = [1, 3, 5, 7, 9]
  - numbers.each do |number| 
    %li= number

出力結果

<ul>
  <li>1</li>
  <li>3</li>
  <li>5</li>
  <li>7</li>
  <li>9</li>
</ul>

まとめ

基本的な使用方法を紹介しましたが、いかがだったでしょうか?
実際使用しての良かったと感じる部分は、

・少ないコードでシンプルに記述できる
・インデントに厳しいのでhaml・出力されるhtmlに作業者の癖が出にくい
・タグの閉じ忘れが無い
・学習コストも高くない

などが挙げられます。
学習コストに関しては、「Emmet(zen-cording)」を使用したことがある方であれば自然に書けるかと思います。

もし、ちょっと書いてみたいという方は、こちらで試してみてはいかがでしょうか?
Haml to HTML to Coffeecup to Javascript to CoffeeScript Converter!

以上、ありがとうございました。