eRuby

eRuby
その他の名前エルビー
リポジトリgithub.com / ruby /erb
書かれたルビー
タイプテンプレートエンジン
ライセンスBSD 2条項ライセンス

Embedded Ruby ( ERBとも略される)は、テキスト文書にRubyを埋め込むテンプレートシステムです。ASPやJSPPHPなどのサーバーサイドスクリプト言語と同様に、HTML文書にRubyコードを埋め込む際によく使用されます。eRubyのテンプレートシステムは、Rubyコードとプレーンテキストを組み合わせることでフロー制御と変数置換を提供し組み合わせたコードの保守性を向上させます。[ 1 ]

Ruby on RailsのViewモジュールは、レスポンスや出力をブラウザに表示する役割を担います。最もシンプルな形では、Viewは静的コンテンツを含むHTMLコードです。しかし、ほとんどのアプリケーションでは、静的コンテンツだけでは不十分です。多くのRuby on Railsアプリケーションでは、コントローラ(アクションメソッド)によって作成された動的コンテンツをViewに表示する必要があります。これは、Embedded Rubyを使用して動的コンテンツを含むテンプレートを生成することで可能になります。Embedded Rubyを使用すると、RubyコードをViewドキュメントに埋め込むことができます。このコードは、実行時にコードの実行結果の適切な値に置き換えられます。しかし、Viewドキュメントにコードを埋め込む機能は、MVCフレームに存在する明確な分離を損なうリスクがあります。開発者は、アプリケーション内のモデル、ビュー、コントローラモジュール間で明確な責任分担を確保する責任があります。 [ 2 ]

使用法

eRubyでは、Rubyコードを と の区切り文字<%で囲んで埋め込むことができます。埋め込まれたコードブロックは、その場で評価されます(評価結果に置き換えられます)。eRubyは、Webページの作成以外にも、XMLドキュメントRSSフィード、その他の構造化テキストファイルの作成にも使用できます。eRubyは、テンプレートに基づいて静的ファイルを動的に生成します。eRubyのこれらの機能は、ERBライブラリで見つけることができます。 %>

ERB テンプレートで使用されるさまざまな種類のタグ マーカーは次のとおりです。

  1. 表現タグ
  2. 実行タグ
  3. コメントタグ[ 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 でも単純に共通しており、これはPerlPHP#{string_name}などの言語でも同様です。

eRubyでは、終了タグの先頭にハイフンを追加することで改行を抑制できます。例:

<% 2 .実行-%> <%= @name %> <%終了-%>

上記のコードの出力では、nameの値が同じ行に2回出力されます。[ 1 ] [ 3 ]

実装

eRuby には次のようないくつかの実装があります。

  1. エルビー
  2. エルビス
  3. 残り火

エルブ

erbはeRubyの実装であり、純粋にRubyプログラミング言語で書かれており、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つのコードスニペットは同じ出力を生成します。しかし、最初のコードスニペットの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文字列をputs

上記のコードは実行されません。これは、1行目では実行時に x の値がわからないためです。したがって、ERBオブジェクトを使用する主な理由は、特定の時点では存在しない可能性のある変数やメソッドをバインドすることで、事前にテンプレートを記述することです。テンプレートは、 ERBオブジェクトでresultが呼び出されたときにのみ処理されます。オブジェクトのインスタンスメソッドインスタンス変数にアクセスするために、ERBはバインディングオブジェクトを使用します。オブジェクトの変数とメソッドへのアクセスは、各Rubyクラスに存在するプライベートバインディングオブジェクトによって提供されます。クラスのメソッド内ではメソッドと変数にアクセスするのは簡単です。しかし、別のクラスの変数にアクセスするには、そのクラスはパブリックメソッドを介してバインディングオブジェクトを公開する必要があります。以下に例を示します。[ 2 ] [ 4 ]

class ERBExample attr_accessor :variable1 # bindを使用してクラス変数にアクセスするdef render () renderer . result ( binding ) enddef初期化(変数1 ) @変数1 =変数1終了# プライベートbinding()メソッドを公開します。def get_binding binding () end endexample = ERBExample.new ( variable1 ) renderer = ERB.new ( template )出力= renderer.result ( example.get_binding )

上記の例からわかるように、ERBExampleクラスのバインディングオブジェクトを公開しています。さらに、バインディングオブジェクトを使用して、クラスのメソッドの1つから変数やメソッドにアクセスしています。

ERBのnew()メソッド

ERBオブジェクトの新しいメソッドは、さらに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 ]

実装
シンプルな表現タグ<%=%>シンプルな実行タグ<%%>シンプルなコメントタグ<%#%>タグパターンを設定する機能 タグの省略表記 <%~%><%+%><%<><%|>
エルブ
はい はい はい いいえ はい、と表記できます。 <%xy%>%xyいいえ いいえ いいえ いいえ
エルビス
はい はい はい はい、タグパターンを任意のものに変更できます。

例:[% %]など

はい、

タグパターンを変更できるため。

いいえ いいえ いいえ いいえ
残り火
はい はい はい いいえ はい、と表記できます。 <%xy%>%xyタグの内容は eRuby テンプレートとして評価されます。 タグの内容は Ruby コードとして評価され、読み取られ、評価され、レンダリングされる Ruby テンプレート ファイルを指すパスであることが期待されます。 と同じですが、ファイルの内容はそのまま出力にレンダリングされます。 <%+%>囲まれたコードを Ruby コードのブロックとして扱い、必要に応じてdoタグの本体にキーワードを追加します。

参照

参考文献

  1. ^ a b cブラウン、グレゴリー (2009). Rubyベストプラクティス. オライリー. pp.  279–281 . ISBN 978-0596523008
  2. ^ a b c S., Ruby; D., Thomas; Hansson D, Heinemeier (2011).アジャイルWeb開発 with Rails . The Pragmatic Programmers. p. 35. ISBN 978-1-934356-54-8
  3. ^ a b c d e Ellis, Stuart (2016年7月1日). 「ERBテンプレート入門」 . 2016年9月12日閲覧
  4. ^ a b c d「ERB」
  5. ^ 「ERB – Ruby テンプレート」 . 2016年. 2016年9月12日閲覧
  6. ^ "ember(1)" . 2011年6月29日. 2016年9月12日閲覧
  7. ^ “Erubis” . 2011年. 2017年3月27日時点のオリジナルよりアーカイブ2016年9月12日閲覧。