Perlがくしゅう帳(Rubyも)

プログラミングの勉強会の参加記録や学んだことなど。 twitter ID : @tomcha_で活動しています。 最近は主にPerl関連の勉強会やコミュニティに参加しています。移転前のブログはこちら->http://ruby.doorblog.jp/

webアプリエンジニア養成読本のRubyのサンプルコードを、hamlのテンプレートで書いてみた

webアプリエンジニア養成読本のブックマークアプリ「shiori」の制作にあたり、本のサンプルコードでは'erb'というテンプレートエンジン(よしなにhtmlを書いてくれるプログラム)を使っていたのですが、個人的に気に入っている'haml'で書いてみました。

hamlの基本の使い方は結構日本語ページがあったのですが、初心者にも優しいちょっと応用的な書き方がまとまったwebページも見当たらなかったので、githubでいろんな人が書いたhamlのコードを読んで色々試した事をまとめてみます。

  • 共通部分(ヘッダー等)のまとめ方

  • => 共通部分はlayout.hamlのファイル名で記述。個別のコンテンツが挿入される箇所は=yieldと記述。

  • Rubyのコードを実行する場所(変数をイテレータで回す等)は、-で始める。

  • =>-@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

  • undefined method `[]' for nil:NilClass (NoMethodError)は、メソッドの未定義よりも変数の初期化ミス等の原因も疑う。(変数のtypoミスなど)

webアプリエンジニア読本、まだ第2章のwebアプリケーション実践入門の箇所までしか読み進めてませんが、この本は1から順序立てて解説してくれているので、初心者にはとてもおすすめの本です。

perlruby等、どの言語でもそうですが、簡単なwafの使い方+"Hello,world"をブラウザで表示させるところまでを卒業した次のステップに丁度良いです。コードの分け方、ディレクトリ構成、css等の静的ファイルの配置など、意外と"Hello,world"の次のステップを解説してくれる本やサイトは少ないので、脱はじめの一歩の方におすすめです。

Rubyだけでなく、PHPPerlのサンプルコードも載ってますので、いろんな言語の使い手さんにもお勧めです。

Webアプリエンジニア養成読本[しくみ、開発、環境構築・運用…全体像を最新知識で最初から! ] (Software Design plus)

Webアプリエンジニア養成読本[しくみ、開発、環境構築・運用…全体像を最新知識で最初から! ] (Software Design plus)