##まとめと感想
- 初日で平日にも関わらず,結構な入り具合
- Rails 3 は劇的ビフォア・アフター
- ただ構造はよくなる予感
- 大場さん@万葉社長のプレゼンの前半にのろけがあった模様?
- Github が小数で運用されているらしいのが,凄いことだと言うことと同時に,やればできるんだなぁと思いました.
##開会の言葉
- 高橋さんによる開会の言葉
- 4回目
- 3日間
- 3セッション同時並行
- スポンサーのご紹介
- 中継をどこかでやるらしい
- 中会議場,特別会議室などには電源がある
##Using Git and GitHub to Develope One Millon Times Faster
- Scott Chacon from github.com
- http://git-scm.com/ の人
- Pro git http://progit.org/
###What is git
- Snapshot, not patch
- branche is pointer to a commit.
- merging -> create a new commit which parent is default and experimental
- 3 hot way(?)
- Save individual time
- No network needed
- frictionless context switching <- branching
- non-linear development
- create new branches, switching between branches and development
- branching as a patch queue
- ブランチを作ることでパッチを作成できる.キューっぽく
- fork queue on github. queue!
- git rebase/format-path/am
- git rebase -> make patches
- commit 間の patch をスタックして,rebase 先の commit に適用する感じ
- git rebase –onto master server
- branch of branch の時に,親の親に rebase できないのを,onto で指定する感じ
- squash
- commit message を1つにまとめる
- Save team time
- integration manager をおいて管理する
- dictator/l…
###Github
- Grit
- Jekyll
- 4人の会社
- なぜ github を作ったのか
- git の hosting は面倒だから
- git の Windows client は?
- Git Extensions
- TortaiseGit
- EGit for Eclipse
- git submodule をもっと有効に使うにはどうすればいいか?
- 「subtree merging 40 lines of Rake」をググれ
- progit.org で1章丸ごと submodule について書いている
- いつ merge いつ rebase
- 自分で作業している場合は rebase ,外から来たのは merge
##Pragmatic Patterns of Ruby on Rails
- 大場寧子さん@万葉
- Akasaka.rb
- 飴,とギャルゲーがあるらしい
- iCarta
- 百人一首のトレーニングソフト
###Personal Message
- Ruby でエンタープライズもいけるんじゃない?
###conding patterns with RoR
- 実装パターン
- ターゲット
- large and complicated
- team building
- Problems of large applications
- coding style
- coding quality
- メンテしにくくなる
- いいコードを書く必要がある
- いい設計,読みやすい,わかりやすい,間違いにすぐ気づく
- そこでパターン
- 共通パターンを作る
- 控えめに DSL を使う
- このプレゼンで触れないこと
- パフォーマンスの追求
- ActiveRecord
- OOP で書ける
- 複雑さに耐えられる
- pragmatic
- RoR の中核
- AR 中心の話に
- 基本的に RESTful な事例
- 実例紹介#1
- 権限のあるデータを表示(show permitted data)
- パターン#1
- 普通に検索する
- find_by_id_and_user_id
- written_by(user_id).find(:id)
- named_scope
- これらは条件を忘れても気づきにくい
- オブジェクト起点で検索
- current_user.notes.find(:id)
- 文脈でわかる
- Filter で書く
- controller の filter で書く
- @group = … を before_filter で処理しておく
- conding style に自然な強制力が働く
- ちゃんと名前をつけることで,わかりやすくできる
- 実例紹介#2
- 複雑なビジネスロジック
- ビジネスロジックはモデルに書きたい
- テスト,再利用しやすい
- コードが分散せずに,読みやすい
- 集め方が問題
- MVC を壊すのはダメ
- controller から model へ method の移し方を紹介
- パラメータによる分岐ロジック
- controller に処理を書きがち
- 制御条件をモデルの属性に
- params の構造も変える
- あとは
- 付随する他モデルへの処理の委譲
- モデルの callback に移す
- 自律的なモデルができる
###実装パターンの見いだし方
- Rails において自然であるように考える
- OOP
- 「誰が」「何を」すべきかを考える
- テーブル(database tables)で決めない
- 原則に従う
- DRY
- CoC
- RESTful
- Rails では RESTful から逃げない方がいい
- リソース1つに1つのコントローラー
- URL 設計から考えるとよろしい感じ
Rails プログラマにとって標準的な coding style になる
- 誰でも読める
Enterprise とは
- 10人ぐらい
モデルが肥大化するのでは?
- module に切り分けていたりしている
RESTful で batch や非同期処理は?
- 複数リソースへの PUT として考えている
##「エンタープライズRails」に学ぶ企業ユーザのためのRailsアーキテクチャ
- 高井さん@Akasaka.rb
- 「私がエンタープライズRuby」「Ruby会議のエンタープライズ枠は全て私のもの」
###前振り
- 「人材は人月で買ってこれるから重要じゃない」@高井
- 企業システムにとって一番重要なのは「データ」
- DOA(Data Oriented Approach)
- プロセスよりもデータの方が安定的
- 業務フローは変更されるが,データは変更されない
- データに対する要求として体系化できる
- データモデルによって業務ルールを分析できる
- Rails は DOA に類似している
- RDBMS 前提
- モデルを中心にした Framework
- CRUD 分析を重視する
- 相違点もある
- データモデルを重視していない
- 業務ルールはアプリケーション層のみで実装
- 背景にはリソース指向がある
- DOA - Rails = 「エンタープライズ Rails」
###データベースの制約を活用する
- データ保護はアプリケーション層のみでは不十分
- アプリケーションやフレームワークは変化する
- アプリケーションにはバグがある
- DBは複数のアプリケーションから利用される
- データベース層でもRDBMSレベルで保護すべき
- NOT NULL制約 / CHECK制約
- データベースのユニットテスト
- validation を skip して SQL Error が raise するかどうかを検証する
- 参照制約
- 外部キー制約
###複合主キーを導入する
- has_many だと無駄な JOIN が発生してしまう
- 望ましいのは,Employees に company_id を入れた感じ
- ただしこれだとアプリケーションレベルでの制約しかなくなる
- そこで Departments に複合主キーを作る
- Employees にかならず Companies/Departments の組み合わせのキーが入るので,存在しない Companies/Departments の組み合わせを取得することができない
- Rails 側で導入するには
- # gem install composite_primary_key
- 中間テーブルを複合主キー化する
- 子テーブルに親の親の主キーと親の主キーへの外部参照を設定する
###ビューでシンプルにする
- 複数のテーブルからの,複雑な検索条件を問い合わせたい
- ビューを作って,モデルも作れば参照できる
- view-backed model と言うらしい
- ビューはサブクエリみたいに使える
###Q&A
- migration では制約はどう書く?
- execute で書く
- エンタープライジーな人は migration なんて使わない
- ビューは使えるのか?
- view-backed model は使える
- パフォーマンスの問題はある
- 使いどころを見極める
- composite_primary_key は最新の Rails で使えるの?
- forum 見ようね
- AR の代替は書いてる?AR は好き?
- 代替は書いてない
- AR は好きというか,流されてる?
- memcached とかどう?
- materialized view の涙ぐましい努力を見ようね
- (キャッシュのレベルが違う?)
- 複合主キーの良い例は書いてる?
- 複雑な例が書いてある
- Web の人に呼んで欲しい
- 原書 PDF で読もうかな
##より良きruby市民のために Rails 3
- Better Ruby Citizen
- @wycats Yefuda Katz from EngineYard
- merb + Rails -> Rails 3
- EngineYard
- Solo
- Flex
- Rails 3
- Rack
- JSON
- Erubis
- More love
- Rails 3 have special API
- for DataMapper
- for jQuery
- for CouchRest
- ActiveModel
- = ActiveRecord - DatabaseAdapter
- ex)
- include ActiveModel::Validations
- use valdations like ActiveRecord
- Components
- API
- extend ActiveModel::Naming
- person_path(@person) works fine in controllers
- form_for/error_messages works fine too in views
- Decoupled
- ActiveRecord + ActionController + ActionView = Rails 2.3
- three classes are mutually combined
- Rails 3 = ActionController + ActionView + ActiveModel
- ActionPack
- ActionContoller::Http
- Metal in Rails 2.3?
- Simple
- Kaigi.action(:index) returns ActionController::Http object.
- Callbacks
- include AbstractController::Callbakcs
- uses callbacks like ActionController::Base
- Render
- include ActionController::Renderer
- uses render :template => “…” like ActionController::Base
- Layouts
- include ActionController::Layouts
- uses layout “…” like ActionController::Base
- ActionContoller::Http
- ActiveSupport
- require ‘active_support/all’ or require ‘actiove_support/ruby/shim’ <- Ruby 1.9.1
- Less Pollution
- Cherry Pick
- Manage Modules
- ActiveSupport::Concern
- included?
- Isolation Testing
- include ActiveSupport:::Testing::Isolation
- each test processes run in different enveioments
###Summary
- 劇的な変更があるが,これにあわせてシステムを書き換えるのはかなり大変そう
- まあ一部の機能しか使わなければ,特に問題にはならないのかも知れないが
###Q&A
- Plugin はどうかわる?
- API を定義するからこれで最後の変更になる
- こっからがんばってくれ
##Lightning Talks
- あとで写真アップ予定
- KeyValue Store な話が複数あったのは,時代の流れだろうか.
- レガシー = P** な話が一番おもしろかった
##懇親会
- キーサインパーティー
- 人生初のキーサイン.まだ署名してかぎ送ってないけど....
- プチ jpmobile 会議
- @darashi さんと初対面.Rails 2.3.2 対応はマージしちゃいましょう!と言う話になりました.
- 来れなかった方ごめんなさい><
- matz とかいろんなひとのサイン
- 人数でしたか.@ngtyk さんが一位だったらしい