|

2月20日に行われました技術発表会の内容を撮影した動画ファイルを公開いたしました。内容は以下のとおりです。

以下よりダウンロードしてご覧ください。

http://www.hatena.ne.jp/sound/tech/060220hatenatech.wmv (※現在はご覧いただけません。)

37SignalsのDHHが作ったRubyのMVCフレームワーク。

DRY コードの重複は悪

規約 >>>>> 設定 決めごとすればめんどくさい設定の大半は省略できる

言語重要 至高の言語ruby メタプログラミングとかとても簡単に



Rails の構成ライブラリ

ActionPack Controllerとviewの結びつけ、Dispatcher などなど

ActiveRecord ActiveRecordパターンのO/R マッパ

ActiveSupport Rubyの基本のオブジェクトをWebアプリケーションで使いやすいように快適



ActionWebService Webサービスを簡単に作るもの

ActionMailer メールを簡単に送るよ



enviroment で環境の切り分け

test

development

production

DB接続周り

ActiveRecordのオブジェクトで接続したり

requireするライブラリを自動ロード

productionならロードしたら終わり、productionなら毎回ロードしたいのはrequire_dependency

サーバの自動再起動が必要ない

Filter

before

after

簡単にフィルタをかけれる。またFilterオブジェクトを渡すことも可能

plugin

プラグインで拡張が楽

Rubyは比較的何でもできちゃうので諸刃の剣

Layout

外枠templateの共有が楽

URLからコントローラ・アクションを決めパラメータを渡す 正規表現でのマッチ



params

CGIのqueryみたいなもの

request

リクエストのオブジェクト

@request.env['HTTP_USER_AGENT'] @request.post?

レスポンスオブジェクト

render

templateにレンダリングさせる処理。通常透過的に呼ばれる。

render :text => 'texttest', :layout => 'false' render :template => '/foo/bar/baz' render :nothing => 'true'

controllerとviewの結びつけ

いちばんべんり

controllerのインスタンス変数をview(デフォルトerb)に渡す。じわじわととても便利。

# controller def index @foo = 'foostr' end #view <%= @foo %>

template周り

layout

部分テンプレート

デフォルトhelperいろいろ

tag helper タグ作る。基本的には使わない

url helper routesとの兼ね合いでviewでリンクを張るときには必須

javascript helper

prototype helper javascript周りをrubyで生成。JavaScriptがかければ使わない。

active record helper active recordのvalidateでひっかかったエラーメッセージの表示とか

benchmark helper テンプレート上でベンチマーク

cache helper テンプレート部分キャッシュ

debug helper YAMLでオブジェクトをdump <%= debug @obj %>



その他もろもろ

自作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パターンの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

(-) 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"

もちろんObserverオブジェクトの登録も

WebServiceを簡単に作れるよ。

メールを簡単に送れるよ。日本語問題(UTF-8で送る)がデフォルトだと発生するよ。

Railsの強み

Ruby イイ！

楽 何をやるにも楽！

やたらユーザがいる generator 周り (コンポーネント)が充実 Web上に情報が充実

活発が盛ん すごい勢いでcommit

prototype.js 勢が prototype.js 使いにはうれしい

開発当初のコストが低い 気楽に作れる

周りのdeployツールなども充実 switchtower連携

API調べるのが楽 http://api.rails2u.com/



Railsの弱み