カテゴリ: Rails 更新日: 2026/02/05

HamlとSlimの選び方:導入手順・記法比較・変換ツールまとめ

HamlとSlimの選び方:導入手順・記法比較・変換ツールまとめ
HamlとSlimの選び方:導入手順・記法比較・変換ツールまとめ

先生と生徒の会話形式で理解しよう

生徒

「Railsのテンプレートって、ERB以外にもあるんですか?」

先生

「はい、Haml(ハムル)やSlim(スリム)といった、よりシンプルに書けるテンプレートエンジンもありますよ。」

生徒

「どれを使えばいいのか迷いますね…。違いや選び方ってあるんですか?」

先生

「それでは、HamlとSlimの違いや特徴、導入のやり方などを丁寧に見ていきましょう。」

1. Haml・Slimとは?ERBとの違い

1. Haml・Slimとは?ERBとの違い
1. Haml・Slimとは?ERBとの違い

Railsでは画面を表示するために「テンプレートエンジン」と呼ばれる仕組みを使います。もっとも基本的なテンプレートはERBですが、それ以外にもHaml(ハムル)Slim(スリム)という選択肢があります。

これらのテンプレートエンジンは、HTMLをよりスッキリ、見やすく書くための書き方(記法)を提供してくれます。

たとえば、ERBではHTMLタグとRubyコードを混ぜて書く必要がありますが、HamlやSlimではインデントと記号で構造を表現するため、視覚的にも整理されていて見やすいのが特徴です。

2. Hamlの特徴と記法

2. Hamlの特徴と記法
2. Hamlの特徴と記法

Haml(HTML Abstraction Markup Language)は、HTMLをRuby風に簡潔に書くためのテンプレートです。特徴としては:

  • タグを省略できる<div>を書かずに済む)
  • インデントで階層を表現
  • 視認性が高く、コードが読みやすい

例えば、次のように書きます:


%ul
  - @items.each do |item|
    %li= item.name

このように、HTMLタグを省略して記号(%)で書くことで、スッキリとしたテンプレートが作れます。

3. Slimの特徴と記法

3. Slimの特徴と記法
3. Slimの特徴と記法

Slimは、さらに高速で軽量なテンプレートエンジンとして人気です。Hamlよりもさらに記法が簡略化されていて、無駄を徹底的に省いたデザインです。

特徴としては:

  • 不要な記号を排除し、非常にシンプル
  • 高速に動作し、大規模開発でも使いやすい
  • Hamlに似ているが、より記述量が少ない

書き方の例を見てみましょう:


ul
  - @items.each do |item|
    li = item.name

Hamlに似ていますが、%記号がなくなっており、さらにスリムになっています。

4. Haml・Slimの導入方法(Railsへのインストール)

4. Haml・Slimの導入方法(Railsへのインストール)
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の比較まとめ

5. HamlとSlimの比較まとめ
5. HamlとSlimの比較まとめ

ここで、HamlとSlimを簡単に比較してみましょう:

項目 Haml Slim
記法の簡潔さ やや簡潔 非常に簡潔
読みやすさ 高い 非常に高い
処理速度 普通 高速
学習コスト 低め やや高め

どちらも便利ですが、初心者にはまずHamlから始めると取り組みやすいです。

6. ERBファイルをHaml・Slimに変換する方法

6. ERBファイルをHaml・Slimに変換する方法
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. どちらを選ぶべき?初心者向けの選び方ガイド

7. どちらを選ぶべき?初心者向けの選び方ガイド
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に挑戦したくなったときも、同様のツールがあるから安心してください。効率的に、楽しくコードを書いていきましょう!」

関連記事:
カテゴリの一覧へ
新着記事
New1
Ruby
“すべてはオブジェクト”を体感!初心者向けRubyのオブジェクト指向入門【irbで学ぶ】
New2
Ruby
Rubyの標準入出力を完全ガイド!puts・print・pの違いとデバッグ活用法
New3
Ruby
Gemとは?RubyGemsとBundlerを初心者向けに完全解説!依存関係管理も図解でわかりやすく理解
New4
Ruby
Rubyの文字エンコーディング入門!UTF-8・マジックコメント・外部/内部エンコーディングを完全解説
人気記事
No.1
Java&Spring記事人気No1
Ruby
Rubyのreduceとinject入門!合計計算や集計を初心者向けに分かりやすく解説
No.2
Java&Spring記事人気No2
Ruby
Rubyの文字列エンコーディング完全ガイド!Encoding・force_encoding・encodeを初心者向け解説
No.3
Java&Spring記事人気No3
Ruby
Rubyの始め方ガイド:インストールから最初のHello Worldまで(Windows/Mac/Linux)
No.4
Java&Spring記事人気No4
データベース
PostgreSQLのWHERE句を徹底解説!初心者でもわかるSQLデータ抽出の基本
No.5
Java&Spring記事人気No5
Ruby
Rubyのfind/detect/find_indexを徹底解説!目的のデータを素早く探す方法
No.6
Java&Spring記事人気No6
Ruby
Rubyで比較演算子を完全解説!==・===・<=>・eql? の使い分け
No.7
Java&Spring記事人気No7
Ruby
Rubyのselect/reject/filterの使い方を完全解説!初心者向けの条件抽出レシピ
No.8
Java&Spring記事人気No8
データベース
PostgreSQLで順位付け!ROW_NUMBER関数の使い方を初心者向けに徹底解説