rails for ruby 1.9 moriq rails 勉強会 関西 · rails for ruby 1.9 •ruby 1.9 対応rails...

45
1 Rails for Ruby 1.9 moriq Rails勉強会 勉強会 勉強会 勉強会@関西 関西 関西 関西

Upload: others

Post on 27-May-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Rails for Ruby 1.9 moriq Rails 勉強会 関西 · Rails for Ruby 1.9 •Ruby 1.9 対応Rails をををを作作作るるるる –Ruby trunk (v1.9.0) –Rails 1-2 branch (v1.2.*)

1

Rails for Ruby 1.9

moriq

Rails勉強会勉強会勉強会勉強会@関西関西関西関西

Page 2: Rails for Ruby 1.9 moriq Rails 勉強会 関西 · Rails for Ruby 1.9 •Ruby 1.9 対応Rails をををを作作作るるるる –Ruby trunk (v1.9.0) –Rails 1-2 branch (v1.2.*)

2

もくじもくじもくじもくじ

•Ruby 1.8 vs 1.9

•Rails for Ruby 1.9

•Install Ruby 1.9

•Benchmark

Page 3: Rails for Ruby 1.9 moriq Rails 勉強会 関西 · Rails for Ruby 1.9 •Ruby 1.9 対応Rails をををを作作作るるるる –Ruby trunk (v1.9.0) –Rails 1-2 branch (v1.2.*)

3

Release schedule

•Ruby 1.8.6 – 2007/03

•Rails 1.2.3

•Ruby 1.9.1 – 2007/12–このこのこのこの時点時点時点時点ででででRailsもももも動動動動くとくとくとくと嬉嬉嬉嬉しいしいしいしい

Page 4: Rails for Ruby 1.9 moriq Rails 勉強会 関西 · Rails for Ruby 1.9 •Ruby 1.9 対応Rails をををを作作作るるるる –Ruby trunk (v1.9.0) –Rails 1-2 branch (v1.2.*)

4

Ruby 1.8 vs 1.9

Page 5: Rails for Ruby 1.9 moriq Rails 勉強会 関西 · Rails for Ruby 1.9 •Ruby 1.9 対応Rails をををを作作作るるるる –Ruby trunk (v1.9.0) –Rails 1-2 branch (v1.2.*)

5

Quiz #1 String

p "A"[0]

p ?A

Page 6: Rails for Ruby 1.9 moriq Rails 勉強会 関西 · Rails for Ruby 1.9 •Ruby 1.9 対応Rails をををを作作作るるるる –Ruby trunk (v1.9.0) –Rails 1-2 branch (v1.2.*)

6

Quiz #1 String

p "A"[0] 65 "A"

p ?A 65 "A"

Page 7: Rails for Ruby 1.9 moriq Rails 勉強会 関西 · Rails for Ruby 1.9 •Ruby 1.9 対応Rails をををを作作作るるるる –Ruby trunk (v1.9.0) –Rails 1-2 branch (v1.2.*)

7

Quiz #1 String

p "A".ord 65

p 65.chr "A"

Page 8: Rails for Ruby 1.9 moriq Rails 勉強会 関西 · Rails for Ruby 1.9 •Ruby 1.9 対応Rails をををを作作作るるるる –Ruby trunk (v1.9.0) –Rails 1-2 branch (v1.2.*)

8

Quiz #1 String

•Stringははははbytecodeのののの配列配列配列配列

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

Page 9: Rails for Ruby 1.9 moriq Rails 勉強会 関西 · Rails for Ruby 1.9 •Ruby 1.9 対応Rails をををを作作作るるるる –Ruby trunk (v1.9.0) –Rails 1-2 branch (v1.2.*)

9

Quiz #2 Array

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

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

Page 10: Rails for Ruby 1.9 moriq Rails 勉強会 関西 · Rails for Ruby 1.9 •Ruby 1.9 対応Rails をををを作作作るるるる –Ruby trunk (v1.9.0) –Rails 1-2 branch (v1.2.*)

10

Quiz #2 Array

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

[1]

[nil,1]

