webアプリエンジニア養成読本のRubyのサンプルコードを、hamlのテンプレートで書いてみた
webアプリエンジニア養成読本のブックマークアプリ「shiori」の制作にあたり、本のサンプルコードでは'erb'というテンプレートエンジン(よしなにhtmlを書いてくれるプログラム)を使っていたのですが、個人的に気に入っている'haml'で書いてみました。
hamlの基本の使い方は結構日本語ページがあったのですが、初心者にも優しいちょっと応用的な書き方がまとまったwebページも見当たらなかったので、githubでいろんな人が書いたhamlのコードを読んで色々試した事をまとめてみます。
共通部分(ヘッダー等)のまとめ方
=> 共通部分はlayout.hamlのファイル名で記述。個別のコンテンツが挿入される箇所は=yieldと記述。
=>
-@array.each do |element|
eachで回して取得した値をhtmlの要素として使用する時は(リストやテーブル等)、インデントを1レベル下げる(do〜endの中身はインデントする)
ORマッパで取得したレコードの各値等、変数を使用する時は
"#{element.id}"
。classは%対象タグ.class名で記述できるが、クラス名にスペースを使うもの(bootstrapで定義されているもの)は{:class => 'ク ラ ス 名'}を用いる必要がある。コメント頂いたとおり、単に複数のクラスが指定されているだけでした。- hamlでの記述で、一行全体rubyのコードを埋め込むのではなく、部分的に埋め込む方法がよくわからなかったので、rubyコードの結果を変数に代入する一行を別途設けて対応した。
erbだと
<input value="<%= h session[:crsf]%>" />
hamlだと
%input{value: "#{h session[:crsf]}"}
や%input{value: =h session[:crsf]}
ではエラーとなるので、
-token_value = h session[:crsf]
%input{value: token_value}
とした
その他疑問に思った事、気づいた事、注意点
- register はSinatra::Baseで定義されたメソッド。メソッドがどこで定義されているかは、
- オブジェクト.method(:メソッド名) の .ownerメソッドで調べることが出来る。
参考にしたページ : Ruby においてメソッドがどこで定義されているのかを調べる方法 - vivid memo
webアプリエンジニア読本、まだ第2章のwebアプリケーション実践入門の箇所までしか読み進めてませんが、この本は1から順序立てて解説してくれているので、初心者にはとてもおすすめの本です。
perlやruby等、どの言語でもそうですが、簡単なwafの使い方+"Hello,world"をブラウザで表示させるところまでを卒業した次のステップに丁度良いです。コードの分け方、ディレクトリ構成、css等の静的ファイルの配置など、意外と"Hello,world"の次のステップを解説してくれる本やサイトは少ないので、脱はじめの一歩の方におすすめです。
Rubyだけでなく、PHPやPerlのサンプルコードも載ってますので、いろんな言語の使い手さんにもお勧めです。
Webアプリエンジニア養成読本[しくみ、開発、環境構築・運用…全体像を最新知識で最初から! ] (Software Design plus)
- 作者: 和田裕介,石田絢一(uzulla),すがわらまさのり,斎藤祐一郎
- 出版社/メーカー: 技術評論社
- 発売日: 2014/03/11
- メディア: 大型本
- この商品を含むブログ (4件) を見る