コンテンツにスキップ

Slim

出典: フリー教科書『ウィキブックス(Wikibooks)』

Slim ハンドブック

[編集]

Slimは、Rubyベースのテンプレートエンジンの一つで、簡潔で読みやすい記法を特徴としています。HTMLの冗長な構文を排除し、コードの保守性を向上させることを目的としています。

基本構文

[編集]

Slimは、インデントベースの文法を採用しており、HTML要素や属性を簡潔に記述できます。以下は基本的な構文の例です:

doctype html
html lang="ja"
  head
    meta charset="UTF-8"
    title = @title
    link rel="stylesheet" href="/styles/main.css"
  body
    header.main-header
      nav
        ul
          li: a href="/" ホーム
          li: a href="/about" 概要
          li: a href="/contact" お問い合わせ
    main.content
      h1 ようこそ #{@username} さん!
      - if @messages.any?
        ul.message-list
          - @messages.each do |message|
            li = message
      - else
        p メッセージはありません

使用方法

[編集]

Slimテンプレートを使用するには、Slim::Templateクラスを使用します。

require 'slim'

# テンプレート文字列
template = <<~SLIM
doctype html
html
  head
    title = title
  body
    h1 = greeting
SLIM

# Slimテンプレートのレンダリング
title = "マイページ"
greeting = "こんにちは、世界!"
output = Slim::Template.new { template }.render(binding)
puts output

レイアウトと部分テンプレート

[編集]

Slimでは、レイアウトと部分テンプレートを活用してコードの再利用性を高めることができます。

レイアウトの例

[編集]
# layout.slim
doctype html
html
  head
    title = @title || 'デフォルトタイトル'
  body
    header
      h1 サイトヘッダー
    main
      == yield
    footer
      p © 2025 サイト名

部分テンプレートの例

[編集]
# _user.slim
div.user
  h2 = user[:name]
  p = user[:email]

使用例:

@users = [
  { name: "山田太郎", email: "taro@example.com" },
  { name: "鈴木花子", email: "hanako@example.com" }
]

@users.each do |user|
  puts Slim::Template.new("_user.slim").render(Object.new, user: user)
end

Slimの特徴

[編集]
  • 簡潔な記法: インデントベースの構文で、HTMLの冗長な記述を削減
  • Rubyとの親和性: Rubyコードを簡単に埋め込める
  • 高速なレンダリング: 他のテンプレートエンジンに比べてレンダリング速度が速い
  • 柔軟性: レイアウトや部分テンプレートでコードを再利用可能

セキュリティ

[編集]

Slimでは、Ruby on Railsと組み合わせる場合、デフォルトでHTMLのエスケープが有効になっています。これにより、XSS攻撃などのセキュリティリスクを軽減できます。

p = @user_input  # エスケープされる
p != @raw_input  # エスケープされない

メリットと制限

[編集]
メリット:
  • 記法がシンプルで可読性が高い
  • HTML記述が少なく済む
  • 他のテンプレートエンジンよりも高速
制限:
  • インデントに依存しているため、コードの整形ミスが発生する可能性がある
  • Slim独自の記法に慣れる必要がある

結論

[編集]

Slimは、シンプルかつ効率的なテンプレートエンジンとして、Ruby開発者にとって強力なツールです。特に、HTMLの記述を最小限に抑えたい場合や、高速なレンダリングを求める場合に最適です。