Page 11: Rails for Ruby 1.9 moriq Rails 勉強会 関西 · Rails for Ruby 1.9 •Ruby 1.9 対応Rails をををを作作作るるるる –Ruby trunk (v1.9.0) –Rails 1-2 branch (v1.2.*)

11

Quiz #2 Array

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

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

Page 12: Rails for Ruby 1.9 moriq Rails 勉強会 関西 · Rails for Ruby 1.9 •Ruby 1.9 対応Rails をををを作作作るるるる –Ruby trunk (v1.9.0) –Rails 1-2 branch (v1.2.*)

12

Quiz #2 Array

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

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

•Streamをををを効率的効率的効率的効率的にににに扱扱扱扱うううう

Page 13: Rails for Ruby 1.9 moriq Rails 勉強会 関西 · Rails for Ruby 1.9 •Ruby 1.9 対応Rails をををを作作作るるるる –Ruby trunk (v1.9.0) –Rails 1-2 branch (v1.2.*)

13

Quiz #3 when

x=1

p case x

when 1: "A"

when 2: "B"

end

Page 14: Rails for Ruby 1.9 moriq Rails 勉強会 関西 · Rails for Ruby 1.9 •Ruby 1.9 対応Rails をををを作作作るるるる –Ruby trunk (v1.9.0) –Rails 1-2 branch (v1.2.*)

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: Rails for Ruby 1.9 moriq Rails 勉強会 関西 · Rails for Ruby 1.9 •Ruby 1.9 対応Rails をををを作作作るるるる –Ruby trunk (v1.9.0) –Rails 1-2 branch (v1.2.*)

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: Rails for Ruby 1.9 moriq Rails 勉強会 関西 · Rails for Ruby 1.9 •Ruby 1.9 対応Rails をををを作作作るるるる –Ruby trunk (v1.9.0) –Rails 1-2 branch (v1.2.*)

16

Quiz #3 when

x=1

p case x

when 1; "A"

when 2; "B"

end

Page 17: Rails for Ruby 1.9 moriq Rails 勉強会 関西 · Rails for Ruby 1.9 •Ruby 1.9 対応Rails をををを作作作るるるる –Ruby trunk (v1.9.0) –Rails 1-2 branch (v1.2.*)

17

Quiz #4 send

class C

def one() 1 end

private :one

end

p C.new.send(:one)

Page 18: Rails for Ruby 1.9 moriq Rails 勉強会 関西 · Rails for Ruby 1.9 •Ruby 1.9 対応Rails をををを作作作るるるる –Ruby trunk (v1.9.0) –Rails 1-2 branch (v1.2.*)

18

Quiz #4 send

1

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

(NoMethodError)

Page 19: Rails for Ruby 1.9 moriq Rails 勉強会 関西 · Rails for Ruby 1.9 •Ruby 1.9 対応Rails をををを作作作るるるる –Ruby trunk (v1.9.0) –Rails 1-2 branch (v1.2.*)

19

Quiz #4 send

class Cdef one() 1 endprivate :one

endp C.new.funcall(:one)p C.new.__send!(:one)

Page 20: Rails for Ruby 1.9 moriq Rails 勉強会 関西 · Rails for Ruby 1.9 •Ruby 1.9 対応Rails をををを作作作るるるる –Ruby trunk (v1.9.0) –Rails 1-2 branch (v1.2.*)

20

Quiz #4 send

send funcall

public Y Y

protected N N

private N Y

Page 21: Rails for Ruby 1.9 moriq Rails 勉強会 関西 · Rails for Ruby 1.9 •Ruby 1.9 対応Rails をををを作作作るるるる –Ruby trunk (v1.9.0) –Rails 1-2 branch (v1.2.*)

21

Ruby 1.8 vs 1.9

•文法文法文法文法: ほぼほぼほぼほぼ同同同同じじじじ

•メソッドメソッドメソッドメソッド: 非互換非互換非互換非互換ありありありあり

Page 22: Rails for Ruby 1.9 moriq Rails 勉強会 関西 · Rails for Ruby 1.9 •Ruby 1.9 対応Rails をををを作作作るるるる –Ruby trunk (v1.9.0) –Rails 1-2 branch (v1.2.*)

22

Rails for Ruby 1.9

