1 Rails for Ruby 1.9 moriq Rails 勉強会 @ 関西. 2 もくじ Ruby 1.8 vs 1.9 Rails for Ruby 1.9...

45
1 Rails for Ruby 1.9 moriq Rails 勉勉勉 @ 勉西

Transcript of 1 Rails for Ruby 1.9 moriq Rails 勉強会 @ 関西. 2 もくじ Ruby 1.8 vs 1.9 Rails for Ruby 1.9...

Page 1: 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.

1

Rails for Ruby 1.9

moriqRails 勉強会 @ 関西

Page 2: 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.

2

もくじ

•Ruby 1.8 vs 1.9•Rails for Ruby 1.9•Install Ruby 1.9•Benchmark

Page 3: 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も動くと嬉しい

Page 4: 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.

4

Ruby 1.8 vs 1.9

Page 5: 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.

5

Quiz #1 String

p "A"[0]

p ?A

Page 6: 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.

6

Quiz #1 String

p "A"[0] 65 "A"

p ?A 65 "A"

Page 7: 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.

7

Quiz #1 String

p "A".ord65

p 65.chr "A"

Page 8: 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.

8

Quiz #1 String

•String は bytecode の配列•String は文字の配列

Page 9: 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.

9

Quiz #2 Array

x=[0,1];x[0,1]=nil;p x

y=[0,1].zip([2,3]);p y

Page 10: 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.

10

Quiz #2 Array

x=[0,1];x[0,1]=nil;p x

[1]

[nil,1]

Page 11: 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.

11

Quiz #2 Array

Array#[]=nil•要素を削除•値として nil を設定

ENV['…'] = nilENV.delete('…')

Page 12: 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.

12

Quiz #2 Array

y=[0,1].zip([2,3]);p y

[[0,2],[1,3]]#<Enumerable::Enumerator:>

•Stream を効率的に扱う

Page 13: 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.

13

Quiz #3 when

x=1p case x when 1: "A" when 2: "B" end

Page 14: 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.

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"

^

Page 15: 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.

15

Quiz #3 when

•コロン ':' は貴重な資源– Symbol :foo–Module Foo::Bar– Hash {x:1,y:2}– Keyword arguments (Ruby2.0?) x:,

y: = {x:1,y:2}

Page 16: 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.

16

Quiz #3 when

x=1p case x when 1; "A" when 2; "B" end

Page 17: 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.

17

Quiz #4 send

class C def one() 1 end private :oneendp C.new.send(:one)

Page 18: 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.

18

Quiz #4 send

1

in `<main>': private method `one' called for #<C:0xc285a8>

(NoMethodError)

Page 19: 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.

19

Quiz #4 send

class C def one() 1 end private :oneendp C.new.funcall(:one)p C.new.__send!(:one)

Page 20: 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.

20

Quiz #4 send

send funcallpublic Y Yprotected N Nprivate N Y

Page 21: 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.

21

Ruby 1.8 vs 1.9

•文法 : ほぼ同じ•メソッド : 非互換あり

Page 22: 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.

22

Rails for Ruby 1.9

Page 23: 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.

23

Rails for Ruby 1.9

•Ruby 1.9 対応 Rails を作る– Ruby trunk (v1.9.0)– Rails 1-2 branch (v1.2.*)

•ActiveSupport•ActionPack•ActiveRecord

Page 24: 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.

24

Dependency

•Rails が依存する外部ライブラリ– DB binding, Web server– Rake, RubyGems– cgi.rb

•Rails だけの対応では済まない

Page 25: 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.

25

Unstable…

•Ruby 1.9はまだ不安定– [BUG]との戦い

•Railsは安定性が最重要–ゆっくり移行

Page 26: 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.

26

Test First!

•テストも 1.9 対応は必要•Ruby の変更に弱い

2007-03-15:AS: 8F 6EAP: 1F 0E AR: 7F 0E (base_test only)

Page 27: 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.

27

Optimizing

•新仕様を使って効率改善– Class variable– *_methods– BasicObject

Page 28: 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.

28

Resources

Project site:http://collaboa.moriq.com/

SVN repos:http://dev.moriq.com/svn/

local/rails/

Page 29: 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.

29

Install Ruby 1.9

Page 30: 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.

30

Install Ruby 1.9

•1.8 環境と共存させる– configure options–注意 : #!, `ruby`

•RubyGems のしくみ– $GEM_HOME– 1.9 で動作 [ruby-dev:30582]

Page 31: 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.

31

configure options

--enable-shared--prefix=~/c--program-suffix=-1.8.6

/home/moriq/c/bin/ruby-1.8.6

Page 32: 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.

32

shebang #!

~/c/bin/gem:#!/usr/bin/env ruby

~/c/bin/rake:#!/home/moriq/c/bin/ruby-1.8.6

Page 33: 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.

33

call ruby

rake/Rakefile:

`ruby -Ilib ./bin/rake

--version`

Page 34: 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.

34

Install Ruby 1.9

•1.8 環境と共存させる– configure options–注意 : #!, `ruby`

•RubyGems のしくみ– $GEM_HOME– 1.9 で動作 [ruby-dev:30582]

Page 35: 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.

35

$GEM_HOME

/usr/lib/ruby/gems/1.8/…

export GEM_HOME=~/c/home/moriq/c/

cache/

doc/

gems/

specifications/

Page 36: 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.

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]

Page 37: 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.

37

Benchmark

Page 38: 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.

38

Benchmark

•benchmark.rb–注意 : GC, IO

•profiler– set_trace_func– Ruby trunk では動かない

Page 39: 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.

39

Rails Bench

•gems vs vendor–あまり影響しない

•ActiveSupport– require すると遅くなる–なぜ?

Page 40: 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.

40

ActiveRecord Benchsqlite3-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

Page 41: 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.

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

Page 42: 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.

42

Bottleneck?

•ActiveSupport あやしい•require 'active_record' の有

無を条件に計測

•GC が効いている

Page 43: 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.

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

Page 44: 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.

44

まとめ

•Rails for Ruby 1.9 はそこそこ動作します

•Ruby 1.9 を使ってみよう

Page 45: 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.

45

おわり