【Ruby】HTMLに埋め込んでみる&メソッドの返り値は何?

2018年2月28日

HTMLにRubyを埋め込むには、WordPressと似ているなと思いました。

<%~~~%>

のように<%と%>で囲った部分にRubyのコードを記述することができる。

Rubyの変数を表示するには<%=と%>で囲ってあげればよい。実行の場合はイコールが要らなくて、表示するにはイコールが必要、と覚えておこう。

ERBというRubyのライブラリを使うことで簡単に埋め込みができる。

まずはtest.rbという空のファイルを作成し、

require 'erb'

としてerbを読み込んでおく必要がある。

def web_page
  <<-HOGE
<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="UTF-8">
    <title>タイトル</title>
  </head>
  <body>
    <% aiueo='晴れ' %>
    <p>今日は<%= aiueo %></p>
  </body>
</html>
  HOGE
end

このようにメソッドを定義しておいて、
<<- HOGE

HOGE

の間に改行を含むHTML文を入れていく。HOGEの文字はなんでも良い。

この<<- HOGE で囲った部分はヒアドキュメントと呼ぶ。

<% aiueo='晴れ' %>

の行で変数aiueoに晴れという文字列を代入し、

<%= aiueo %>

の部分で、aiueo変数を表示している。

代入と表示の仕方はこれで覚えることが出来た。

引き続き上で定義したweb_pageというメソッドを叩いてみよう。

puts web_page

とやってターミナル上でruby test.rb で実行してみると以下のような表示が出てくれる。

<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="UTF-8">
    <title>タイトル</title>
  </head>
  <body>
    <% aiueo='晴れ' %>
    <p>今日は<%= aiueo %></p>
  </body>
</html>

これらがそのまま表示される。メソッドを実行すると最後のオブジェクトがreturnされるのがRubyの仕様だ。

つまり最後のオブジェクトというのはヒアドキュメントの事で、つまり文字列のこと。

で、このERB形式のHTMLの文字列を引数にERBオブジェクトを生成する。

そのためにはweb_pageのメソッドを渡してあげるだけでよく、

erb = ERB.new(web_page)

これで文字列が渡るのでOK。

erbインスタンスのresultメソッドを叩いてみると。

result = erb.result

これでERBオブジェクト内のRubyが実行されて、その結果が埋め込まれて返り値となる。

puts result

で表示してあげれば、

<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="UTF-8">
    <title>タイトル</title>
  </head>
  <body>
    
    <p>今日は晴れ</p>
  </body>
</html>

という結果が得られる。

ここまではRubyファイルを作成して、ターミナル上でのみ実行結果を確認している。

これからは実際にWEBサーバーと連携して、Rubyを裏で動かしてブラウザに表示するようなのをやっていきます。