年の瀬も近づく中,忘年会の前座Rails勉強会@東京に行ってきました.今回は50人近い参加者と,かなり大規模になりました.盛り上がってる感があるのはいいことですよね.
- 今回はhttp://www.cuon.co.jp/さん提供の会場にて開催
##セッションネタ
- 前半
- Scaffold の半歩先へ
- Cucumber をゆっくりしゃべる
- 後半
- 優しい Merb の育て方
- 『実践 Rails』を愛でる
##Cucumber がアツい and Webrat がスゴい
- Cucumber
- プレーンテキストでかかれた命令(DSL)をを実行するフレームワーク
- feature がテストの大きな枠組みで,scenario が各テストに対応
- 自然言語プログラミングじゃなくて,正規表現使いまくり
- 後方参照(\d+ など)でパラメータを利用できる
- Webrat(on github at 2008/12/21)
- Web アプリを外から操作する DSL セット
- <input /> にはラベルでアクセスできる
- リンクもテキストでアクセスできる
- あとはアプリケーション独自の step を用意する
- モデル・データの準備など
- まとめ
- 日本人が見てわかる文章でテストが実行されるので,お客さんにわかるテキストになる
- 受け入れテスト結果がわかりやすくなる?
RAQ(Rarely Asked Question)
- header(“ACCEPT_LANGUAGE”, “ja”) などとヘッダーを追加できる
- Post -> Redirect のときには,Integration テストではヘッダーが追加されないので,Post -> Redirect -> Reload しなくてはヘッダーが有効にならない(Rails 2.1.2)
- OpenID 認証のテストするときは,
- 自分でログインページにポストする
- リダイレクト先を取ってきて,そこに Net::HTTP.start で接続する
- 結果は Nokogiri で解析してボタンをクリックしたことにする
- レスポンスから認証結果を判断する
- OpenID Fake Server(http://github.com/kakutani/openid_fake_server/tree/master)を使ってる
- rcov 連携することで,外からのアクセスでたどるようなページでエラーがないことも確認できそう
- RSpec と Cucumber を組み合わせて
- RSpec でビジネスロジックや API の検証を行い,
- Cucumber でページ遷移などのテストをする
- Step ファイルの分割方針は?
- features/*/.rb は全部読み込む
- 一人でプログラムする場合の利点は?
- Rails に慣れてきて,Model にロジックを押し込められるようになったので,Model のテストは RSpec でやって,Controller のテストを RSpec でやるのもなんかなーということで,Cucumber でやってるらしい.
- 有用性と英語じゃなくて日本語で書く意義について論争展開
- Locale に依存した場合は?
- 日本語か英語でロジックとして共通している部分をテストして,言語に依存する部分について別のテストを用意するのがいいのではないか
##Merb 的雑談 + locale と i18n + Rack と Metal
- インストール
- gem install merb
- アプリケーション作成
- merb-gen app hello
- script/console
- merb -i
- mi
- alias !!
- Merb
- module
- Merb.root
- RAILS_ROOT
- RSpec がデフォルト
% merb gen model item
- モデルは普通の class
- DataMapper を使うときは include DataMapper::Resource
- property :id, Serial
- t.integer :id な感じ
- モデルのクラスに型や何を O/R Mapper として使うかを指定できる
- :key => true
- 主キー指定
- db:automigration
- rake db:automigration
- モデルのテーブル定義をやり直す -> DROP and CREATE
- db:autoupgrade
- 自動的に変更したカラムの差異を適用してくれる
- Extlib
- Rails の ActiveSupport
- Dictionary
- Ordered Hash
- dirty tracking 有り
- Pref.all :name.like => “%to%”
- :conditions => [“name like ?”, “%to%”]
- Pref.all の戻り値は DataMapper::Collection
- LazyArray を継承している
- 必要になるまで Query を発行しない
- Pref.all.last が 1 クエリーで実行できる
- LazyLoading
- クラスメソッドを作れば,named_scope のようなことができる
- Pref.all.active.tokyo など
def self.active
all(:deleted => false)
end
- 関連
- has n, :items
- has_many :items
- has 2..4, :items なんてのもできる
- callbacks
- Extlib::Hook から
- before / after
- validation
- validates_length :name, :is => 3 などとする
- obj.save!
- validation を skip する
- ActsAsParanoid的な機能もある
- Repository
- 複数データベース対応
- 親と子を別のデータベースに保存することも可能
- 関連も勝手に見てくれる
- slice
- 小さなMVCのセット
- partial view のセットとかのイメージ?
- cheat コマンド
- gem install cheat
- Wikiにある情報をネット越しに取得して表示するコマンド
##ふりかえり
Keep
- Cuon さん会場提供ありがとうございます
- 入り口が開いてて勝手に入れたのがよかった(電話せずにすんだ)
- 場所的にも中間点
- 電源の用意ありがとうございます
- 事前にセッションが出てた
- 初級者向けセッションがあったことがよかった
- Rails 以外のセッションもあったのがよかった
- 参加者が会場の設営ヘルプ
Problem
- 初めてのところなので,道に迷った
- e-mobile の共有設定のページがリンク切れ
- 名札
- 自己紹介
- ust しなかった
Try
- ひとことは”よろしく~”禁止
- ひとこと -> お題
- ust担当を決める?
- Debian 勉強会に乗り込む
- WikiにIRCチャンネルを記載