Rubyテンプレートエンジン:ERB、HAML、Slim
ERBはテンプレートエンジンです。
テンプレートエンジンを使用すると、HTMLとRubyを混在させることができます。 したがって、データベースのデータを使用してWebページを生成できます。
ERBは、ビューをレンダリングするためのRailsのデフォルトエンジンです。
注:Railsは、
ERB
の代わりにerubiと呼ばれる実装を使用します Ruby標準ライブラリのクラス。
この記事の後半で学習するように、ERBを使用するためにRailsは必要ありません。
しかし最初に :
ERBの構文の概要、RubyプロジェクトでERBを使用する方法、およびHAMLなどの他のテンプレートエンジンとの比較方法。
やってみましょう!
埋め込みRuby(ERB)チュートリアル
ERBテンプレート .html.erb
で終わるファイルです または.erb
拡張機能。
ERBテンプレート内に書き込むものはすべてHTMLです。
…特別なタグを使用しない限り!
ここに例があります :
Hello <%= name %>!
この<%= %>
タグは、その中のRubyコードを評価することにより、テンプレートエンジンに置き換えられます。
文字列補間のようなものです!
<%= %>
の等号に注意してください 。
これにより、ERBはこのタグのコンテンツをレンダリングするようになります。 。
ERBでループまたはifステートメントを記述したい場合は、等号を省略して、ERBが不要なものをレンダリングしないようにします。
正しいERBタグを使用しないと、エラーが発生することもあります。
ここに例があります :
<% if @favorite_food == "chocolate" %> Are you a chocolate lover? Here are some of our best PREMIUM chocolate bars! <% else %> Here are our top 10 snacks that people bought this month. <% end %>
これはERBifステートメントです 、通常のRuby ifステートメントと同様ですが、特別なテンプレート構文をラップしているため、このページがユーザー向けにレンダリングされたときに評価して出力に置き換えることができます。
これがERBループです :
<% @books.each do |book| %> <%= book.title %> <%= book.author %>
<% end %>
一連の本を考えると、これにより、すべての本が改行されて印刷されます。
Railsを使用している場合は、関連するコントローラーアクションを呼び出すと、このテンプレートがレンダリングされます。
レールなしでERBを使用する
Railsの外部でERBを使用して、レポートと静的Webサイトを構築する場合…
これを行うことができます :
require 'erb' Book = Struct.new(:title, :author) template = ERB.new(File.read('template.erb')) template.result_with_hash(books: [Book.new("test"), Book.new("abc")])
@books
を置き換える必要があります books
これが機能するようにテンプレートで。
Railsは、「変数バインディング」と呼ばれるメタプログラミングのトリックを使用しています。
これが、Railsがコントローラーのインスタンス変数をテンプレートと共有する方法です。ただし、ハッシュを使用してRailsなしでERBを使用する場合(result_with_hash
を使用) メソッド)はよりクリーンなソリューションです。
どう思いますか?
テンプレートエンジンの比較
今 :
さまざまなテンプレートエンジンを比較してみましょう。
Tilt gemを使用して、これらすべてのエンジンにアクセスできます。 Tiltは、ファラデーのようなアダプターの宝石です。
例 :
require 'tilt' Tilt::ErubiTemplate.new("test.erb").render require 'tilt/haml' Tilt::HamlTemplate.new("test.haml").render require 'slim' Slim::Template.new("test.slim").render
これが異なる実装間のベンチマークです :
Comparison: erubi: 5786.0 i/s ERB: 4438.8 i/s - 1.30x slower Haml: 1340.0 i/s - 4.32x slower Slim: 724.1 i/s - 7.99x slower
HAML構文は次のとおりです 次のようになります:
%head %title Ruby Templating Engines = 123 * 2 %body - foo.each do |bar| %p This Is Cool
プレーンHTMLとは異なるため、慣れる必要があります。
さらに簡潔なのは、スリムの構文です。 :
head title Ruby Templating Engines = 123 * 2 body - foo.each do |bar| p | This Is Cool
Slimはコンテンツの複数行のブロックにパイプ文字を使用しますが、Hamlではそれは必要ありません。
Githubリポジトリレベルでの比較を見てみましょう:
REPO | STARS | LAST_COMMIT | LATEST_RELEASE | CREATED_DATE |
---|---|---|---|---|
jeremyevans / erubi | 255 | 2019-11-05 14:09:06 | 2019-09-25 15:44:36 | 2016-11-10 22:42:44 |
haml / haml | 3461 | 2019-12-27 10:51:59 | 2019-08-06 12:01:09 | 2008-02-11 22:55:26 |
Slim-template / Slim | 4898 | 2019-12-15 23:55:23 | 2018-09-02 23:54:10 | 2010-09-13 01:32:07 |
では、どちらを使用する必要がありますか?
主に個人的な好みだと思います。
しかし、明確なことが1つあります :
特定のプロジェクト用に1つを選択し、そのエンジンを使用してすべてのテンプレートを作成します。
混ぜ合わせないでください。
ERBテンプレートを使い続けるのが好きです…
適切なエディタースニペットとサポートがあれば、それほど余分な書き込みは必要ありません。
別のエンジンに移動したい場合は、(ERBとの間で)コンバーターを使用することもできます。
概要
Rubyでのテンプレートエンジンについて学びました!
この記事を共有し、まだ(9000人以上の購読者)の場合はニュースレターを購読して、このようなすばらしいコンテンツを入手してください。
読んでくれてありがとう🙂
-
Rubyでの挿入ソートを理解する
注:これは、Rubyを使用したさまざまなソートアルゴリズムの実装を検討するシリーズのパート4です。パート1ではバブルソート、パート2では選択ソート、パート3ではマージソートについて説明しました。 データを並べ替えるためのさまざまな方法を引き続き検討するため、挿入並べ替えに目を向けます。挿入ソートが好きな理由はたくさんあります!まず、挿入ソートは安定です。 、これは、等しいキーを持つ要素の相対的な順序を変更しないことを意味します。 インプレースアルゴリズムでもあります 、は、並べ替えられた要素を格納するための新しい配列を作成しないことを意味します。最後に、挿入ソートは、すぐにわかるように、実
-
Ruby2.6の9つの新機能
Rubyの新しいバージョンには、新しい機能とパフォーマンスの改善が含まれています。 変更についていきますか? 見てみましょう! 無限の範囲 Ruby 2.5以前のバージョンは、すでに1つの形式の無限範囲をサポートしています( Float ::INFINITY を使用) )、しかしRuby2.6はこれを次のレベルに引き上げます。 新しい無限の範囲 次のようになります: (1..) これは、(1..10)のような終了値がないため、通常の範囲とは異なります。 。 使用例 : [a, b, c].zip(1..) # [[a, 1], [b, 2], [c, 3]] [1,2,3,