by shigemk2

当面は技術的なことしか書かない

Ruby 2.0 & Rails 4.0 #webcat

f:id:shigemk2:20131116233105g:plain

@a_matsuda
Asakusa.rb 主宰
Forkwell社外取締役

begin

読めば分かるようなことは話しません

本日のお題

2つのメジャーバージョンアップ
Ruby 1.9.3 → 2.0.0
Rails 3.2.9 → 4.0.0
Rake 10.0
RubyGems 2.0
RDoc 4.0
RSpec 3.0

など
空前のメジャーバージョンアップ期

心機一転参入のチャンス
(色々切り替えていかないといけない)

Ruby2.0

(Matz)長年の悲願

絵に描いた餅 燃料 人参 Perl6 (出ないと思われてた)

2003 1.8 その頃は偶数番号が安定版
2007 1.9 開発版(すごく不安定) →1.9.0は開発版 1.9.1が安定版でどうか(1.10.0とかは使いたくない)
2010.8 1.9.2 安定版
2011.10 1.9.3 安定版

2013.2.24 2.0リリース ダッシャアァァァ

2003にMatzがやりたかった2.0
Variable Scopes
Multiple Values
Range in Condition
Method Visibilities
Keyboad Argument (今回実装)
Method Combination (今回実装)
Selector Namespace (今回実装)
Optional Type
など

2.0リリースと20周年を同時にやりたい

1.9.3..2.0.0

1.8..1.9ほど 大きな変更はなく
本当に重い変更(=阿鼻叫喚)は1.9で済ませた

1.9.3との互換性を重視し、1.9.3からスムーズに移行できる 非互換な変更は2.1以降
(変な使い方をしなければおk)

新機能(後述)
パフォーマンス向上 VM GC require(←遅すぎるよ)
デフォルトスクリプトエンコーディング ついにデフォルトUTF-8になりました(たぶんこれが最大の非互換)

パフォーマンス向上

e.g Rails起動が2.0にすると倍近く速くなった →バージョン上げて困ることも少ないので、上げたら幸せになるかもしれない
VM GC require

貢献者
VM @ko1
GC @nari3

マジコメとは何だったのか

ユーザーにとっては必要な段階があった
String が encoding を持つという概念
CSI
internal encoding, external encoding
US-ASCII, ASCII-8BIT, BINARY
mojibake == 死

神展開
encoding なんとなく分かったでしょ?ということでデフォルトUTF-8にしました(成瀬さんすげえ)

M17Nについて詳しく

その他
Refinements
など

Rails 4.0

2004.07 公開
2005.12 1.0
2007.12 2.0
2010.8 3.0
2012-2013 4.0

メジャーバージョンアップに伴う新パラダイム(業界の常識を覆すのばっかり)
1.0 DRY, CoC
2.0 RESTful
3.0 Modularity

4.0 特にない

「新機能はいろいろ」
「新パラダイム」は特にない
基本的には3.2の正常進化形
4.0にしたきっかけは、1.8サポートを終了したから?2.0に引きずられる形で?

バージョン番号なんて飾りです
Railsは絶え間なく変化する1本の線路で、バージョンの区切りに意味はない
なので、新機能を細かくみるより、4.0.0の大きな流れを把握するといいかもしれない

Railsの新バージョン番号戦略
新バージョンで使えなくなる機能はいきなり消さない
1個前のバージョンで deprecation warningを出す
次のバージョンで消す (とはいえ、3.2.9から4.0.0でいきなり消えるものもあるよ)

4.0.0の特徴

最初から安定版を指向
4.0.0が出た瞬間から安心して使える
3.2.xとの互換性を重視

最近の潮流

Modern
Ruby '>=1.9.3'
APIのさらなる洗練
あまり使われていない機能をもりもり外部Gemへ(古いものをどんどん捨てていく)
APIもいろいろあるぜ
PATCH verb (Get Post PutのPutよりもPATCHを使ったほうがいいんじゃない?)
Active Recordがすごい変わってれぅ

RIP
Ruby 1.8 support
vendor/plugins
ActiveResource
AR.find :all
dynamic finders
ActiveRecord::SessionStore
Rack::Cache(Cookpadで問題が発生したやつ)

Speed
パフォーマンスの向上
1.9移行に伴うコードのスリム化(とっても読みやすくなった)
Sprocketsのprecompile
threadsafe(スレッドに注意したアプリを書こうぜ)
AS::Queue (タスクの遅延処理するらしいけど、使うことあるんだろうか)
TurboLinks (DHHが入れた機能で、Ajaxモドキ)

Security
Mass Assingment Security → Strong Parameters
(ロシア人がRailsをクラックした部分を改造してれぅ)

Real-time web
AC::Live(@tenderlove RealtimeSalami)

ActiveRecord
メンテナー1 @tenderlove
メンテナー2 @jonleighton
PostgreSQL

Social coding
2721 peopleがコミッター

南米
@josevalim
@spastorino
コミッターの第3世代が南米からやってきてれぅ

2013にRubyKaigi復ッ活ッ!!するときに@josevalm来るよ

Ruby2.0の話は?

Ruby2.0 on Rails

RubyConfでしゃべったやつを見てくれよ
https://speakerdeck.com/a_matsuda/ruby-2-dot-0-on-rails

まとめ

The new Ruby world is coming
People ar making the Ruby world better everyday
Meet the people (=the community) and say "Hi!" to them! <3 <3 <3

直接会ってありがとうと言えばいいんじゃないだろうか。

追記

講演のスライドがここにあるので、参考にしたらいいと思います。
Ruby 2 and Rails 4 // Speaker Deck