Page 23: Rails for Ruby 1.9 moriq Rails 勉強会 関西 · Rails for Ruby 1.9 •Ruby 1.9 対応Rails をををを作作作るるるる –Ruby trunk (v1.9.0) –Rails 1-2 branch (v1.2.*)

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: Rails for Ruby 1.9 moriq Rails 勉強会 関西 · Rails for Ruby 1.9 •Ruby 1.9 対応Rails をををを作作作るるるる –Ruby trunk (v1.9.0) –Rails 1-2 branch (v1.2.*)

24

Dependency

•Railsがががが依存依存依存依存するするするする外部外部外部外部ライブラリライブラリライブラリライブラリ–DB binding, Web server

–Rake, RubyGems

–cgi.rb

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

Page 25: Rails for Ruby 1.9 moriq Rails 勉強会 関西 · Rails for Ruby 1.9 •Ruby 1.9 対応Rails をををを作作作るるるる –Ruby trunk (v1.9.0) –Rails 1-2 branch (v1.2.*)

25

Unstable…

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

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

Page 26: Rails for Ruby 1.9 moriq Rails 勉強会 関西 · Rails for Ruby 1.9 •Ruby 1.9 対応Rails をををを作作作るるるる –Ruby trunk (v1.9.0) –Rails 1-2 branch (v1.2.*)

26

Test First!

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

2007-03-15:

AS: 8F 6EAP: 1F 0EAR: 7F 0E (base_test only)

Page 27: Rails for Ruby 1.9 moriq Rails 勉強会 関西 · Rails for Ruby 1.9 •Ruby 1.9 対応Rails をををを作作作るるるる –Ruby trunk (v1.9.0) –Rails 1-2 branch (v1.2.*)

27

Optimizing

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

–*_methods

–BasicObject

Page 28: Rails for Ruby 1.9 moriq Rails 勉強会 関西 · Rails for Ruby 1.9 •Ruby 1.9 対応Rails をををを作作作るるるる –Ruby trunk (v1.9.0) –Rails 1-2 branch (v1.2.*)

28

Resources

Project site:

http://collaboa.moriq.com/

SVN repos:

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

local/rails/

Page 29: Rails for Ruby 1.9 moriq Rails 勉強会 関西 · Rails for Ruby 1.9 •Ruby 1.9 対応Rails をををを作作作るるるる –Ruby trunk (v1.9.0) –Rails 1-2 branch (v1.2.*)

29

Install Ruby 1.9

Page 30: Rails for Ruby 1.9 moriq Rails 勉強会 関西 · Rails for Ruby 1.9 •Ruby 1.9 対応Rails をををを作作作るるるる –Ruby trunk (v1.9.0) –Rails 1-2 branch (v1.2.*)

30

Install Ruby 1.9

•1.8環境環境環境環境とととと共存共存共存共存させるさせるさせるさせる–configure options

–注意注意注意注意: #!, `ruby`

•RubyGemsのしくみのしくみのしくみのしくみ–$GEM_HOME

–1.9でででで動作動作動作動作[ruby-dev:30582]

Page 31: Rails for Ruby 1.9 moriq Rails 勉強会 関西 · Rails for Ruby 1.9 •Ruby 1.9 対応Rails をををを作作作るるるる –Ruby trunk (v1.9.0) –Rails 1-2 branch (v1.2.*)

31

configure options

--enable-shared

--prefix=~/c

--program-suffix=-1.8.6

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

Page 32: Rails for Ruby 1.9 moriq Rails 勉強会 関西 · Rails for Ruby 1.9 •Ruby 1.9 対応Rails をををを作作作るるるる –Ruby trunk (v1.9.0) –Rails 1-2 branch (v1.2.*)

32

shebang #!

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

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

Page 33: Rails for Ruby 1.9 moriq Rails 勉強会 関西 · Rails for Ruby 1.9 •Ruby 1.9 対応Rails をををを作作作るるるる –Ruby trunk (v1.9.0) –Rails 1-2 branch (v1.2.*)

33

call ruby

rake/Rakefile:

`ruby -Ilib ./bin/rake

--version`

Page 34: Rails for Ruby 1.9 moriq Rails 勉強会 関西 · Rails for Ruby 1.9 •Ruby 1.9 対応Rails をををを作作作るるるる –Ruby trunk (v1.9.0) –Rails 1-2 branch (v1.2.*)

