{"id":13448409,"url":"https://github.com/slim-template/slim","last_synced_at":"2025-05-13T11:08:02.222Z","repository":{"id":1067717,"uuid":"906150","full_name":"slim-template/slim","owner":"slim-template","description":"Slim is a template language whose goal is to reduce the syntax to the essential parts without becoming cryptic.","archived":false,"fork":false,"pushed_at":"2025-03-19T17:48:07.000Z","size":2459,"stargazers_count":5331,"open_issues_count":20,"forks_count":502,"subscribers_count":121,"default_branch":"main","last_synced_at":"2025-05-13T11:07:58.055Z","etag":null,"topics":["ruby","slim","template-engines"],"latest_commit_sha":null,"homepage":"https://slim-template.github.io","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/slim-template.png","metadata":{"files":{"readme":"README.jp.md","changelog":"CHANGES","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"slim-template"}},"created_at":"2010-09-13T01:32:07.000Z","updated_at":"2025-05-13T06:21:11.000Z","dependencies_parsed_at":"2023-07-05T20:17:03.547Z","dependency_job_id":"61127a10-f568-408c-884e-de0aee646f38","html_url":"https://github.com/slim-template/slim","commit_stats":{"total_commits":1809,"total_committers":119,"mean_commits":"15.201680672268907","dds":"0.38861249309010504","last_synced_commit":"fd8dc8367c91564245bb61d86669d8c477202a23"},"previous_names":[],"tags_count":89,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/slim-template%2Fslim","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/slim-template%2Fslim/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/slim-template%2Fslim/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/slim-template%2Fslim/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/slim-template","download_url":"https://codeload.github.com/slim-template/slim/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253929366,"owners_count":21985802,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ruby","slim","template-engines"],"created_at":"2024-07-31T05:01:44.723Z","updated_at":"2025-05-13T11:08:02.200Z","avatar_url":"https://github.com/slim-template.png","language":"Ruby","readme":"# Slim\n\n[![Gem Version](https://img.shields.io/gem/v/slim.svg)](http://rubygems.org/gems/slim)\n![Build Status](https://github.com/slim-template/slim/actions/workflows/test.yml/badge.svg)\n[![GitHub Sponsors](https://img.shields.io/github/sponsors/slim-template)](https://github.com/sponsors/slim-template)\n\nSlim は 不可解にならない程度に view の構文を本質的な部品まで減らすことを目指したテンプレート言語です。標準的な HTML テンプレートからどれだけのものを減らせるか、検証するところから始まりました。(\u003c, \u003e, 閉じタグなど) 多くの人が Slim に興味を持ったことで, 機能的で柔軟な構文に成長しました。\n\n簡単な特徴\n\n* すっきりした構文\n    * 閉じタグの無い短い構文 (代わりにインデントを用いる)\n    * 閉じタグを用いた HTML 形式の構文\n    * 設定可能なショートカットタグ (デフォルトでは `#` は `\u003cdiv id=\"...\"\u003e` に, `.` は `\u003cdiv class=\"...\"\u003e` に)\n* 安全性\n    * デフォルトで自動 HTML エスケープ\n    * Rails の `html_safe?` に対応\n* 柔軟な設定\n* プラグインを用いた拡張性:\n    * Mustache と同様のロジックレスモード\n    * インクルード\n    * 多言語化/I18n\n* 高性能\n    * ERB/Erubis に匹敵するスピード\n    * Rails のストリーミングに対応\n* 全てのメジャーフレームワークが対応 (Rails, Sinatra, ...)\n* タグや属性の Unicode に完全対応\n* Markdown や Textile のような埋め込みエンジン\n\n## リンク\n\n* ホームページ: \u003chttps://slim-template.github.io\u003e\n* ソース: \u003chttps://github.com/slim-template/slim\u003e\n* バグ:   \u003chttps://github.com/slim-template/slim/issues\u003e\n* API ドキュメント:\n    * 最新の Gem: \u003chttps://rubydoc.info/gems/slim/frames\u003e\n    * GitHub main: \u003chttps://rubydoc.info/github/slim-template/slim/main/frames\u003e\n\n## イントロダクション\n\n### Slim とは?\n\nSlim は __Rails5 以降__ に対応した高速, 軽量なテンプレートエンジンです。主要な Ruby の実装全てでしっかりテストされています。\n私たちは継続的インテグレーションを採用しています。(github actions)\n\nSlim の核となる構文は1つの考えによって導かれています: \"この動作を行うために最低限必要なものは何か。\"\n\n多くの人々の Slim への貢献によって, 彼らが使う [Haml](https://github.com/haml/haml) や [Jade](https://github.com/visionmedia/jade) の影響を受け構文の追加が行われています。 Slim の開発チームは美は見る人の目の中にあることを分っているので、こういった追加にオープンです。\n\nSlim は 構文解析/コンパイルに [Temple](https://github.com/judofyr/temple) を使い [Tilt](https://github.com/jeremyevans/tilt) に組み込まれます。これにより [Sinatra](https://github.com/sinatra/sinatra) やプレーンな [Rack](https://github.com/rack/rack) とも一緒に使えます。\n\nTemple のアーキテクチャはとても柔軟で, モンキーパッチなしで構文解析とコンパイルのプロセスの拡張が可能です。これはロジックレスのプラグインや I18n が提供する翻訳プラグインに\n使用されます。ロジックレスモードでは HTML をビルドするために Slim の構文を使いたいが, テンプレートの中で Ruby を書きたくない場合にも Slim を使うことができます。\n\n### なぜ Slim を使うのか?\n\n* Slim によって メンテナンスが容易な限りなく最小限のテンプレートを作成でき, 正しい文法の HTML や XML が書けることを保証します。\n* Slim の構文は美しく, テンプレートを書くのがより楽しくなります。Slim は主要なフレームワークで互換性があるので, 簡単に始めることができます。\n* Slim のアーキテクチャは非常に柔軟なので, 構文の拡張やプラグインを書くことができます。\n\n___そう, Slim は速い!___ Slim は開発当初からパフォーマンスに注意して開発されてきました。\nこの数字が信じられませんか? それは仕方ないことです。是非 rake タスクを使って自分でベンチマークを取ってみてください!\n\n私たちの考えでは, あなたは Slim の機能と構文を使うべきです。Slim はあなたのアプリケーションのパフォーマンスに悪影響を与えないことを保証します。\n\n### どうやって使い始めるの?\n\nSlim を gem としてインストール:\n\n~~~\ngem install slim\n~~~\n\nあなたの Gemfile に `gem 'slim'` と書いてインクルードするか, ファイルに `require 'slim'` と書く必要があります。これだけです! 後は拡張子に .slim を使うだけで準備完了です。\n\n### 構文例\n\nSlim テンプレートがどのようなものか簡単な例を示します:\n\n~~~ slim\ndoctype html\nhtml\n  head\n    title Slim のファイル例\n    meta name=\"keywords\" content=\"template language\"\n    meta name=\"author\" content=author\n    link rel=\"icon\" type=\"image/png\" href=file_path(\"favicon.png\")\n    javascript:\n      alert('Slim は javascript の埋め込みに対応しています!')\n\n  body\n    h1 マークアップ例\n\n    #content\n      p このマークアップ例は Slim の典型的なファイルがどのようなものか示します。\n\n    == yield\n\n    - if items.any?\n      table#items\n        - for item in items\n          tr\n            td.name = item.name\n            td.price = item.price\n    - else\n      p アイテムが見つかりませんでした。いくつか目録を追加してください。\n        ありがとう!\n\n    div id=\"footer\"\n      == render 'footer'\n      | Copyright \u0026copy; #{@year} #{@author}\n~~~\n\nインデントについて, インデントの深さはあなたの好みで選択できます。もしあなたが最初のインデントをスペース2つ, その次に5スペースを使いたい場合, それも自由です。マークアップを入れ子にするには最低1つのスペースによるインデントが必要なだけです。\n\n## ラインインジケータ\n\n### テキスト `|`\n\nパイプを使うと, Slim はパイプよりも深くインデントされた全ての行をコピーします。行中の処理は基本的にどのようなものでもエスケープされます。\n\n~~~ slim\nbody\n  p\n    |\n      これはテキストブロックのテストです。\n~~~\n\n  構文解析結果は以下:\n\n~~~ html\n\u003cbody\u003e\u003cp\u003eこれはテキストブロックのテストです。\u003c/p\u003e\u003c/body\u003e\n~~~\n\n  ブロックの左端はパイプ +1 スペースのインデントに設定されています。\n  追加のスペースはコピーされます。\n\n~~~ slim\nbody\n  p\n    | この行は左端になります。\n       この行はスペース 1 つを持つことになります。\n         この行はスペース 2 つを持つことになります。\n           以下同様に...\n~~~\n\nテキスト行に HTML を埋め込むこともできます。\n\n~~~ slim\n- articles.each do |a|\n  | \u003ctr\u003e\u003ctd\u003e#{a.name}\u003c/td\u003e\u003ctd\u003e#{a.description}\u003c/td\u003e\u003c/tr\u003e\n~~~\n\n### 末尾スペース付きのテキスト `'`\n\nシングルクォートは `|` と同様に行をコピーしますが, 末尾にスペースが1つ追加されます。\n\n### インライン html `\u003c` (HTML 形式)\n\nHTML タグを直接 Slim の中に書くことができます。Slim では, 閉じタグを使った HTML タグ形式や HTML と Slim を混ぜてテンプレートの中に書くことができます。\n行頭が '\u003c' の場合, 暗黙的に `|` があるものとして動作します:\n\n~~~ slim\n\u003chtml\u003e\n  head\n    title Example\n  \u003cbody\u003e\n    - if articles.empty?\n    - else\n      table\n        - articles.each do |a|\n          \u003ctr\u003e\u003ctd\u003e#{a.name}\u003c/td\u003e\u003ctd\u003e#{a.description}\u003c/td\u003e\u003c/tr\u003e\n  \u003c/body\u003e\n\u003c/html\u003e\n~~~\n\n### 制御コード `-`\n\nダッシュは制御コードを意味します。制御コードの例としてループと条件文があります。`end` は `-` の後ろに置くことができません。ブロックはインデントによってのみ定義されます。\n複数行にわたる Ruby のコードが必要な場合, 行末にバックスラッシュ `\\` を追加します。行末がカンマ `,` で終わる場合 (例 関数呼び出し) には, 行末にバックスラッシュを追加する必要はありません。\n\n~~~ slim\nbody\n  - if articles.empty?\n    | 在庫なし\n~~~\n\n### 出力 `=`\n\nイコールはバッファに追加する出力を生成する Ruby コードの呼び出しを Slim に命令します。Ruby のコードが複数行にわたる場合, 例のように行末にバックスラッシュを追加します。\n\n~~~ slim\n= javascript_include_tag \\\n   \"jquery\",\n   \"application\"\n~~~\n\n行末がカンマ `,` で終わる場合 (例 関数呼び出し) には行末にバックスラッシュを追加する必要はありません。行末・行頭にスペースを追加するために修飾子の `\u003e` や `\u003c` がサポートされています。\n\n* `=\u003e` は末尾のスペースを伴った出力をします。 末尾のスペースが追加されることを除いて, 単一の等合 (`=`) と同じです。\n* `=\u003c` は先頭のスペースを伴った出力をします。先頭のスペースが追加されることを除いて, 単一の等号 (`=`) と同じです。\n\n### HTML エスケープを伴わない出力 `==`\n\n単一のイコール (`=`) と同じですが, `escape_html` メソッドを経由しません。 末尾や先頭のスペースを追加するための修飾子 `\u003e` と `\u003c` はサポートされています。\n\n* `==\u003e` は HTML エスケープを行わずに, 末尾のスペースを伴った出力をします。末尾のスペースが追加されることを除いて, 二重等号 (`==`) と同じです。\n* `==\u003c` は HTML エスケープを行わずに, 先頭のスペースを伴った出力をします。先頭のスペースが追加されることを除いて, 二重等号 (`==`) と同じです。\n\n### コードコメント `/`\n\nコードコメントにはスラッシュを使います。スラッシュ以降は最終的なレンダリング結果に表示されません。コードコメントには `/` を, html コメントには `/!` を使います。\n\n~~~ slim\nbody\n  p\n    / この行は表示されません。\n      この行も表示されません。\n    /! html コメントとして表示されます。\n~~~\n\n  構文解析結果は以下:\n\n~~~ html\n\u003cbody\u003e\u003cp\u003e\u003c!--html コメントとして表示されます。--\u003e\u003c/p\u003e\u003c/body\u003e\n~~~\n\n### HTML コメント `/!`\n\nhtml コメントにはスラッシュの直後にエクスクラメーションマークを使います (`\u003c!-- ... --\u003e`)。\n\n### IE コンディショナルコメント `/[...]`\n\n~~~ slim\n/[if IE]\n    p もっといいブラウザを使ってください。\n~~~\n\nレンダリング結果:\n\n~~~ html\n\u003c!--[if IE]\u003e\u003cp\u003eもっといいブラウザを使ってください。\u003c/p\u003e\u003c![endif]--\u003e\n~~~\n\n## HTML タグ\n\n### \u003c!DOCTYPE\u003e 宣言\n\ndoctype キーワードでは, とても簡単な方法で複雑な DOCTYPE を生成できます。\n\nXML バージョン\n\n~~~ slim\ndoctype xml\n  \u003c?xml version=\"1.0\" encoding=\"utf-8\" ?\u003e\n\ndoctype xml ISO-8859-1\n  \u003c?xml version=\"1.0\" encoding=\"iso-8859-1\" ?\u003e\n~~~\n\nXHTML DOCTYPES\n\n~~~ slim\ndoctype html\n  \u003c!DOCTYPE html\u003e\n\ndoctype 5\n  \u003c!DOCTYPE html\u003e\n\ndoctype 1.1\n  \u003c!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\"\n    \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\"\u003e\n\ndoctype strict\n  \u003c!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\n    \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\"\u003e\n\ndoctype frameset\n  \u003c!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Frameset//EN\"\n    \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd\"\u003e\n\ndoctype mobile\n  \u003c!DOCTYPE html PUBLIC \"-//WAPFORUM//DTD XHTML Mobile 1.2//EN\"\n    \"http://www.openmobilealliance.org/tech/DTD/xhtml-mobile12.dtd\"\u003e\n\ndoctype basic\n  \u003c!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML Basic 1.1//EN\"\n    \"http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd\"\u003e\n\ndoctype transitional\n  \u003c!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n    \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\"\u003e\n~~~\n\nHTML 4 DOCTYPES\n\n~~~ slim\ndoctype strict\n  \u003c!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\"\n    \"http://www.w3.org/TR/html4/strict.dtd\"\u003e\n\ndoctype frameset\n  \u003c!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Frameset//EN\"\n    \"http://www.w3.org/TR/html4/frameset.dtd\"\u003e\n\ndoctype transitional\n  \u003c!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n    \"http://www.w3.org/TR/html4/loose.dtd\"\u003e\n~~~\n\n### 閉じタグ (末尾の `/`)\n\n末尾に `/` を付けることで明示的にタグを閉じることができます。\n\n~~~ slim\nimg src=\"image.png\"/\n~~~\n\n(注) 標準的な html タグ (img, br, ...) は自動的にタグを閉じるので,\n通常必要ありません。\n\n### 行頭・行末にスペースを追加する (`\u003c`, `\u003e`)\n\na タグの後に \u003e を追加することで末尾にスペースを追加するよう Slim に強制することができます。\n\n~~~ slim\na\u003e href='url1' リンク1\na\u003e href='url2' リンク2\n~~~\n\n\u003c を追加することで先頭にスペースを追加できます。\n\n~~~ slim\na\u003c href='url1' リンク1\na\u003c href='url2' リンク2\n~~~\n\nこれらを組み合わせて使うこともできます。\n\n~~~ slim\na\u003c\u003e href='url1' リンク1\n~~~\n\n### インラインタグ\n\nタグをよりコンパクトにインラインにしたくなることがあるかもしれません。\n\n~~~ slim\nul\n  li.first: a href=\"/a\" A リンク\n  li: a href=\"/b\" B リンク\n~~~\n\n可読性のために, 属性を囲むことができるのを忘れないでください。\n\n~~~ slim\nul\n  li.first: a[href=\"/a\"] A リンク\n  li: a[href=\"/b\"] B リンク\n~~~\n\n### テキストコンテンツ\n\nタグと同じ行で開始するか\n\n~~~ slim\nbody\n  h1 id=\"headline\" 私のサイトへようこそ。\n~~~\n\n入れ子にするかのどちらかです。エスケープ処理を行うためにはパイプかシングルクォートを使わなければなりません。\n\n\n~~~ slim\nbody\n  h1 id=\"headline\"\n    | 私のサイトへようこそ。\n~~~\n\nスマートテキストモードを有効化して利用する場合\n\n~~~ slim\nbody\n  h1 id=\"headline\"\n    私のサイトへようこそ。\n~~~\n\n### 動的コンテンツ (`=` と `==`)\n\n同じ行で呼び出すか\n\n~~~ slim\nbody\n  h1 id=\"headline\" = page_headline\n~~~\n\n入れ子にすることができます。\n\n~~~ slim\nbody\n  h1 id=\"headline\"\n    = page_headline\n~~~\n\n### 属性\n\nタグの後に直接属性を書きます。通常の属性記述にはダブルクォート `\"` か シングルクォート `'` を使わなければなりません (引用符で囲まれた属性)。\n\n~~~ slim\na href=\"https://slim-template.github.io\" title='Slim のホームページ' Slim のホームページへ\n~~~\n\n引用符で囲まれたテキストを属性として使えます。\n\n#### 属性の囲み\n\n区切り文字が構文を読みやすくするのであれば,\n`{...}`, `(...)`, `[...]` で属性を囲むことができます。\nこれらの記号は設定で変更できます (`:attr_list_delims` オプション参照)。\n\n~~~ slim\nbody\n  h1(id=\"logo\") = page_logo\n  h2[id=\"tagline\" class=\"small tagline\"] = page_tagline\n~~~\n\n属性を囲んだ場合, 属性を複数行にわたって書くことができます:\n\n~~~ slim\nh2[id=\"tagline\"\n   class=\"small tagline\"] = page_tagline\n~~~\n\n属性の囲みや変数まわりにスペースを使うことができます:\n\n~~~ slim\nh1 id = \"logo\" = page_logo\nh2 [ id = \"tagline\" ] = page_tagline\n~~~\n\n#### 引用符で囲まれた属性\n\n例:\n\n~~~ slim\na href=\"https://slim-template.github.io\" title='Slim のホームページ' Slim のホームページへ\n~~~\n\n引用符で囲まれたテキストを属性として使えます:\n\n~~~ slim\na href=\"http://#{url}\" #{url} へ\n~~~\n\n属性値はデフォルトでエスケープされます。属性のエスケープを無効にしたい場合 == を使います。\n\n~~~ slim\na href==\"\u0026amp;\"\n~~~\n\n引用符で囲まれた属性をバックスラッシュ `\\` で改行できます。\n\n~~~ slim\na data-title=\"help\" data-content=\"極めて長い長い長いヘルプテキストで\\\n  続けてその後はまたやり直して繰り返し....\"\n~~~\n\n#### Ruby コードを用いた属性\n\n`=` の後に直接 Ruby コードを書きます。コードにスペースが含まれる場合,\n`(...)` の括弧でコードを囲まなければなりません。ハッシュを `{...}` に, 配列を `[...]` に書くこともできます。\n\n~~~ slim\nbody\n  table\n    - for user in users\n      td id=\"user_#{user.id}\" class=user.role\n        a href=user_action(user, :edit) Edit #{user.name}\n        a href=(path_to_user user) = user.name\n~~~\n\n属性値はデフォルトでエスケープされます。属性のエスケープを無効にしたい場合 == を使います。\n\n~~~ slim\na href==action_path(:start)\n~~~\n\nRuby コードの属性は, コントロールセクションにあるようにバックスラッシュ `\\` や `,` を用いて改行できます。\n\n#### 真偽値属性\n\n属性値の `true`, `false` や `nil` は真偽値として\n評価されます。属性を括弧で囲む場合, 属性値の指定を省略することができます。\n\n~~~ slim\ninput type=\"text\" disabled=\"disabled\"\ninput type=\"text\" disabled=true\ninput(type=\"text\" disabled)\n\ninput type=\"text\"\ninput type=\"text\" disabled=false\ninput type=\"text\" disabled=nil\n~~~\n\n#### 属性の結合\n\n複数の属性が与えられた場合に属性をまとめるように設定することができます (`:merge_attrs` 参照)。デフォルト設定では\n class 属性はスペース区切りで結合されます。\n\n~~~ slim\na.menu class=\"highlight\" href=\"https://slim-template.github.io/\" slim-template.github.io\n~~~\n\nレンダリング結果:\n\n~~~ html\n\u003ca class=\"menu highlight\" href=\"https://slim-template.github.io/\"\u003eslim-template.github.io\u003c/a\u003e\n~~~\n\nまた, `Array` を属性値として使うと、配列要素が区切り文字で結合されます。\n\n~~~ slim\na class=[\"menu\",\"highlight\"]\na class=:menu,:highlight\n~~~\n\n#### アスタリスク属性 `*`\n\nアスタリスクによってハッシュを属性/値のペアとして使うことができます。\n\n~~~ slim\n.card*{'data-url'=\u003eplace_path(place), 'data-id'=\u003eplace.id} = place.name\n~~~\n\nレンダリング結果:\n\n~~~ html\n\u003cdiv class=\"card\" data-id=\"1234\" data-url=\"/place/1234\"\u003eSlim の家\u003c/div\u003e\n~~~\n\n次のようにハッシュを返すメソッドやインスタンス変数を使うこともできます。\n\n~~~ slim\n.card *method_which_returns_hash = place.name\n.card *@hash_instance_variable = place.name\n~~~\n\n属性の結合 (Slim オプション `:merge_attrs` 参照) に対応するハッシュ属性には `Array` を与えることもできます。\n\n~~~ slim\n.first *{class: [:second, :third]} テキスト\n~~~\n\nレンダリング結果\n\n~~~ slim\ndiv class=\"first second third\"\n~~~\n\nアスタリスク(スプラット)属性のプレフィックスは `splat_prefix` オプションで設定できます。デフォルト値は `'*'` です。\n\n#### 動的タグ `*`\n\nアスタリスク属性を使用することで完全に動的なタグを作ることができます。:tag をキーにもつハッシュを返すメソッドを\n作るだけです。\n\n~~~ slim\nruby:\n  def self.a_unless_current\n    @page_current ? {tag: 'span'} : {tag: 'a', href: 'https://slim-template.github.io/'}\n  end\n- @page_current = true\n*a_unless_current リンク\n- @page_current = false\n*a_unless_current リンク\n~~~\n\nレンダリング結果:\n\n~~~ html\n\u003cspan\u003eリンク\u003c/span\u003e\u003ca href=\"https://slim-template.github.io/\"\u003eリンク\u003c/a\u003e\n~~~\n\n### ショートカット\n\n#### タグショートカット\n\n`:shortcut` オプションを設定することで独自のタグショートカットを定義できます。Rails アプリケーションでは, `config/initializers/slim.rb` のようなイニシャライザに定義します。Sinatra アプリでは, `require 'slim'` を書いた行以降であれば, どこにでも設定を定義することができます。\n\n~~~ ruby\nSlim::Engine.set_options shortcut: {'c' =\u003e {tag: 'container'}, '#' =\u003e {attr: 'id'}, '.' =\u003e {attr: 'class'} }\n~~~\n\nSlim コードの中でこの様に使用できます。\n\n~~~ slim\nc.content テキスト\n~~~\n\nレンダリング結果\n\n~~~ html\n\u003ccontainer class=\"content\"\u003eテキスト\u003c/container\u003e\n~~~\n\n#### 属性のショートカット\n\nカスタムショートカットを定義することができます (id の`#` , class の `.` のように)。\n\n例として, type 属性付きの input 要素のショートカット `\u0026` を追加します。\n\n~~~ ruby\nSlim::Engine.set_options shortcut: {'\u0026' =\u003e {tag: 'input', attr: 'type'}, '#' =\u003e {attr: 'id'}, '.' =\u003e {attr: 'class'}}\n~~~\n\nSlim コードの中でこの様に使用できます。\n\n~~~ slim\n\u0026text name=\"user\"\n\u0026password name=\"pw\"\n\u0026submit\n~~~\n\nレンダリング結果\n\n~~~ html\n\u003cinput type=\"text\" name=\"user\" /\u003e\n\u003cinput type=\"password\" name=\"pw\" /\u003e\n\u003cinput type=\"submit\" /\u003e\n~~~\n\n別の例として, role 属性のショートカット `@` を追加します。\n\n~~~ ruby\nSlim::Engine.set_options shortcut: {'@' =\u003e 'role', '#' =\u003e 'id', '.' =\u003e 'class'}\n~~~\n\nSlim コードの中でこの様に使用できます。\n\n~~~ slim\n.person@admin = person.name\n~~~\n\nレンダリング結果\n\n~~~ html\n\u003cdiv class=\"person\" role=\"admin\"\u003eDaniel\u003c/div\u003e\n~~~\n\n1つのショートカットを使って複数の属性を設定することもできます。\n\n~~~ ruby\nSlim::Engine.set_options shortcut: {'@' =\u003e {attr: %w(data-role role)}}\n~~~\n\nSlim の中で次のように使用すると,\n\n~~~ slim\n.person@admin = person.name\n~~~\n\nこのようにレンダリングされます。\n\n~~~ html\n\u003cdiv class=\"person\" role=\"admin\" data-role=\"admin\"\u003eDaniel\u003c/div\u003e\n~~~\n\n次のように追加の属性固定値を設定することもできます。\n\n~~~ ruby\nSlim::Engine.set_options shortcut: {'^' =\u003e {tag: 'script', attr: 'data-binding',\n  additional_attrs: { type: \"text/javascript\" }}}\n~~~\n\nこのように使用します。\n\n~~~ slim\n^products\n  == @products.to_json\n~~~\n\nレンダリング結果です。\n\n~~~ html\n\u003cscript data-binding=\"products\" type=\"text/javascript\"\u003e\n[{\"name\": \"product1\", \"price\": \"$100\"},\n {\"name\": \"prodcut2\", \"price\": \"$200\"}]\n\u003c/script\u003e\n~~~\n\n#### ID ショートカット `#` と class ショートカット `.`\n\n`id` と `class` の属性を次のショートカットで指定できます。\n\n~~~ slim\nbody\n  h1#headline\n    = page_headline\n  h2#tagline.small.tagline\n    = page_tagline\n  .content\n    = show_content\n~~~\n\nこれは次に同じです\n\n~~~ slim\nbody\n  h1 id=\"headline\"\n    = page_headline\n  h2 id=\"tagline\" class=\"small tagline\"\n    = page_tagline\n  div class=\"content\"\n    = show_content\n~~~\n\n## ヘルパ, キャプチャとインクルード\n\nいくつかのヘルパを使用してテンプレートを拡張することもできます。次のヘルパが定義されているとして,\n\n~~~ruby\nmodule Helpers\n  def headline(\u0026block)\n    if defined?(::Rails)\n      # Rails の場合には capture メソッドを使う\n      \"\u003ch1\u003e#{capture(\u0026block)}\u003c/h1\u003e\"\n    else\n      # フレームワークなしで Slim を使う場合(Tilt の場合),\n      # そのまま出力する\n      \"\u003ch1\u003e#{yield}\u003c/h1\u003e\"\n    end\n  end\nend\n~~~\n\n実行する Slim のテンプレートコードのスコープにインクルードされます。このヘルパは, Slim テンプレートの中で次のように使用することができます。\n\n~~~ slim\np\n  = headline do\n    ' Hello\n    = user.name\n~~~\n\n`do` ブロック内のコンテンツが自動的にキャプチャされ `yield` を通してヘルパに渡されます。糖衣構文として\n`do` キーワードを省略して書くこともできます。\n\n~~~ slim\np\n  = headline\n    ' Hello\n    = user.name\n~~~\n\n### ローカル変数のキャプチャ\n\n次のように `Binding` を使ってローカル変数をキャプチャすることができます:\n\n~~~ruby\nmodule Helpers\n  def capture_to_local(var, \u0026block)\n    set_var = block.binding.eval(\"lambda {|x| #{var} = x }\")\n    # Rails では capture! を使います\n    # Slim をフレームワークなしで使う場合 (Tilt のみを使う場合),\n    # キャプチャブロックを取得するには yield だけが利用できます\n    set_var.call(defined?(::Rails) ? capture(\u0026block) : yield)\n  end\nend\n~~~\n\nこのヘルパは次のように使用できます\n\n~~~ slim\n/ captured_content 変数は Binding 前に定義されていなければいけません。\n= capture_to_local captured_content=:captured_content\n  p この段落は captured_content 変数にキャプチャされます\n= captured_content\n~~~\n\n別の興味深いユースケースは, enumerableを使いそれぞれの要素をキャプチャすることです。ヘルパは, このようになります。\n\n~~~ ruby\nmodule Capture\n  def capture(var, enumerable = nil, \u0026block)\n    value = enumerable ? enumerable.map(\u0026block) : yield\n    block.binding.eval(\"lambda {|x| #{var} = x }\").call(value)\n    nil\n  end\nend\n~~~\n\nそして, 次のように使用出来ます。\n\n~~~ slim\n- links = { 'https://slim-template.github.io' =\u003e 'The Slim Template Language' }\n= capture link_list=:link_list, links do |url, text|\n  a href=url = text\n~~~\n\nその後は, `link_list`はキャプチャしたコンテンツを含みます。\n\n### インクルードヘルパ\n\nコンパイル時にインクルード機能を使いたい場合には, [パーシャルのインクルード](doc/jp/include.md) を見てください。\n実行時にサブテンプレートを実行すること ( Rails の `#render` のように) もできます。インクルードヘルパを自分で用意する必要があります:\n\n~~~ ruby\nmodule Helpers\n  def include_slim(name, options = {}, \u0026block)\n    Slim::Template.new(\"#{name}.slim\", options).render(self, \u0026block)\n  end\nend\n~~~\n\nこのヘルパは次のように使用できます\n\n~~~ slim\nnav = include_slim 'menu'\nsection = include_slim 'content'\n~~~\n\nしかし, このヘルパはキャッシュを行いません。その為, 目的にあったよりインテリジェントなバージョンを\n実装する必要があります。また, ほとんどのフレームワークにはすでに同様のヘルパが含まれるので注意してください。(例: Rails の `render` メソッド)\n\n## テキストの展開\n\nRuby の標準的な展開方法を使用します。テキストはデフォルトで html エスケープされます。2 重括弧にすることでエスケープしないこともできます。\n\n~~~ slim\nbody\n  h1 ようこそ #{current_user.name} ショーへ。\n  | エスケープしない #{{content}} こともできます。\n~~~\n\n展開したテキストのエスケープ方法 (言い換えればそのままのレンダリング)\n\n~~~ slim\nbody\n  h1 ようこそ \\#{current_user.name} ショーへ。\n~~~\n\n## 埋め込みエンジン (Markdown, ...)\n\n[Tilt](https://github.com/jeremyevans/tilt)のおかげで, Slim は他のテンプレートエンジンの埋め込みに見事に対応しています。\n\n例:\n\n~~~ slim\n    coffee:\n      square = (x) -\u003e x * x\n\n    markdown:\n      #Header\n        #{\"Markdown\"} からこんにちわ!\n        2行目!\n\np: markdown: Tag with **inline** markdown!\n~~~\n\n対応エンジン:\n\n| フィルタ | 必要な gems | 種類 | 説明 |\n| -------- | ----------- | ---- | ----------- |\n| ruby: | なし | ショートカット | Ruby コードを埋め込むショートカット |\n| javascript: | なし | ショートカット | javascript コードを埋め込み、script タグで囲む |\n| css: | なし | ショートカット | css コードを埋め込み、style タグで囲む |\n| sass: | sass-embedded または sassc または sass | コンパイル時 | sass コードを埋め込み、style タグで囲む |\n| scss: | sass-embedded または sassc または sass | コンパイル時 | scss コードを埋め込み、style タグで囲む |\n| coffee: | coffee-script | コンパイル時 | CoffeeScript をコンパイルし、 script タグで囲む |\n| markdown: | redcarpet/rdiscount/kramdown | コンパイル時 + 展開 | Markdown をコンパイルし、テキスト中の # \\{variables} を展開 |\n| textile: | redcloth | コンパイル時 + 展開 | textile をコンパイルし、テキスト中の # \\{variables} を展開 |\n| rdoc: | rdoc | コンパイル時 + 展開 | RDoc をコンパイルし、テキスト中の # \\{variables} を展開 |\n\n埋め込みエンジンは Slim の `Slim::Embedded` フィルタのオプションで直接設定されます。例:\n\n~~~ ruby\nSlim::Embedded.options[:markdown] = {auto_ids: false}\n~~~\n\n以下埋め込みエンジンの場合はHTMLのattributeも指定できます：\n\n* Javascript\n* CSS\n* CoffeeScript\n* SASS\n* SCSS\n\n例：\n\n~~~ scss\nscss class=\"myClass\":\n  $color: #f00;\n  body { color: $color; }\n~~~\n\nレンダリング結果：\n\n~~~ html\n\u003cstyle class=\"myClass\" type=\"text/css\"\u003ebody{color:red}\u003c/style\u003e\n~~~\n\n## Slim の設定\n\nSlim とその基礎となる [Temple](https://github.com/judofyr/temple) は非常に柔軟に設定可能です。\nSlim を設定する方法はコンパイル機構に少し依存します。(Rails や [Tilt](https://github.com/jeremyevans/tilt))。デフォルトオプションの設定は `Slim::Engine` クラスでいつでも可能です。Rails の 環境設定ファイルで設定可能です。例えば, config/environments/developers.rb で設定したいとします:\n\n### デフォルトオプション\n\n~~~ ruby\n# デバック用に html をきれいにインデントし属性をソートしない\nSlim::Engine.set_options pretty: true, sort_attrs: false\n~~~\n\nハッシュで直接オプションにアクセスすることもできます:\n\n~~~ ruby\nSlim::Engine.options[:pretty] = true\n~~~\n\n### 実行時のオプション設定\n\n実行時のオプション設定の方法は2つあります。Tilt テンプレート (`Slim::Template`) の場合, テンプレートを\nインスタンス化する時にオプションを設定できます。\n\n~~~ ruby\nSlim::Template.new('template.slim', optional_option_hash).render(scope)\n~~~\n\n他の方法は Rails に主に関係がありますがスレッド毎にオプション設定を行う方法です:\n\n~~~ slim\nSlim::Engine.with_options(option_hash) do\n   # ここで作成される Slim エンジンは option_hash を使用します\n   # Rails での使用例:\n   render :page, layout: true\nend\n~~~\n\nRails ではコンパイルされたテンプレートエンジンのコードとオプションはテンプレート毎にキャッシュされ, 後でオプションを変更できないことに注意する必要があります。\n\n~~~ slim\n# 最初のレンダリング呼び出し\nSlim::Engine.with_options(pretty: true) do\n   render :page, layout: true\nend\n\n# 2回目のレンダリング呼び出し\nSlim::Engine.with_options(pretty: false) do\n   render :page, layout: true # :pretty is still true because it is cached\nend\n~~~\n\n### 設定可能なオプション\n\n次のオプションが `Slim::Engine` によって用意され `Slim::Engine.set_options` で設定することができます。\n沢山ありますが, 素晴らしいことに, Slim は設定キーをチェックし, 無効な設定キーを使用しようとしていた場合, エラーを返してくれます。\n\n\n| 型 | 名前 | デフォルト | 用途 |\n| ---- | ---- | ---------- | ---- |\n| String | :file | nil | 解析対象のファイル名。  Slim::Template によって自動的に設定されます |\n| Integer | :tabsize | 4 | 1 タブあたりのスペース数 (構文解析で利用されます) |\n| String | :encoding | \"utf-8\" | テンプレートのエンコーディングを設定 |\n| String | :default_tag | \"div\" | タグ名が省略されている場合デフォルトのタグとして使用される |\n| Hash | :shortcut | \\{'.' =\u003e {attr: 'class'}, '#' =\u003e {attr: 'id'}} | 属性のショートカット |\n| Hash | :code_attr_delims | \\{'(' =\u003e ')', '[' =\u003e ']', '{' =\u003e '}'} | Ruby コードの属性区切り文字 |\n| Hash | :attr_list_delims | \\{'(' =\u003e ')', '[' =\u003e ']', '{' =\u003e '}'} | 属性リスト区切り文字 |\n| Array\u0026lt;Symbol,String\u0026gt; | :enable_engines | nil \u003ci\u003e(すべて有効)\u003c/i\u003e | 有効な埋め込みエンジンリスト (ホワイトリスト) |\n| Array\u0026lt;Symbol,String\u0026gt; | :disable_engines | nil \u003ci\u003e(無効なし)\u003c/i\u003e | 無効な埋め込みエンジンリスト (ブラックリスト) |\n| Boolean | :disable_capture | false (Rails では true) | ブロック内キャプチャ無効 (ブロックはデフォルトのバッファに書き込む)  |\n| Boolean | :disable_escape | false | Stringの自動エスケープ無効 |\n| Boolean | :use_html_safe | false (Rails では true) | ActiveSupport の String# html_safe? を使う (:disable_escape と一緒に機能する) |\n| Symbol | :format | :xhtml | HTML の出力フォーマット (対応フォーマット :html, :xhtml, :xml) |\n| String | :attr_quote |  '\"'  | HTML の属性を囲む文字 (' または \" が可能) |\n| Hash | :merge_attrs | \\{'class' =\u003e ' '} | 複数の html 属性が与えられたときに, 結合に使われる文字 (例: class=\"class1 class2\") |\n| Array\u0026lt;String\u0026gt; | :hyphen_attrs | %w(data) | 属性にハッシュが与えられたとき, ハイフンで区切られます。(例: data={a:1, b:2} は data-a=\"1\" data-b=\"2\" のように) |\n| Boolean | :sort_attrs | true | 名前順に属性をソート |\n| Symbol | :js_wrapper | nil | :commentや :cdata , :both で JavaScript をラップします。:guess を指定することで :format オプションに基いて設定することもできます |\n| Boolean | :pretty | false | HTML を綺麗にインデントします。ブロック要素のタグでのみ、インデントされます。 \u003cb\u003e(遅くなります!)\u003c/b\u003e |\n| String | :indent | '  ' | インデントに使用される文字列 |\n| Boolean | :streaming | false (Rails では true, 無効化するにはストリーミングを参照) | ストリーミング出力の有効化, 体感的なパフォーマンスの向上 |\n| Class | :generator | Temple::Generators::StringBuffer/ RailsOutputBuffer | Temple コードジェネレータ (デフォルトのジェネレータはStringバッファを生成します) |\n| String | :buffer | '_buf' (Rails では '@output_buffer') | バッファに使用される変数 |\n| String | :splat_prefix | '*' | アスタリスク(スプラット)属性のプレフィックス |\n\nTemple フィルタによってもっと多くのオプションがサポートされていますが一覧には載せず公式にはサポートしません。\nSlim と Temple のコードを確認しなければなりません。\n\n### オプションの優先順位と継承\n\nSlim や Temple のアーキテクチャについてよく知っている開発者は, 別の場所で設定を\n上書きすることができます。 Temple はサブクラスがスーパークラスのオプションを上書きできるように\n継承メカニズムを採用しています。オプションの優先順位は次のとおりです:\n\n1. `Slim::Template` オプションはエンジン初期化時に適用されます\n2. `Slim::Template.options`\n3. `Slim::Engine.thread_options`, `Slim::Engine.options`\n5. Praser/Filter/Generator `thread_options`, `options` (例: `Slim::Parser`, `Slim::Compiler`)\n\n`Temple::Engine` のようにスーパークラスのオプションを設定することも可能です。しかし, こうするとすべての Temple テンプレートエンジンに影響します。\n\n~~~ ruby\nSlim::Engine \u003c Temple::Engine\nSlim::Compiler \u003c Temple::Filter\n~~~\n\n## プラグイン\n\nSlim はロジックレスモードと I18n, インクルードプラグインを提供しています。プラグインのドキュメントを確認してください。\n\n* [ロジックレスモード](doc/jp/logic_less.md)\n* [パーシャルのインクルード](doc/jp/include.md)\n* [多言語化/I18n](doc/jp/translator.md)\n* [スマートテキストモード](doc/jp/smart.md)\n\n## フレームワークサポート\n\n### Tilt\n\nSlim は生成されたコードをコンパイルするために [Tilt](https://github.com/jeremyevans/tilt) を使用します。Slim テンプレートを直接使いたい場合, Tilt インターフェイスが使用できます。\n\n~~~ ruby\nTilt.new['template.slim'].render(scope)\nSlim::Template.new('template.slim', optional_option_hash).render(scope)\nSlim::Template.new(optional_option_hash) { source }.render(scope)\n~~~\n\noptional_option_hash は前述のオプションを持つことができます。スコープはコードが実行されるテンプレートの\nオブジェクトです。\n\n### Sinatra\n\n~~~ ruby\nrequire 'sinatra'\nrequire 'slim'\n\nget('/') { slim :index }\n\n __END__\n@@ index\ndoctype html\nhtml\n  head\n    title Slim で Sinatra\n  body\n    h1 Slim は楽しい!\n~~~\n\n### Rails\n\nRails のジェネレータは [slim-rails](https://github.com/slim-template/slim-rails) によって提供されます。\nslim-rails は Rails で Slim を使用する場合に必須ではありません。Slim をインストールし Gemfile に `gem 'slim'` を追加するだけです。\n後は .slim 拡張子を使うだけです。\n\n#### ストリーミング\n\nHTTP ストリーミングをサポートしているバージョンの Rails であれば, デフォルトで有効化されています。しかし, ストリーミングは体感的なパフォーマンスを改善しているだけであることに注意してください。\nレンダリング時間は増加するでしょう。ストリーミングを無効化したい場合, 以下のように設定します:\n\n~~~ ruby\nSlim::RailsTemplate.set_options streaming: false\n~~~\n\n### Angular2\n\nSlim は Angular2 の構文に対応しています。ただし, いくつかのオプションを設定する必要があります:\n\n#### `splat_prefix` オプション\n\nこのオプションは, アスタリスク(スプラット)属性に使用する構文をパーサに指定します。\nデフォルト値はアスタリスクです: `splat_prefix: '*'`\nアスタリスクは Angular2 でも構造ディレクティブとして `*ngIf` などで使われます。デフォルトの設定値では, Slim と Angular2 の構文は衝突します。\n\n解決方法は 2 つあります:\n\n* `splat_prefix` に 2重アスタリスクのようなカスタム値(`splat_prefix: '**'`)を設定します。これで構造ディレクティブは期待通りに機能するはずです。アスタリスク属性は設定したカスタム値のプレフィックスで書かなければならないので注意してください。\n* アスタリスクではない代わりのディレクティブ構文を使います。\n\n#### 属性区切り文字\n\nAngular と Slim はそれぞれの構文で括弧を使います。この場合も解決方法は 2 つあります:\n* バインディングに代わりの構文を使う (`bind-...` など)\n* 属性区切り文字を波括弧に限定する\n```\ncode_attr_delims: {\n '{' =\u003e '}',\n},\nattr_list_delims: {\n '{' =\u003e '}',\n},\n```\n\nこれで次のように書けます:\n```\nh1{ #var (bind1)=\"test\" [bind2]=\"ok\" [(bind3)]=\"works?\" *ngIf=\"expr\" *ngFor=\"expression\" } {{it works}}\n```\n\nコンパイル結果:\n```\n\u003ch1 #var=\"\" (bind1)=\"test\" [bind2]=\"ok\" [(bind3)]=\"works?\" *ngIf=\"expr\" *ngFor=\"expression\"\u003e\n  {{it works}}\n\u003c/h1\u003e\n```\n\n## ツール\n\n### Slim コマンド 'slimrb'\n\ngem の 'slim' にはコマンドラインから Slim をテストするための小さなツール 'slimrb' が付属します。\n\n\u003cpre\u003e\n$ slimrb --help\nUsage: slimrb [options]\n    -s, --stdin                      Read input from standard input instead of an input file\n        --trace                      Show a full traceback on error\n    -c, --compile                    Compile only but do not run\n    -e, --erb                        Convert to ERB\n        --rails                      Generate rails compatible code (Implies --compile)\n    -r, --require library            Load library or plugin with -r slim/plugin\n    -p, --pretty                     Produce pretty html\n    -o, --option name=code           Set slim option\n    -l, --locals Hash|YAML|JSON      Set local variables\n    -h, --help                       Show this message\n    -v, --version                    Print version\n\u003c/pre\u003e\n\n'slimrb' で起動し, コードをタイプし Ctrl-d で EOF を送ります。Windows のコマンドプロンプトでは Ctrl-z で EOF を送ります。使い方例:\n\n\u003cpre\u003e\n$ slimrb\nmarkdown:\n  最初の段落。\n\n  2つ目の段落。\n\n  * 1つ\n  * 2つ\n  * 3つ\n\n//Enter Ctrl-d\n\u0026lt;p\u0026gt;最初の段落。 \u0026lt;/p\u0026gt;\n\n\u0026lt;p\u0026gt;2つめの段落。 \u0026lt;/p\u0026gt;\n\n\u0026lt;ul\u0026gt;\n\u0026lt;li\u0026gt;1つ\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;2つ\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;3つ\u0026lt;/li\u0026gt;\n\u0026lt;/ul\u0026gt;\n\u003c/pre\u003e\n\n### 構文ハイライト\n\n様々なテキストエディタ(Vim や Emacs, Textmateなど)のためのプラグインがあります。:\n\n* [Vim](https://github.com/slim-template/vim-slim)\n* [Emacs](https://github.com/slim-template/emacs-slim)\n* [Textmate / Sublime Text](https://github.com/slim-template/ruby-slim.tmbundle)\n* [Espresso text editor](https://github.com/slim-template/Slim-Sugar)\n* [Coda](https://github.com/slim-template/Coda-2-Slim.mode)\n* [Atom](https://github.com/slim-template/language-slim)\n\n### テンプレート変換 (HAML, ERB, ...)\n\n* Slim は gem に含まれる `slimrb` や `Slim::ERBConverter` を用いて ERB に変換できます。\n* [Haml2Slim converter](https://github.com/slim-template/haml2slim)\n* [ERB2Slim, HTML2Slim converter](https://github.com/slim-template/html2slim)\n\n## テスト\n\n### ベンチマーク\n\n  *そうです, Slim は最速の Ruby のテンプレートエンジンです!\n   production モードの Slim は Erubis (最速のテンプレートエンジン) と同じくらい高速です。\n   どんな理由であれ, あなたが Slim を選択していただければ嬉しいし, 私たちは\n   パフォーマンスが障害にならないだろうことを保証します。*\n\nベンチマークは `rake bench` で実行します。時間が余計にかかりますが遅い解析ベンチマークを\n実行したい場合 `slow` オプションを追加できます。\n\n~~~\nrake bench slow=1 iterations=1000\n~~~\n\n### テストスイートと継続的インテグレーション\n\nSlim は minitest ベースの拡張性のあるテストスイートを提供します。テストは 'rake test' または\nrails のインテグレーションテストの場合 'rake test:rails' で実行できます。\n\n私たちは現在 markdown ファイルで書かれ, 人間が読み書きしやすいテストを試しています: [TESTS.md](test/literate/TESTS.md)\n\nSlim は主要な Ruby 実装全てで動作します:\n\n* Ruby 2.5\n* JRuby\n\n## 貢献\n\nSlim の改良を支援したい場合, Git で管理されているプロジェクトを clone してください。\n\n~~~\n$ git clone git://github.com/slim-template/slim\n~~~\n\n魔法をかけた後 pull request を送ってください。私たちは pull request が大好きです！\n\nRuby の 2.5.0 でテストをすることを覚えておいてください。\n\nもしドキュメントの不足を見つけたら, README.md をアップデートして私たちを助けて下さい。Slim に割ける時間がないが, 私たちが知っておくべきことを見つけた場合には issue を送ってください。\n\n## License\n\nSlim は [MIT license](http://www.opensource.org/licenses/MIT) に基づいてリリースされています。\n\n## 作者\n\n* [Daniel Mendler](https://github.com/minad) (Lead developer)\n* [Andrew Stone](https://github.com/stonean)\n* [Fred Wu](https://github.com/fredwu)\n\n## 寄付と支援\n\nこのプロジェクトをサポートしたい場合, GitHub sponsors のページを見てください。\n\n[![GitHub Sponsors](https://img.shields.io/github/sponsors/slim-template)](https://github.com/sponsors/slim-template)\n\n## 関連プロジェクト\n\nテンプレートのコンパイルフレームワーク:\n\n* [Temple](https://github.com/judofyr/temple)\n\nフレームワークサポート:\n\n* [Rails generators (slim-rails)](https://github.com/slim-template/slim-rails)\n  * [slimkeyfy - Translation string extraction](https://github.com/phrase/slimkeyfy)\n\n構文ハイライト:\n\n* [Vim](https://github.com/slim-template/vim-slim)\n* [Emacs](https://github.com/slim-template/emacs-slim)\n* [Textmate / Sublime Text](https://github.com/slim-template/ruby-slim.tmbundle)\n* [Espresso text editor](https://github.com/slim-template/Slim-Sugar)\n* [Coda](https://github.com/slim-template/Coda-2-Slim.mode)\n* [Atom](https://github.com/slim-template/language-slim)\n\n静的コード解析:\n\n* [Slim-Lint](https://github.com/sds/slim-lint)\n* [SublimeLinter-slim-lint](https://github.com/elstgav/SublimeLinter-slim-lint)\n\nテンプレート変換 (HAML, ERB, ...):\n\n* [Haml2Slim converter](https://github.com/slim-template/haml2slim)\n* [ERB2Slim, HTML2Slim converter](https://github.com/slim-template/html2slim)\n\n移植言語/同様の言語:\n\n* [Sliq (Slim/Liquid integration)](https://github.com/slim-template/sliq)\n* [Hamlet.rb (Similar template language)](https://github.com/gregwebs/hamlet.rb)\n* [Slm (Slim port to Javascript)](https://github.com/slm-lang/slm)\n* [Skim (Slim for Javascript)](https://github.com/jfirebaugh/skim)\n* [Emblem.js (Javascript, similar to Slim)](https://github.com/machty/emblem.js)\n* [Jade (Similar engine for javascript)](https://github.com/visionmedia/jade)\n* [Pug (Successor of Jade, Similar engine for javascript)](https://github.com/pugjs/pug)\n* [Coffee script plugin for Slim](https://github.com/yury/coffee-views)\n* [Plim (Python port of Slim)](https://github.com/2nd/plim)\n* [Trim-Template (Python template engine inspired by Slim)](https://github.com/opensourceame/trim-template)\n* [Clojure port of Slim](https://github.com/chaslemley/slim.clj)\n* [Hamlit (Haml implementation, using Temple like Slim)](https://github.com/k0kubun/hamlit)\n* [Faml (Haml implementation, using Temple like Slim)](https://github.com/eagletmt/faml)\n* [Haml (Older template engine which inspired Slim)](https://github.com/haml/haml)\n* [Sweet (Similar engine which also allows to write classes and functions)](https://github.com/joaomdmoura/sweet)\n* [Amber (Similar engine for Go)](https://github.com/eknkc/amber)\n* [Slang (Slim-inspired templating language for Crystal)](https://github.com/jeromegn/slang)\n","funding_links":["https://github.com/sponsors/slim-template"],"categories":["Ruby","HTML \u0026 Markup","Web 后端","Template Engine","Gems"],"sub_categories":["Template Engines","Template engines"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fslim-template%2Fslim","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fslim-template%2Fslim","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fslim-template%2Fslim/lists"}