‹テンプレート How-toは統合が検討されています。›
| その他の名前 | エルビー |
|---|---|
| リポジトリ | github.com/ruby/erb |
| 書かれた | ルビー |
| タイプ | テンプレートエンジン |
| ライセンス | BSD 2条項ライセンス |
Embedded Ruby ( ERBとも略される)は、テキスト文書にRubyを埋め込むテンプレートシステムである。ASPやJSP、PHPなどのサーバー側スクリプト言語と同様に、HTML文書にRubyコードを埋め込むためによく使用される。eRubyのテンプレートシステムは、Rubyコードとプレーンテキストを組み合わせてフロー制御と変数置換を提供し、組み合わせたコードの保守を容易にする。[1]
Ruby on RailsのViewモジュールは、ブラウザにレスポンスや出力を表示する役割を担っています。最も単純な形式では、ビューは静的コンテンツを含むHTMLコードの一部です。ほとんどのアプリケーションでは、静的コンテンツだけでは不十分です。多くの Ruby on Rails アプリケーションでは、コントローラ(アクション メソッド) によって作成された動的コンテンツをビューに表示する必要があります。これは、Embedded Ruby を使用して動的コンテンツを含むテンプレートを生成することで可能になります。Embedded Ruby を使用すると、Ruby コードをビュー ドキュメントに埋め込むことができます。このコードは、実行時にコードの実行によって得られた適切な値に置き換えられます。ただし、ビュー ドキュメントにコードを埋め込む機能があると、MVC フレームに存在する明確な分離が失われるリスクがあります。したがって、アプリケーションのモデル、ビュー、コントローラ モジュール間で責任が明確に分離されていることを確認するのは開発者の責任です。 [2]
使用法
<%eRuby では、Ruby コードをと の%> 区切り文字のペアで埋め込むことができます。埋め込まれたコード ブロックは、その場で評価されます (評価結果に置き換えられます)。Web ページの作成以外にも、eRuby はXML ドキュメント、RSSフィード、その他の構造化テキスト ファイルの作成にも使用できます。eRuby は、テンプレートに基づいて静的ファイルを動的に生成します。eRuby のこれらの機能は、ERB ライブラリにあります。
ERB テンプレートで使用されるさまざまな種類のタグ マーカーは次のとおりです。
- 表現タグ
- 実行タグ
- コメントタグ[3]
表現タグ
<%= %> : これは、タグが式を囲んでいることを示します。このようなタグは、開始タグ区切り文字で始まり、等号記号が続き、終了タグ区切り文字で終わります。テンプレートのレンダリング中に、このコード部分はコードの結果に置き換えられます。評価された結果が文字列でない場合は、レンダリングされる前に文字列に変換されます。例:
require 'erb' x = 500 template = ERB . new ( "x の値は: <%= x %>" ) puts template . result ( binding )
結果のテキストは次のようになります。xの値は500です[1]
実行タグ
<% %>: このようなタグで囲まれたコードはスクリプトレット と呼ばれます。このようなタグ内のコードが実行され、その結果がスクリプトレットの代わりに置き換えられます。このようなタグには、機能ブロックの終了を示す対応するタグが必要です。例: [4]<% end %>
< ul >
<% 4 .回実行%>
< li >リスト項目</ li >
<%終了%> </ ul >
上記の例では、テキスト リスト項目が 4 回印刷されます。スクリプトレットはそれ自体ではテキストを生成せず、囲まれたステートメントを複数回実行するだけです。上記のコードの出力:
- リスト項目
- リスト項目
- リスト項目
- リスト項目
コメントタグ
<%# %> : コメントタグの内容は出力には表示されません。このようなタグは開始タグ区切り文字で始まり、ハッシュ記号が続き、終了タグ区切り文字で終わります。コメントタグの例を以下に示します: [5]
<%# ルビーコード %>
これは Ruby のコメントと同じです。# の後のすべての Ruby コードは無視され、何も生成されません。
その他のタグ
eRuby で一般的なその他の機能は、 を使用した文字列置換など、Ruby でも単純に一般的であり、これはPerlやPHP#{string_name}などの言語でも同様です。
eRuby の改行は、終了タグの区切り文字の先頭にハイフンを追加することで抑制できます。例:
<% 2 .回実行-%> <%= @name %> <%終了-%>
上記のコードの出力では、nameの値が同じ行に2回印刷されます。[1] [3]
実装
eRuby には次のようないくつかの実装があります。
- エルビー
- エルビス
- 残り火
エルブ
erbは、純粋にRubyプログラミング言語で書かれたeRubyの実装であり、Ruby標準ライブラリに含まれています。[2]
ERB オブジェクトを使用して記述されたコードを実行することで、テンプレートを生成できます。簡単な例を以下に示します。
require 'erb' x = 400 simple_template = "x の値は: <%= x %> です。" renderer = ERB . new ( simple_template ) puts output = renderer . result ( binding )
結果は次のようになります: xの値は400です
ERB オブジェクトを使用しない以下のコードを使用しても同じことが実現できます。
x = 400 string = "xの値は: #{ x } "文字列をputs
上記のコード スニペットは両方とも同じ出力を生成します。しかし、最初のコード スニペットの 2 行目と 3 行目を入れ替え、2 番目のコード スニペットの 1 行目と 2 行目を入れ替えるとどうなるでしょうか。最初のスニペットは、次に示すコードに変わります。
require 'erb' simple_template = " xの値は: < %= x %> です。" x = 400 renderer = ERB.new ( simple_template ) puts output = renderer.result ( binding )
これでも同じ出力が生成されます。つまり、x の値は 400 です。
2 番目のコード スニペットは以下のコードに変更されます。
文字列= "xの値は: #{ x } " x = 400文字列を置きます
上記のコードは実行されません。これは、1 行目では実行時に x の値がわからないためです。したがって、ERB オブジェクトを使用する主な理由は、特定の時点では存在しない可能性のある変数とメソッドをバインドすることによって、事前にテンプレートを記述することです。テンプレートは、ERB オブジェクトでresultが呼び出されたときにのみ処理されます。オブジェクトのインスタンス メソッドとインスタンス変数にアクセスするために、ERB はバインディングオブジェクトを使用します。オブジェクトの変数とメソッドへのアクセスは、各 Ruby クラスに存在するプライベートバインディングオブジェクトによって提供されます。クラスのメソッド内でメソッドと変数にアクセスするのは簡単です。ただし、別のクラスの変数にアクセスするには、そのクラスはパブリック メソッドを介してバインディング オブジェクトを公開する必要があります。例を以下に示します。[2] [4]
class ERBExample attr_accessor :variable1 # クラス変数にアクセスするためにbindを使用するdef render () renderer . result ( binding ) end
def初期化(変数1 ) @変数1 =変数1終了
# プライベートbinding()メソッドを公開します。
def get_binding binding () end end
example = ERBExample.new ( variable1 ) renderer = ERB.new ( template ) puts output = renderer.result ( example.get_binding )
上記の例からわかるように、 ERBExample クラスのバインディングオブジェクトを公開しています。さらに、バインディングオブジェクトを使用して、クラスのメソッドの 1 つ内でクラスの変数とメソッドにアクセスしています。
ERB の new() メソッド
ERB オブジェクトのnewメソッドには、さらに 2 つのパラメータがあります。2 番目のパラメータは、安全レベルを指定します。2 番目のパラメータに数値 (最大値 = 4) を指定すると、テンプレートを別のスレッドで実行できます。数値によって安全レベルが決まります。最大の分離レベルでは、バインディング オブジェクトが信頼済みとしてマークされていない限り、ERB はそれを使用できません。3 番目のパラメータは、オプションの修飾子を指定します。これらは、出力への改行の追加を制御するために使用できます。たとえば、ERB がタグの終了後に改行を出力しないようにするには、次に示すように ERB オブジェクトを作成します[3] [4]
レンダラー= ERB . new (テンプレート, 3 , '>' )
3 番目のパラメータのみを指定し、2 番目のパラメータを無視するには、2 番目のパラメータの入力として 0 を使用します。
ERB には、テンプレートをレンダリングするために使用できる他の多くのメソッドが公開されています。ERB オブジェクトによって公開される API の完全なリストについては、リファレンス セクションにある ERB ドキュメントを参照してください。
コマンドラインからERBを実行する
前のセクションですでに説明したように、erb はテンプレートを生成するために使用されます。これは、Web ページやその他のテキスト ファイルを生成するためによく使用されます。通常、erb を使用して出力を目的のファイルにプッシュする必要があります。これを実現するには、コマンドラインで提供されているリダイレクト機能を使用して、出力を標準出力に印刷するのではなく、ファイルにリダイレクトします。[3]
erb サンプル1.erb.txt > my_view.html.erb
上記の例では、出力はmy_view.html.erbファイルにリダイレクトされます。
サードパーティのライブラリをリンクするには、-r オプションを使用してライブラリ名を指定します。この機能を覚えておくには、-r オプションと同じ機能を実行する Ruby キーワードrequire を覚えておくとよいでしょう。以下の例では、IPAddr ライブラリを使用しています。
erb -r IPAddr sample1.txt.erb > my_view.html.erb
前のセクションで安全レベルについて述べたように、-Sオプションを使用してコマンドライン引数として安全レベルを指定することができます[3]
erb -S 4 sample1.erb.txt > my_view.html.erb
エルビス
erubis は、 Ruby とJavaで実装された eRuby の実装です。ホームページによると、eRuby や ERb よりも高速に実行され、有効なXMLを可能にする代替タグなど、いくつかの便利なオプションがあります。
残り火
ember は、Linux用の eRuby の純粋な Ruby 実装です。eRuby テンプレートのデバッグが可能になり、テンプレートの構成性が向上し、強力な短縮形の eRuby ディレクティブが提供されます。
異なる実装タグの比較
以下の表は、上記の各実装で利用可能なタグを比較したものです[4] [6] [7]
参照
- ルビー
- Phusion パッセンジャー( mod_rails )
- ハムル
- ドキュメント
- マルカビー
参考文献
- ^ abc Brown, Gregory (2009). Ruby ベストプラクティス. O'Reilly. pp. 279–281. ISBN 978-0596523008。
- ^ abc S., Ruby; D., Thomas; Hansson D, Heinemeier (2011).アジャイル Web 開発 with Rails . The Pragmatic Programmers. p. 35. ISBN 978-1-934356-54-8。
- ^ abcde Ellis, Stuart (2016 年 7 月 1 日). 「ERB テンプレート入門」 . 2016 年9 月 12 日閲覧。
- ^ abcd "ERB". 2015年2月23日. 2016年9月12日閲覧。
- ^ 「ERB – Ruby テンプレート」 2016年. 2016年9月12日閲覧。
- ^ “ember(1)” 2011年6月29日. 2016年9月12日閲覧。
- ^ “Erubis”. 2011年. 2017年3月27日時点のオリジナルよりアーカイブ。2016年9月12日閲覧。
外部リンク
- ERB ライブラリ
- 「Ruby と Web」、『The Pragmatic Programmer's Guide』の 1 章
- 「web-mode.el」、eRuby テンプレートを編集するための emacs メジャー モード
- ERB – Ruby テンプレート
- erb ドキュメント[永久リンク切れ ]
- Ruby標準ライブラリ
- erubis ドキュメント 2017-03-27 にWayback Machineでアーカイブされました
- エンバードキュメント
