HamlとSlimの選び方:導入手順・記法比較・変換ツールまとめ
生徒
「Railsのテンプレートって、ERB以外にもあるんですか?」
先生
「はい、Haml(ハムル)やSlim(スリム)といった、よりシンプルに書けるテンプレートエンジンもありますよ。」
生徒
「どれを使えばいいのか迷いますね…。違いや選び方ってあるんですか?」
先生
「それでは、HamlとSlimの違いや特徴、導入のやり方などを丁寧に見ていきましょう。」
1. Haml・Slimとは?ERBとの違い
Railsでは画面を表示するために「テンプレートエンジン」と呼ばれる仕組みを使います。もっとも基本的なテンプレートはERBですが、それ以外にもHaml(ハムル)やSlim(スリム)という選択肢があります。
これらのテンプレートエンジンは、HTMLをよりスッキリ、見やすく書くための書き方(記法)を提供してくれます。
たとえば、ERBではHTMLタグとRubyコードを混ぜて書く必要がありますが、HamlやSlimではインデントと記号で構造を表現するため、視覚的にも整理されていて見やすいのが特徴です。
2. Hamlの特徴と記法
Haml(HTML Abstraction Markup Language)は、HTMLをRuby風に簡潔に書くためのテンプレートです。特徴としては:
- タグを省略できる(
<div>を書かずに済む) - インデントで階層を表現
- 視認性が高く、コードが読みやすい
例えば、次のように書きます:
%ul
- @items.each do |item|
%li= item.name
このように、HTMLタグを省略して記号(%)で書くことで、スッキリとしたテンプレートが作れます。
3. Slimの特徴と記法
Slimは、さらに高速で軽量なテンプレートエンジンとして人気です。Hamlよりもさらに記法が簡略化されていて、無駄を徹底的に省いたデザインです。
特徴としては:
- 不要な記号を排除し、非常にシンプル
- 高速に動作し、大規模開発でも使いやすい
- Hamlに似ているが、より記述量が少ない
書き方の例を見てみましょう:
ul
- @items.each do |item|
li = item.name
Hamlに似ていますが、%記号がなくなっており、さらにスリムになっています。
4. Haml・Slimの導入方法(Railsへのインストール)
どちらもGem(Rubyのライブラリ)として簡単に導入できます。
4-1. Hamlの導入
Gemfileに以下を追加します:
gem 'haml-rails'
その後、bundle installを実行すれば完了です。
4-2. Slimの導入
同じように、Gemfileに以下を追加します:
gem 'slim-rails'
これもbundle installでインストール完了です。
5. HamlとSlimの比較まとめ
ここで、HamlとSlimを簡単に比較してみましょう:
| 項目 | Haml | Slim |
|---|---|---|
| 記法の簡潔さ | やや簡潔 | 非常に簡潔 |
| 読みやすさ | 高い | 非常に高い |
| 処理速度 | 普通 | 高速 |
| 学習コスト | 低め | やや高め |
どちらも便利ですが、初心者にはまずHamlから始めると取り組みやすいです。
6. ERBファイルをHaml・Slimに変換する方法
すでにERBで作ったテンプレートを、あとからHamlやSlimに変換したいときには「変換ツール」を使うと便利です。
6-1. html2haml
html2hamlコマンドを使えば、ERBをHamlに自動変換できます。
gem install html2haml
html2haml app/views/sample.html.erb app/views/sample.html.haml
6-2. erb2slim
Slimに変換したいときはerb2slimを使います。
gem install html2slim
erb2slim app/views/sample.html.erb app/views/sample.html.slim
これらのツールを使えば、手作業で書き直す必要がなくなり、変換作業がとても楽になります。
7. どちらを選ぶべき?初心者向けの選び方ガイド
最終的にはプロジェクトの方針やチームの好みによりますが、次のような判断基準があります:
- とにかく簡単で見やすいテンプレートが使いたい→Haml
- 処理速度や開発効率を重視したい→Slim
- ERBのような書き方が好き→そのままERBでもOK
どちらもERBより書きやすく、学ぶ価値は十分あります。初心者でも、導入と基本の記法を覚えるだけで、見た目がすっきりしてテンションが上がるはずです。
まとめ
今回の内容を振り返ってみると、Ruby on Railsの開発現場で「ERB」以外の選択肢を持つことが、いかにコードの可読性やメンテナンス性に直結するかがお分かりいただけたかと思います。HamlとSlimは、単なる記法(シンタックス)の違いだけでなく、開発チームの生産性や、読みやすいフロントエンドの実装をサポートしてくれる強力な武器になります。
HamlとSlim、そしてERBの共存について
Railsプロジェクトでは、全てのファイルを一度にHamlやSlimに統一する必要はありません。Gemを導入しておけば、既存の.erbファイルを維持したまま、新しく作成するビューだけを.hamlや.slimで作ることも可能です。まずは小さなパーツや、ネストが深くなりがちなフォームのページから導入してみるのがおすすめです。
実践的なコード例:ユーザー一覧を表示する場合
実際にデータベースから取得したユーザー情報を表示する際の、具体的なコードの書き方を比較してみましょう。今回は、管理画面などでよく使われるユーザーリストのテーブル表示を想定しています。
表示するデータベースの状態(usersテーブル)
id | name | role | email
---+----------------+---------+---------------------
1 | 田中 健一 | admin | tanaka@example.com
2 | 佐藤 美沙 | user | sato@example.com
3 | 鈴木 亮介 | user | suzuki@example.com
4 | 高橋 くるみ | editor | takahashi@example.com
5 | 伊藤 淳二 | user | ito@example.com
Hamlでの実装例
Hamlでは、クラス名を.class_nameのようにCSSセレクタと同じ感覚で書けるのが魅力です。
%section.container
%h1 ユーザー一覧
%table.table-striped
%thead
%tr
%th ID
%th 名前
%th 役割
%tbody
- @users.each do |user|
%tr
%td= user.id
%td= user.name
%td
%span{class: "badge-#{user.role}"}= user.role
Slimでの実装例
Slimはさらに記述が削ぎ落とされています。閉じタグがないだけでなく、%記号すら不要なため、まるでテキストファイルを書いているかのような軽快さがあります。
section.container
h1 ユーザー一覧
table.table-striped
thead
tr
th ID
th 名前
th 役割
tbody
- @users.each do |user|
tr
td = user.id
td = user.name
td
span class="badge-#{user.role}" = user.role
SQLでのデータ抽出例
ちなみに、上記の一覧を表示するために裏側で発行されるSQLは、ActiveRecordを通じて以下のようになります。
SELECT users.*
FROM users
ORDER BY users.id ASC;
実行結果(HTML出力イメージ)
<section class="container">
<h1>ユーザー一覧</h1>
<table class="table-striped">
<thead>
<tr><th>ID</th><th>名前</th><th>役割</th></tr>
</thead>
<tbody>
<tr><td>1</td><td>田中 健一</td><td><span class="badge-admin">admin</span></td></tr>
<tr><td>2</td><td>佐藤 美沙</td><td><span class="badge-user">user</span></td></tr>
...
</tbody>
</table>
</section>
どちらを選ぶのが正解か?
結論として、「直感的な構造の分かりやすさを求めるならHaml」、「記述量を極限まで減らしてスピード感を重視するならSlim」という選び方が一般的です。 近年のモダンなRails開発では、コードの短さと実行速度の面からSlimが採用されるケースも増えていますが、Hamlの「インデントさえ合っていれば壊れない」という安心感も捨てがたいものがあります。
もしあなたが初めてERB以外に触れるのであれば、まずはHamlで「HTMLタグを書かない快適さ」を体験してみてください。一度慣れてしまうと、<% %>を何度もタイピングしていた頃には戻れなくなるはずですよ。
生徒
「先生、まとめまで読んでみて、HamlとSlimの凄さがよく分かりました!今まで当たり前のように<div></div>って書いていたのが、ちょっと手間に感じてきました(笑)」
先生
「そうでしょう。特に閉じタグの書き忘れによる表示崩れがなくなるのは、開発中のストレスを大きく減らしてくれますよ。インデントだけで構造が決まるので、自然と綺麗なコードを書く習慣もつきますしね。」
生徒
「コードが短くなる分、後から見返したときに全体の構造がパッと目に入ってくるのもいいですね。でも、SQLの結果を表示するときにRubyのコードを混ぜる部分は、ERBと同じ考え方で大丈夫なんですよね?」
先生
「その通りです。- でRubyを実行して、= で結果を出力するという基本ルールさえ覚えれば、あとはERBでの知識がそのまま使えます。導入もGemを一行足すだけですから、今進めている個人アプリで試してみたらどうですか?」
生徒
「いいですね!まずはhtml2hamlを使って、既存のページを変換することから始めてみます。自分で一から書くより、変換されたコードを見るほうが勉強になりそうですし!」
先生
「素晴らしいアイディアですね。変換ツールを使えば、自分のERBコードがどう省略されるか一目瞭然です。Slimに挑戦したくなったときも、同様のツールがあるから安心してください。効率的に、楽しくコードを書いていきましょう!」