たたみラボ

  • about
  • member
  • r&d
  • blog
  • tatamicast

blog

RSS

ETech07 - Ruby on Railsのテンプレート言語 HAML

icon March 28, 2007 4:06 PM by funami このエントリーを含むはてなブックマーク

フナミタカオです。
Etech2日目のセッション「Haml: A Semantic Rebellion in Template Land」から。

Ruby on Railsでは、MVCを分離していて、テンプレート言語として、ERbを使ったRHTMLを採用していますが、場合によってはテンプレートのためのタグとして多用される記号("<%= %>"←こういうのです)がたくさん出てくると、ちょっと、すっきりしないときがあります。
RHTMLの欠点を解消すべく、提案されているのがHAML。

すっきり度合いは比べると一目瞭然

Ruby on Rilasを使い出すと、お世話になるのが、Viewを描画するための、テンプレート

コントローラで変数に値を入れておいて、その変数をテンプレート内に配置してゆきます。
詳しくはここでは述べませんが、RHTMLを使った場合の記述をHamlを使った場合の記述を比べてみてください。

RHTMLだと
rhtml.jpg

Hamlだと
haml.jpg

上記の画像オリジナル:http://haml.hamptoncatlin.com/

RHTMLのほうは、HTMLのタグも入り乱れることになっているのですが、Hamlはいたってシンプルです。
XMLとYAMLの関係に相当しそうですね。


<>がなく、閉じタグもいらない


YAMLの考えがかなり入っているようで、閉じ括弧いらずで、ネストをインデントであらわしています。

RHTML: <small><%= item.body %></small>

Haml:
%small= item.body

RHTML: <div class="right column"> <%= render :partial => "sidebar" %> </div>

Haml:
.right.column= render :partial => "sidebar"

HamlをRoRから使うときはプラグインとして、インストールできるとのこと。

またhttp://lab.hamptoncatlin.com/←こちらで、練習もできるので、Hamlがどう変換されるのかをためすことができます。

使うかどうか?

HamlはRHTMLを置き換えていますが、同じ思想でCSSを置き換える、Sassもリリースされています。CSSの{}を使わずに、やはりインデントであらわします。

このHamlとSassすっきりしていて、魅力的ではあるのですが、問題は、あたらしい言語がまた増えてしまうということだと思います。
ネストがないのはたしかに便利だけど
リンクが↓こうなっちゃうのは、ちょっと、どうかなあとひいてしまいます。
%a{:href => "http://haml.hamptoncatlin.com/reference"}

すでに試されている、uchiuchiyamaさんも言及されていますが


元のrhtmlファイルに比べてHamlで書いたViewは,エンジニアにとってみると短く,シンプルで,見やすいものになっていると思います.しかし,このViewをデザイナさんに渡してデザインしてもらうというのは難しいのかもしれません
[Rails]Haml を実際に Rails で使うチュートリアル @のほほん徒然

これは、重要なポイントですね。

実際のところ、僕の経験でも、RoRの link_toでさえ、デザイナーさんにあつかってもらうのは、結構厳しくて、結局開発サイドでRoRのタグすなわちRhtmlに変換して作業をすることになってしまっています。

そうなると、できるだけ文法が減らせるという意味ではHTMLベースのほうがいいのかもしれません。

魔法は地味ということだなあ

「Hamlすごーい」といいたいところですが、結局最終的なユーザーにとっては、それが、HamlだろうがRhtmlだろうが関係ないということで、これも魔法のタネだとすれば、やっぱ、地味な話ではあります。

もちろん、開発者にしても、デザイナにしても、自分の作りたいものを、できるだけ、わかりやすく、シンプルに高速に作りたいわけで、そのための可能性としてHamlはしばらく、ウオッチしてみたいと思います。

リンク:#haml

【その他 ETech2007 関連レポートはこちら】

ページトップへ



(C) RECRUIT MEDIA COMMUNICATIONS CO., LTD.