1
Rails for Ruby 1.9
moriq
Rails勉強会勉強会勉強会勉強会@関西関西関西関西
2
もくじもくじもくじもくじ
•Ruby 1.8 vs 1.9
•Rails for Ruby 1.9
•Install Ruby 1.9
•Benchmark
3
Release schedule
•Ruby 1.8.6 – 2007/03
•Rails 1.2.3
•Ruby 1.9.1 – 2007/12–このこのこのこの時点時点時点時点ででででRailsもももも動動動動くとくとくとくと嬉嬉嬉嬉しいしいしいしい
4
Ruby 1.8 vs 1.9
5
Quiz #1 String
p "A"[0]
p ?A
6
Quiz #1 String
p "A"[0] 65 "A"
p ?A 65 "A"
7
Quiz #1 String
p "A".ord 65
p 65.chr "A"
8
Quiz #1 String
•Stringははははbytecodeのののの配列配列配列配列
•Stringはははは文字文字文字文字のののの配列配列配列配列
9
Quiz #2 Array
x=[0,1];x[0,1]=nil;p x
y=[0,1].zip([2,3]);p y
10
Quiz #2 Array
x=[0,1];x[0,1]=nil;p x
[1]
[nil,1]
11
Quiz #2 Array
Array#[]=nil•要素要素要素要素をををを削除削除削除削除•値値値値としてとしてとしてとしてnilをををを設定設定設定設定
ENV['…'] = nilENV.delete('…')
12
Quiz #2 Array
y=[0,1].zip([2,3]);p y
[[0,2],[1,3]]#<Enumerable::Enumerator:>
•Streamをををを効率的効率的効率的効率的にににに扱扱扱扱うううう
13
Quiz #3 when
x=1
p case x
when 1: "A"
when 2: "B"
end
14
Quiz #3 when
"A"
syntax error, unexpected ':', expecting keyword_then or ',' or ';' or '¥n'when 1: "A"
^
syntax error, unexpected keyword_when, expecting $endwhen 2: "B"
^
15
Quiz #3 when
•コロンコロンコロンコロン':'はははは貴重貴重貴重貴重なななな資源資源資源資源–Symbol :foo
–Module Foo::Bar
–Hash {x:1,y:2}
–Keyword arguments (Ruby2.0?) x:,y: = {x:1,y:2}
16
Quiz #3 when
x=1
p case x
when 1; "A"
when 2; "B"
end
17
Quiz #4 send
class C
def one() 1 end
private :one
end
p C.new.send(:one)
18
Quiz #4 send
1
in `<main>': private method `one' called for #<C:0xc285a8>
(NoMethodError)
19
Quiz #4 send
class Cdef one() 1 endprivate :one
endp C.new.funcall(:one)p C.new.__send!(:one)
20
Quiz #4 send
send funcall
public Y Y
protected N N
private N Y
21
Ruby 1.8 vs 1.9
•文法文法文法文法: ほぼほぼほぼほぼ同同同同じじじじ
•メソッドメソッドメソッドメソッド: 非互換非互換非互換非互換ありありありあり
22
Rails for Ruby 1.9
23
Rails for Ruby 1.9
•Ruby 1.9対応対応対応対応Railsをををを作作作作るるるる–Ruby trunk (v1.9.0)
–Rails 1-2 branch (v1.2.*)
•ActiveSupport
•ActionPack
•ActiveRecord
24
Dependency
•Railsがががが依存依存依存依存するするするする外部外部外部外部ライブラリライブラリライブラリライブラリ–DB binding, Web server
–Rake, RubyGems
–cgi.rb
•Railsだけのだけのだけのだけの対応対応対応対応ではではではでは済済済済まないまないまないまない
25
Unstable…
•Ruby 1.9はまだはまだはまだはまだ不安定不安定不安定不安定–[BUG]とのとのとのとの戦戦戦戦いいいい
•Railsはははは安定性安定性安定性安定性がががが最重要最重要最重要最重要–ゆっくりゆっくりゆっくりゆっくり移行移行移行移行
26
Test First!
•テストテストテストテストもももも1.9対応対応対応対応はははは必要必要必要必要•Rubyのののの変更変更変更変更にににに弱弱弱弱いいいい
2007-03-15:
AS: 8F 6EAP: 1F 0EAR: 7F 0E (base_test only)
27
Optimizing
•新仕様新仕様新仕様新仕様をををを使使使使ってってってって効率改善効率改善効率改善効率改善–Class variable
–*_methods
–BasicObject
28
Resources
Project site:
http://collaboa.moriq.com/
SVN repos:
http://dev.moriq.com/svn/
local/rails/
29
Install Ruby 1.9
30
Install Ruby 1.9
•1.8環境環境環境環境とととと共存共存共存共存させるさせるさせるさせる–configure options
–注意注意注意注意: #!, `ruby`
•RubyGemsのしくみのしくみのしくみのしくみ–$GEM_HOME
–1.9でででで動作動作動作動作[ruby-dev:30582]
31
configure options
--enable-shared
--prefix=~/c
--program-suffix=-1.8.6
/home/moriq/c/bin/ruby-1.8.6
32
shebang #!
~/c/bin/gem:#!/usr/bin/env ruby
~/c/bin/rake:#!/home/moriq/c/bin/ruby-1.8.6
33
call ruby
rake/Rakefile:
`ruby -Ilib ./bin/rake
--version`
34
Install Ruby 1.9
•1.8環境環境環境環境とととと共存共存共存共存させるさせるさせるさせる–configure options
–注意注意注意注意: #!, `ruby`
•RubyGemsのしくみのしくみのしくみのしくみ–$GEM_HOME
–1.9でででで動作動作動作動作[ruby-dev:30582]
35
$GEM_HOME
/usr/lib/ruby/gems/1.8/…
export GEM_HOME=~/c/home/moriq/c/
cache/
doc/
gems/
specifications/
36
Gemのののの構造構造構造構造
tar xvf cache/sources-0.0.1.gemdata.tar.gz-> lib/sources.rb
metadata.gz-> metadata (YAML)
•Zlib::GzipReader– 1.9でででで動作動作動作動作[ruby-dev:30582]
37
Benchmark
38
Benchmark
•benchmark.rb–注意注意注意注意: GC, IO
•profiler–set_trace_func
–Ruby trunkではではではでは動動動動かないかないかないかない
39
Rails Bench
•gems vs vendor–あまりあまりあまりあまり影響影響影響影響しないしないしないしない
•ActiveSupport–requireするとするとするとすると遅遅遅遅くなるくなるくなるくなる
–なぜなぜなぜなぜ????
40
ActiveRecord Bench
sqlite3-ruby select (n=1000):
•1.8.6: 2147 req/sec•1.9.0: 2320 req/sec
with ActiveRecord:
•1.8.6: 1100 req/sec•1.9.0: 804 req/sec
41
ActionPack Bench
dispatch (n=100):
•1.8.6: 108 req/sec
•1.9.0: 126 req/sec
with AR (2 records):
•1.8.6: 85.2 req/sec
•1.9.0: 96.2 req/sec
42
Bottleneck?
•ActiveSupportあやしいあやしいあやしいあやしい
•require 'active_record' のののの有無有無有無有無をををを条件条件条件条件にににに計測計測計測計測
•GCがががが効効効効いているいているいているいている
43
sqlite3-ruby benchmark
0.2
0.3
0.4
0.5
0.6
0.7
10 100 1000 10000
Runs
Avg. runtime (msec)
bm3as-190
bm3as-186
bm3-190
bm3-186
44
まとめまとめまとめまとめ
•Rails for Ruby 1.9ははははそこそこそこそこそこそこそこそこ動作動作動作動作しますしますしますします
•Ruby 1.9をををを使使使使ってみようってみようってみようってみよう
45
おわりおわりおわりおわり