1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Rails Slimの癖が強いので、これだけは覚えておく

Posted at

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の「これだけは覚えろ」リスト

  1. インデントはスペース2個厳守
  2. -= の使い分けをマスター
  3. 属性の書き方は .classattr="value" を覚える
  4. HTMLエスケープは = 、非エスケープは ==
  5. 複数行テキストは | を使う

おまけ:VSCodeでSlim開発を快適にする

// settings.json
{
  "files.associations": {
    "*.slim": "slim"
  },
  "[slim]": {
    "editor.tabSize": 2,
    "editor.insertSpaces": true
  }
}

拡張機能「Slim Language Support」も必須です!


Slimは慣れると本当に書きやすくて、ERBには戻れなくなります。最初は癖が強く感じるかもしれませんが、この記事のポイントを押さえれば大丈夫!ぜひ挑戦してみてください 🚀

1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?