34

Install Ruby 1.9

•1.8環境環境環境環境とととと共存共存共存共存させるさせるさせるさせる–configure options

–注意注意注意注意: #!, `ruby`

•RubyGemsのしくみのしくみのしくみのしくみ–$GEM_HOME

–1.9でででで動作動作動作動作[ruby-dev:30582]

Page 35: Rails for Ruby 1.9 moriq Rails 勉強会 関西 · Rails for Ruby 1.9 •Ruby 1.9 対応Rails をををを作作作るるるる –Ruby trunk (v1.9.0) –Rails 1-2 branch (v1.2.*)

35

$GEM_HOME

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

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

cache/

doc/

gems/

specifications/

Page 36: Rails for Ruby 1.9 moriq Rails 勉強会 関西 · Rails for Ruby 1.9 •Ruby 1.9 対応Rails をををを作作作るるるる –Ruby trunk (v1.9.0) –Rails 1-2 branch (v1.2.*)

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: Rails for Ruby 1.9 moriq Rails 勉強会 関西 · Rails for Ruby 1.9 •Ruby 1.9 対応Rails をををを作作作るるるる –Ruby trunk (v1.9.0) –Rails 1-2 branch (v1.2.*)

37

Benchmark

Page 38: Rails for Ruby 1.9 moriq Rails 勉強会 関西 · Rails for Ruby 1.9 •Ruby 1.9 対応Rails をををを作作作るるるる –Ruby trunk (v1.9.0) –Rails 1-2 branch (v1.2.*)

38

Benchmark

•benchmark.rb–注意注意注意注意: GC, IO

•profiler–set_trace_func

–Ruby trunkではではではでは動動動動かないかないかないかない

Page 39: Rails for Ruby 1.9 moriq Rails 勉強会 関西 · Rails for Ruby 1.9 •Ruby 1.9 対応Rails をををを作作作るるるる –Ruby trunk (v1.9.0) –Rails 1-2 branch (v1.2.*)

39

Rails Bench

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

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

–なぜなぜなぜなぜ????

Page 40: Rails for Ruby 1.9 moriq Rails 勉強会 関西 · Rails for Ruby 1.9 •Ruby 1.9 対応Rails をををを作作作るるるる –Ruby trunk (v1.9.0) –Rails 1-2 branch (v1.2.*)

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

Page 41: Rails for Ruby 1.9 moriq Rails 勉強会 関西 · Rails for Ruby 1.9 •Ruby 1.9 対応Rails をををを作作作るるるる –Ruby trunk (v1.9.0) –Rails 1-2 branch (v1.2.*)

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: Rails for Ruby 1.9 moriq Rails 勉強会 関西 · Rails for Ruby 1.9 •Ruby 1.9 対応Rails をををを作作作るるるる –Ruby trunk (v1.9.0) –Rails 1-2 branch (v1.2.*)

42

Bottleneck?

•ActiveSupportあやしいあやしいあやしいあやしい

•require 'active_record' のののの有無有無有無有無をををを条件条件条件条件にににに計測計測計測計測

•GCがががが効効効効いているいているいているいている

Page 43: Rails for Ruby 1.9 moriq Rails 勉強会 関西 · Rails for Ruby 1.9 •Ruby 1.9 対応Rails をををを作作作るるるる –Ruby trunk (v1.9.0) –Rails 1-2 branch (v1.2.*)

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: Rails for Ruby 1.9 moriq Rails 勉強会 関西 · Rails for Ruby 1.9 •Ruby 1.9 対応Rails をををを作作作るるるる –Ruby trunk (v1.9.0) –Rails 1-2 branch (v1.2.*)

44

まとめまとめまとめまとめ

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

•Ruby 1.9をををを使使使使ってみようってみようってみようってみよう

Page 45: Rails for Ruby 1.9 moriq Rails 勉強会 関西 · Rails for Ruby 1.9 •Ruby 1.9 対応Rails をををを作作作るるるる –Ruby trunk (v1.9.0) –Rails 1-2 branch (v1.2.*)

45

おわりおわりおわりおわり