# Slimについて知ろう
## 今日の目標
- Slimと友達の友達くらいになろう
- Slimについてよく知ってSlimよくわからなくて怖いって気持ちがなくなる
## Slimってなに?
### Slimとは
Slimは、Ruby on Railsというウェブアプリケーションフレームワークで使われることが多い、テンプレートエンジンの一つです。
### テンプレートエンジンとは
テンプレートエンジンとは、HTMLのコードを簡潔にかつ動的に生成するためのツールです。
RailsではERBやSlim、Hamlなどが使われています
言語やフレームワークごとに様々なテンプレートエンジンが使われています
## HTMLについてのおさらい
### タグ構造について
HTMLは、<タグ名>の形で書かれ、多くは開始タグと終了タグで要素を囲みます。例えば、<p>は段落を表し、<p>これは段落です。</p>のように使用します。
### classとidについて
classとidは、HTML要素に名前を付けるための属性です。classは複数の要素に同じ名前を付けることができ、idは一意の名前を付けることができます。
## ERBとHTMLの関係
ERBは、HTMLの中にRubyコードを埋め込むことができるテンプレートエンジンです。<% %>で囲まれた部分にRubyコードを書くことができ、<%= %>を使うとその結果を出力することができます。
## SlimとHTMLの関係
SlimもERBと同様に、HTML内にRubyコードを埋め込むことができますが、Slimはさらにシンタックスが簡潔です。Slimでは、タグをインデントで表現し、閉じタグは不要です。
```slim
doctype html
html
head
title Slim Sample
body
h1 Hello, Slim!
p This is a sample page using Slim.
```
```html
<!DOCTYPE html>
<html>
<head>
<title>Slim Sample</title>
</head>
<body>
<h1>Hello, Slim!</h1>
<p>This is a sample page using Slim.</p>
</body>
</html>
```
## 実際に動かしてみよう
codepenを使って以下のerbファイルをslimに書き換えて行って使い方に慣れよう
https://codepen.io/kenchasonakai/pen/YzRWXjZ
```erb
<h1>Posts</h1>
<% notice = 'nothice' %>
<p id="notice"><%= notice %></p>
<table class="table table-hover">
<thead class="thead-dark">
<tr>
<th>Title</th>
</tr>
</thead>
<tbody>
<% posts = ["生産性アップ5つの方法", "パリの隠れ名所", "AIの未来展望","夢の科学解析"] %>
<% posts.each do |post| %>
<tr>
<td><%= post %></td>
</tr>
<% end %>
</tbody>
</table>
```
### HTMLタグを記述する練習
下記のコードを書き換えてください
```erb
<h1>Posts</h1>
```
```slim=
h1 Posts
```
### 表示はしないけどrubyのコードを実行する記法の練習
下記のコードを書き換えてください
```erb
<% notice = 'nothice' %>
```
```slim=
- notice = 'notice'
```
### idを記述する練習
idを要素を書くときは`#`を使います
下記のコードを書き換えてください
```erb
<p id="notice"><%= notice %></p>
```
```slim=
p#notice = notice
```
### classを記述する方法
class要素を書くときは`.`を使います
複数のclass要素を書くときは`.`で繋げます
下記のコードを書き換えてください
```erb
<table class="table table-hover">
</table>
```
```slim=
table.table.table-hover
```
### HTMLの入れ子構造を記述する方法
classを記述する方法と一部コードが重複します
入れ子構造はインデントで表します
下記のコードを書き換えてください
```erb
<table class="table table-hover">
<thead class="thead-dark">
<tr>
<th>Title</th>
</tr>
</thead>
</table>
```
```slim=
table.table.table-hover
thead.thead-dark
tr
th Title
```
### each文を書く練習
eachやifなどのendは不要です
インデントを使ってどこまでがeach文なのか表します
下記のtableをまるっと書き換えてみましょう
```erb
<table class="table table-hover">
<thead class="thead-dark">
<tr>
<th>Title</th>
</tr>
</thead>
<tbody>
<% posts = ["生産性アップ5つの方法", "パリの隠れ名所", "AIの未来展望","夢の科学解析"] %>
<% posts.each do |post| %>
<tr>
<td><%= post %></td>
</tr>
<% end %>
</tbody>
</table>
```
```slim=
table.table.table-hover
thead.thead-dark
tr
th Title
tbody
- posts = ["生産性アップ5つの方法", "パリの隠れ名所", "AIの未来展望","夢の科学解析"]
- posts.each do |post|
tr
td = post
```
### 最終形
```slim=
h1 Posts
- notice = 'notice'
p#notice = notice
table.table.table-hover
thead.thead-dark
tr
th Title
tbody
- posts = ["生産性アップ5つの方法", "パリの隠れ名所", "AIの未来展望","夢の科学解析"]
- posts.each do |post|
tr
td = post
```
## 終わりに
Slimはいきなり出てくるととっつきにくい印象を持たれやすいですが、一つ一つ見てあげると意外と単純なことがわかると思います
これをきっかけにSlimと仲良くしてもらえると嬉しいです
## ちなみに
form_withはslimでどうかけばいいのか質問が来たので書いておきます
```erb=
<%= form_with model: @user, url: login_path do |form| %>
<%= form.text_field :name %>
<% end%>
```
endは階層構造で表すので以下のようになります
```slim=
= form_with model: @user, url: login_path do |form|
= form.text_field :name
```