2月20日の技術勉強会
2月20日に行われました技術発表会の内容を撮影した動画ファイルを公開いたしました。内容は以下のとおりです。
テーマ | Ruby on Rails |
---|---|
発表者 | d:id:secondlife |
時間 | 46:38 |
ファイルサイズ | 270,470,182Bytes |
以下よりダウンロードしてご覧ください。
http://www.hatena.ne.jp/sound/tech/060220hatenatech.wmv (※現在はご覧いただけません。)
Rails って?
37SignalsのDHHが作ったRubyのMVCフレームワーク。
Rails の構成ライブラリ
- ActionPack
- Controllerとviewの結びつけ、Dispatcher などなど
- ActiveRecord
- ActiveRecordパターンのO/R マッパ
- ActiveSupport
- ActionWebService
- Webサービスを簡単に作るもの
- ActionMailer
- メールを簡単に送るよ
ActionPack
enviroment で環境の切り分け
- test
- development
- production
DB接続周り
ActiveRecordのオブジェクトで接続したり
requireするライブラリを自動ロード
Filter
- before
- after
簡単にフィルタをかけれる。またFilterオブジェクトを渡すことも可能
plugin
Layout
外枠templateの共有が楽
Routes
params
CGIのqueryみたいなもの
request
@request.env['HTTP_USER_AGENT'] @request.post?
response
@response.body = 'foobar' @response.header['content-type'] = 'text/html' header['content-type'] # text/html
render
templateにレンダリングさせる処理。通常透過的に呼ばれる。
render :text => 'texttest', :layout => 'false' render :template => '/foo/bar/baz' render :nothing => 'true'
ActionPack
controllerとviewの結びつけ
いちばんべんり
controllerのインスタンス変数をview(デフォルトerb)に渡す。じわじわととても便利。
# controller def index @foo = 'foostr' end #view <%= @foo %>
template周り
- layout
- 部分テンプレート
デフォルトhelperいろいろ
- tag helper
- タグ作る。基本的には使わない
- url helper
- javascript helper
- prototype helper
- javascript周りをrubyで生成。JavaScriptがかければ使わない。
- active record helper
- benchmark helper
- cache helper
- debug helper
その他もろもろ
自作helper
使い周しできそうな処理の外部分離
# helper module HatenaHelper def usericon(name) usericon_prefix(name) + ".gif" end def usericon_small(name) usericon_prefix(name) + "_s.gif" end def usericon_prefix(name) "http://www.hatena.ne.jp/users/#{name[0, 2]}/#{name}/profile" end # view <%= usericon('secondlife') %>
ActiveRecord
ActiveRecordパターンのO/Rマッパ。拡張しまくってるので一般的に云われるActiveRecordパターンなのはコアの部分だけ。
DBIxっぽい?
シンプル
User.find 1234 User.find_by_name 'secondlife' User.find_by_sql('select * from users where name = ?', ['secondlife']) User.find(:all,:condition => ['name like "?", 'second*'], :limit => 50) Usef.find([1..50]).each do |user| user.money += 100 user.money_add_flag = true user.save end
validate
class User < ActiveRecord::Base validates_length_of :first_name, :maximum => 10 validates_inclusion_of :age, :in=>0..99
user = User.new :name => 'aaaaaaaaaaaaaaaaaaaaaaaa' user.valid? user.save
observer
- (-) save
- (-) valid?
- (1) before_validation
- (2) before_validation_on_create
- (-) validate
- (-) validate_on_create
- (4) after_validation
- (5) after_validation_on_create
- (6) before_save
- (7) before_create
- (-) create
- (8) after_create
- (9) after_save
class User < ActiveRecord::Base ~snip def before_save self.passwd = Digest::SHA1.hexdigest(self.passwd) end def after_save logger.info "#{self.id} complete"
ActionWebService
WebServiceを簡単に作れるよ。
ActionMailer
メールを簡単に送れるよ。日本語問題(UTF-8で送る)がデフォルトだと発生するよ。
Railsの強み
- Ruby
- イイ!
- 楽
- 何をやるにも楽!
- やたらユーザがいる
- 活発が盛ん
- すごい勢いでcommit
- prototype.js 勢が
- prototype.js 使いにはうれしい
- 開発当初のコストが低い
- 気楽に作れる
- 周りのdeployツールなども充実
- API調べるのが楽
- Berryz工房
- Atok2006で「べりーずこうぼう」で変換できた!