RailsでERBに慣れ親しんでいるエンジニアがSlimを使い始めると、「なんじゃこの書き方は!」となることがよくあります。Slimは確かに簡潔で美しいテンプレートエンジンですが、独特の記法に慣れるまでは戸惑うもの。
この記事では、**これだけは絶対覚えておけ!**というSlimの重要ポイントを、ERBとの比較で分かりやすく解説します。
1. インデントが全て!タブ vs スペース問題
ERBの場合
<div class="container">
<h1>タイトル</h1>
<p>内容</p>
</div>
Slimの場合
.container
h1 タイトル
p 内容
⚠️ 超重要ポイント
- Slimはインデントでネストを表現
- スペース2個が標準(タブNG)
- インデントがズレると構造が崩れる
// ❌ ダメな例(インデントがバラバラ)
.container
h1 タイトル
p 内容
// ✅ 正しい例
.container
h1 タイトル
p 内容
2. 属性の書き方がトリッキー
class属性の書き方
<!-- ERB -->
<div class="card shadow-lg">
// Slim - 複数の書き方がある
.card.shadow-lg
// または
div class="card shadow-lg"
// または
div class=["card", "shadow-lg"]
その他の属性
<!-- ERB -->
<input type="text" name="email" value="<%= @user.email %>" required>
// Slim
input type="text" name="email" value=@user.email required=true
// または括弧を使って
input(type="text" name="email" value=@user.email required)
🔥 ハマりがちポイント
// ❌ これは動かない
input type="text" value="<%= @user.email %>"
// ✅ 正しい書き方
input type="text" value=@user.email
3. 条件分岐とループの書き方
条件分岐
<!-- ERB -->
<% if user_signed_in? %>
<p>ログイン済み</p>
<% else %>
<p>未ログイン</p>
<% end %>
// Slim
- if user_signed_in?
p ログイン済み
- else
p 未ログイン
ループ処理
<!-- ERB -->
<% @posts.each do |post| %>
<div class="post">
<h2><%= post.title %></h2>
</div>
<% end %>
// Slim
- @posts.each do |post|
.post
h2 = post.title
重要な記号の使い分け
-
-: Ruby コードの実行(出力なし) -
=: Ruby コードの実行結果を出力 -
|: プレーンテキストの出力
4. テキスト出力の罠
基本的な出力
<!-- ERB -->
<h1><%= @post.title %></h1>
<p><%= @post.content %></p>
// Slim
h1 = @post.title
p = @post.content
HTMLエスケープしない場合
<!-- ERB -->
<div><%= raw @post.html_content %></div>
// Slim
div == @post.html_content
複数行テキストの扱い
// 複数行のプレーンテキスト
p
| これは長いテキストです。
複数行にわたって書くことができます。
パイプ記号を使います。
// または
p
' これは長いテキストです。
シングルクォートを使う方法もあります。
5. コメントアウトの種類
// HTMLに出力されるコメント
<!-- このコメントはHTMLに表示される -->
/ HTMLに出力されないコメント(開発者用)
/! 条件付きコメント(IE対応など)
6. よく使うヘルパーとの組み合わせ
link_to
<!-- ERB -->
<%= link_to "編集", edit_post_path(@post), class: "btn btn-primary" %>
// Slim
= link_to "編集", edit_post_path(@post), class: "btn btn-primary"
// またはブロック形式
= link_to edit_post_path(@post), class: "btn btn-primary"
| 編集
form_with
<!-- ERB -->
<%= form_with model: @post do |f| %>
<%= f.text_field :title %>
<%= f.submit %>
<% end %>
// Slim
= form_with model: @post do |f|
= f.text_field :title
= f.submit
7. デバッグ・開発で便利な技
変数の中身を確認
// 開発中にデバッグ
- puts @user.inspect // ログに出力
= debug @user // 画面に表示(開発環境のみ)
条件によってクラスを動的に変更
.card class=(@post.published? ? "published" : "draft")
// または
.card class=["card", (@post.featured? ? "featured" : nil)]
まとめ:Slimの「これだけは覚えろ」リスト
- インデントはスペース2個厳守
-と=の使い分けをマスター- 属性の書き方は
.classとattr="value"を覚える - HTMLエスケープは
=、非エスケープは== - 複数行テキストは
|を使う
おまけ:VSCodeでSlim開発を快適にする
// settings.json
{
"files.associations": {
"*.slim": "slim"
},
"[slim]": {
"editor.tabSize": 2,
"editor.insertSpaces": true
}
}
拡張機能「Slim Language Support」も必須です!
Slimは慣れると本当に書きやすくて、ERBには戻れなくなります。最初は癖が強く感じるかもしれませんが、この記事のポイントを押さえれば大丈夫!ぜひ挑戦してみてください 🚀