Slide 1

Slide 1 text

RubyʹΑΔ ͨͷ͍͠Ϣʔβʔج൫࠶ߏங RubyWorld Conference 2017 2017-11-01 ॾڮګհ @moro

Slide 2

Slide 2 text

‣ (ࣸਅ) ղফͰ͖ͨෆ҆

Slide 3

Slide 3 text

Kyosuke MOROHASHI moro moro

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

http://techlife.cookpad.com/entry/2017/04/06/172601

Slide 7

Slide 7 text

RubyʹΑΔ ͨͷ͍͠Ϣʔβʔج൫࠶ߏங

Slide 8

Slide 8 text

RubyʹΑΔ ͨͷ͍͠Ϣʔβʔج൫࠶ߏங

Slide 9

Slide 9 text

‣ ❌ ͓΋͠Ζ͓͔͍͠ ‣ ⭕ ͍͖͍͖ͱલ޲͖ʹऔΓ૊ΊΔ ʮͨͷ͍͠ʯ

Slide 10

Slide 10 text

“ And there's business value in fun - after all motivation is a major factor in programmer productivity. 
 ͦΕ͔Βɺʮָ͠͞ʯʹ΋ϏδωεՁ஋͕͋Γ·͢ŠŠ݁ہɺϞνϕʔγϣϯ ͕ͦ͜ϓϩάϥϚͷੜ࢈ੑΛࠨӈ͢ΔͷͰ͢ɻ https://martinfowler.com/bliki/DynamicTyping.html 
 ( http://bliki-ja.github.io/DynamicTyping/ )

Slide 11

Slide 11 text

“ ΘΕΘΕ͸ػցͰ͸ͳ͍ͷͰɺ΍Γ͍ͨͱࢥ͏ͱ͖ ʹɺԿ͔Λୡ੒Ͱ͖ΔΜͰ͢ɻԿ͔Λୡ੒͢Δʹ͸ɺ ಥ͖ಈ͔͢಺ͳΔྗ͕ඞཁͰ͢ɻͦΕ͸Ϟνϕʔγϣ ϯʹΑͬͯݱΕΔΜͰ͢Ͷɻ ུ ϞνϕʔγϣϯΛ সͬͯ͸͍͚ͳ͍ɻ 「なんでRubyなんか作った!? 迷惑だ!」に対するMatzの答え
 
 http://el.jibun.atmarkit.co.jp/rails/2012/10/ruby-matz-7080.html

Slide 12

Slide 12 text

“ ͭ·Γʮ͜Μͳ͜ͱΛݴͬͨΒνʔϜϝΠτ͔Βഅࣛʹ͞ Εͳ͍ͩΖ͏͔ʯɺ͋Δ͍͸ʮϦʔμʔ͔ΒࣤΒΕͳ͍ͩ Ζ͏͔ʯͱ͍ͬͨෆ҆ΛɺνʔϜͷϝϯόʔ͔Β෷১͢Δɻ ৺ཧֶͷઐ໳༻ޠͰ͸ʮ৺ཧత҆શੑʢQTZDIPMPHJDBM TBGFUZʣʯͱݺ͹ΕΔ҆Β͔ͳงғؾΛνʔϜ಺ʹҭΊΔ ͔Ͳ͏͔͕ɺ੒ޭͷ伴ͳͷͩͱ͍͏ɻ グーグルが突きとめた!社員の「生産性」を高める唯一の方法はこうだ
 --プロジェクト・アリストテレスの全貌
 
 http://gendai.ismedia.jp/articles/-/48137

Slide 13

Slide 13 text

‣ ਓʑΛ࠷ߴʹً͔ͤΔ ‣ ߴ଎ʹ࣮ݧֶश͢Δ ‣ ܧଓతʹՁ஋Λಧ͚Δ ‣ ҆શΛඞਢ৚݅ʹ͢Δ http://modernagile.org/

Slide 14

Slide 14 text

RubyʹΑΔ ͨͷ͍͠Ϣʔβʔج൫࠶ߏங

Slide 15

Slide 15 text

RubyʹΑΔ ͨͷ͍͠Ϣʔβʔج൫࠶ߏங

Slide 16

Slide 16 text

ίʔυΛॻ͘ͷ͕ͨͷ͍͠ νʔϜͰ։ൃ͢Δͷ͕ͨͷ͍͠ νʔϜͱνʔϜͷ֎ͷਓͱ ΈΜͳͰαʔϏεΛಧ͚Δͷ͕ͨͷ͍͠

Slide 17

Slide 17 text

ίʔυΛॻ͘ͷ͕ͨͷ͍͠ νʔϜͰ։ൃ͢Δͷ͕ͨͷ͍͠ νʔϜͱνʔϜͷ֎ͷਓͱ ΈΜͳͰαʔϏεΛಧ͚Δͷ͕ͨͷ͍͠

Slide 18

Slide 18 text

http://techlife.cookpad.com/entry/2017/04/06/172601

Slide 19

Slide 19 text

‣ 10೥લ ‣ rails generate scaffold users
 email:string password_digest:string ‣ ݱࡏ ‣ ͜Ε·Ͱ࢖ͬͯ͘Ε͍ͯΔϢʔβʔ͞Μʹ໎࿭Λ͔͚ͳ͍Α͏ ஫ҙΛ͸Β͍ͭͭɺϏδωεχʔζͰ͏·Εͨଟछଟ༷ͳ֓೦ ΍σʔλߏ଄Λ੔ཧͯ͠ɺࠓޙͷαʔϏεల։ͷج൫ͱͳΔɻ ؆୯ͳ໰୊͸͋·Γ࢒͍ͬͯͳ͍

Slide 20

Slide 20 text

‣ ݄࣍ར༻ऀ਺ɿ໿6000ສਓ ‣ ϓϨϛΞϜձһ਺ɿ190ສਓҎ্ ‣ ͜ͷํͨͪʹ໎࿭Λ͔͚ͳ͍͜ͱΛେલఏͱ͠ɺ
 ֓೦Λ੔ཧͯ͠ɺ࣮૷΋γϯϓϧʹ͍ͯ͘͠ɻ ؆୯ͳ໰୊͸͋·Γ࢒͍ͬͯͳ͍ ˞਺ࣈ͸೥݄຤࣌఺

Slide 21

Slide 21 text

The Recipe for the World’s Largest Rails Monolith Akira Matsuda https://speakerdeck.com/a_matsuda/the-recipe-for-the-worlds-largest-rails-monolith

Slide 22

Slide 22 text

ҙࣝͯͨ͠ͷ͍ͨ͘͠͠

Slide 23

Slide 23 text

Slide 24

Slide 24 text

Slide 25

Slide 25 text

“ 3VCZ͸ʮͨͷ͠͞ʯΛୈҰͷ໨ඪʹͨ͠ੈքॳͷϓ ϩάϥϛϯάݴޠͰ͢ɻ — Rubyアプリケーションプログラミング 「1.3 Rubyの哲学」

Slide 26

Slide 26 text

‣ ੲ͸৽ਐؾӶͷWebϑϨʔϜϫʔΫͩͬͨɻ ‣ ޿͘࢖ΘΕͨ݁Ռɺ͍·͸Ѫ଀ͱ΋ʹूΊΔɻ Rails 10೥࢙

Slide 27

Slide 27 text

http://techlife.cookpad.com/entry/2017/04/06/172601

Slide 28

Slide 28 text

‣ จࣈ௨ΓͷʮϨΨγʔʯ= Ҩ࢈ ‣ ࢲͨͪͷϏδωε͸ɺ͜ͷίʔυ͕͓ۚΛՔ͍Ͱ͘ Ε͍ͯΔ͔Βͦ͜Ͱ͖͍ͯΔɻ ϨΨγʔίʔυ

Slide 29

Slide 29 text

“ Regardless of what we discover, we understand and truly believe that everyone did the best job they could, given what they knew at the time, their skills and abilities, the resources available, and the situation at hand. ͜ͷձͰ͸ɺϓϩδΣΫτͷશһ͕ஔ͔Εͨঢ়گԼͰϕετΛਚͨ͘͠ɺͱ͍ ͏͜ͱΛٙͬͯ͸ͳΒͳ͍ ฏು༁ http://www.retrospectives.com/pages/retroPrimeDirective.html

Slide 30

Slide 30 text

‣ Ruby Ͱனͷ࢓ࣄ͕Ͱ͖ΔΑ͏ʹͳͬͨɻ ‣ ͦΕࣗମ͕ɺࢲͨͪʹͱͬͯ͸ͱͯ΋ҒେͳҨ࢈ɻ ‣ ͪΌΜͱɺΞοϓσʔτΛ͍ͯ͘͠ɻ Rails 10೥࢙

Slide 31

Slide 31 text

“ b6TFBMMUIFXJTFBOELOPXMFEHFZPVIBWFPG ZPVSPXO 4BN` ʮ͓લ͕ࣗ෼Ͱ͍࣋ͬͯΔஐܙ΍஌ࣝΛ͋ΔݶΓ࢖ͬͯ͝ ΒΜΑɺαϜɺʯ — 指輪物語「王の帰還」

Slide 32

Slide 32 text

‣ Fat Controller, Fat Model … ‣ Trailblazer ΍ Hanami ͕ྲྀߦ͍ͬͯΔ Is Rails dead?

Slide 33

Slide 33 text

‣ πʔϧ΍ϑϨʔϜϫʔΫΛͨͩద༻͢ Δ͚ͩͰ͸͏·͍͔͘ͳ͍ɻ ‣ എܠʹͳ͍ͬͯͦ͏ͳίϯηϓτΛɺ ࣗ෼ͨͪͰͪΌΜͱࢼͯ͠ΈΑ͏ɻ ͜ͷ10೥ͷֶͼ:

Slide 34

Slide 34 text

αʔϏε૚ͱͯ͠ͷ Form Object ΛΑ͘ߟ͑ͯΈΔ

Slide 35

Slide 35 text

‣ ςετՄೳͳʮϞσϧ૚ʯ͸༗༻ɻ ‣ ʮϓϨθϯςʔγϣϯͱυϝΠϯͷ෼཭ʯͬͯ΍ͭ ‣ ίϯτϩʔϥ͔Β͸ৗʹ who ͱ when ͕౉͞ΕΔɻ ‣ ActiveSupport::CurrentAttributes ͳΔ΄Ͳɻ ‣ ͩΜͩΜʮϑΥʔϜʯ͡Όͳ͍͜ͱ΋෼͔͖ͬͯͨɻ ‣ αʔϏεΛʮೖΕࢠʯʹ͍ͨ͜͠ͱ΋͋Δɻ αʔϏε૚ͱͯ͠ͷ Form Object

Slide 36

Slide 36 text

Value ObjectΛൃݟ͢Δ

Slide 37

Slide 37 text

‣ ొ࿥தͷσʔλ͸ ʮ validate: false ͳϢʔβʔʯͰ͸
 ͳ͍ɻ ‣ ొ࿥ͦΕࣗମ΋ҰͭͷେࣄͳػೳͰ͋Δɻ ‣ Registration ͱ͍͏֓೦Λൃݟͨ͠ɻ ‣ ಉ࣌ʹɺొ࿥ޙʹͪΌΜͱݩͷίϯςΩετʹ໭͢ͷ΋
 ͱͯ΋େࣄͱ͍͏͜ͱ΋ɺֶΜͩɻ ͜Ε·ͰͷϏδωε͔Β΋ֶͿ

Slide 38

Slide 38 text

resources :email_registrations, only: %i(show new create) do collection do get :thanks end resource :user, controller: :cookpad_users,
 only: %i(show new create), module: :email_registrations end end ‣ &ϝʔϧͰͷϢʔβʔొ࿥ email_registrations ࣗମΛϦιʔεͱͯ͠ѻ͏ɻ ‣ ͔ͦ͜ΒผϦιʔεͱͯ͠Ϣʔβʔ(cookpad_users)Λ࡞Δɻ

Slide 39

Slide 39 text

ίʔυΛॻ͘ͷ͸
 ͨͷ͍͠

Slide 40

Slide 40 text

ίʔυΛॻ͘ͷ͕ͨͷ͍͠ νʔϜͰ։ൃ͢Δͷ͕ͨͷ͍͠ νʔϜͱνʔϜͷ֎ͷਓͱ ΈΜͳͰαʔϏεΛಧ͚Δͷ͕ͨͷ͍͠

Slide 41

Slide 41 text

“ b6TFBMMUIFXJTFBOELOPXMFEHFZPVIBWFPG ZPVSPXO 4BN` ʮ͓લ͕ࣗ෼Ͱ͍࣋ͬͯΔஐܙ΍஌ࣝΛ͋ΔݶΓ࢖ͬͯ͝ ΒΜΑɺαϜɺʯ — 指輪物語「王の帰還」

Slide 42

Slide 42 text

‣ ;Γ͔͑Γ ‣ ݟੵΓͱܭըͮ͘Γ ͍ΖΜͳϓϥΫςΟε͕͋Δ͚Ͳɺͪΐͬͱͣͭࢼͨ͠:

Slide 43

Slide 43 text

‣ ;Γ͔͑Γ ‣ ͜Ε·ͰʹԿΛ͔ͨ͠ ‣ ݟੵΓͱܭըͮ͘Γ ‣ ͜Ε͔ΒԿΛ͢Δ͔ ͍ΖΜͳϓϥΫςΟε͕͋Δ͚Ͳɺͪΐͬͱͣͭࢼͨ͠:

Slide 44

Slide 44 text

Slide 45

Slide 45 text

‣ ຖि n ϙΠϯτਐΜͰ͍Δͷ͸Θ͔ͬͨɻ͕ɺ ʮ͍ͭͰ͖Δʯ͔͕ݟ͑ͮΒ͔ͬͨɻ ‣ ࣮ࡍʹॻ͍ͯΈͨΒɺײ͕֮දݱͰ͖ͯͨɻ

Slide 46

Slide 46 text

Slide 47

Slide 47 text

‣ ࣾ಺ͷϓϥΫςΟεΛ༌ೖͨ͠ɻ ‣ υϝΠϯΤΩεύʔτʹ͞Θͬͯ΋Β͏ɻ ‣ େখ༷ʑͷؾ͍ͮͨ͜ͱΛͲΜͲΜ௚͢ɻ

Slide 48

Slide 48 text

Χϯόϯʹ5SZΛషΔ

Slide 49

Slide 49 text

‣ TryΛ͍ͭ΋໨ʹ͢ΔΑ͏ʹɺషͬͨɻ ‣ ͜Ε͸ະମݧͩͬͨΑ͏ͳɻ

Slide 50

Slide 50 text

ίʔυΛॻ͘ͷ͕ͨͷ͍͠ νʔϜͰ։ൃ͢Δͷ͕ͨͷ͍͠

Slide 51

Slide 51 text

‣ ʮ͜Ε·ͰʯʹֶΜͰ ‣ RailsҰൠ΍ΞϓϦέʔγϣϯίʔυͷۤ࿑ ‣ ػೳͷ࢖ΘΕํ ‣ ʮ͜Ε͔ΒʯΛߟ͑Δ ‣ ͪΐͬͱͣͭʮΑ͍ʯઃܭΛ͢Δ ‣ ඞཁͳΒٕज़తෛ࠴ΛआΓೖΕΔ ࣅ͍ͯΔ

Slide 52

Slide 52 text

‣ ʮ͜Ε·ͰʯʹֶΜͰ ‣ ͜Ε·ͰͷΠςϨʔγϣϯͰͷνʔϜͷਐΊํɻ ‣ ࡞Ζ͏ͱͨ͠ػೳͰ΄Μͱ͏ʹඞཁͩͬͨ΋ͷɻ ‣ ʮ͜Ε͔ΒʯΛߟ͑Δ ‣ Try ‣ ͜Ε·ͰΛ౿·͑ͨݟੵΓͱܭըͮ͘Γɻ ࣅ͍ͯΔ

Slide 53

Slide 53 text

ࣗݾ૬ࣅੑ͕͋Δ

Slide 54

Slide 54 text

ίʔυΛॻ͘ͷ͕ͨͷ͍͠ νʔϜͰ։ൃ͢Δͷ͕ͨͷ͍͠ νʔϜͱνʔϜͷ֎ͷਓͱ ΈΜͳͰαʔϏεΛಧ͚Δͷ͕ͨͷ͍͠

Slide 55

Slide 55 text

ʮ஌͍ͬͯͨʯ͜ͱ

Slide 56

Slide 56 text

“ ͕ͩɺߴΈʹ౸ୡ͢Δ͜ͱ͕໨తͰ͋Ε͹ɺιϑτ ΢ΣΞ։ൃ͸ʮϓϩάϥϚʔͱͦͷଞେ੎ʯͰ੒ཱ ͢Δ΋ͷͰ͸ͳ͍ɻͦΕ͕ɺաڈ೥ؒͰࢲֶ͕Μ ͩ͜ͱͩɻ — エクストリーム・プログラミング 「第25章 結論」

Slide 57

Slide 57 text

“ 5IFSFTBEJ⒎FSFODFCFUXFFO LOPXJOHUIFQBUIBOEXBMLJOHUIFQBUI ಓΛ஌Δ͜ͱͱา͖ͩ͢͜ͱ͸ҧ͏ — Morpheus; Matrix

Slide 58

Slide 58 text

Slide 59

Slide 59 text

“ 91ͷՁ஋͸ɺϏδωεͷੈքͰ࣮ફ͢΂͖΋ͷͩɻ շదʹ฻ΒͤΔੜ׆ΛૹΔ͚ͩͰͳ͘ɺؔ܎ऀશһ ͕͓ޓ͍ʹϦεϖΫτͨ͠ਓؒؔ܎ʹΑͬͯɺ৽͠ ͍ಇ͖ํΛ։ൃ͢ΔͷͰ͋Δɻ ུ ૑଄తʹ͍͖͍ ͖ͱಇ͘ͷͰ͋Δɻ — エクストリーム・プログラミング 「第25章 結論」

Slide 60

Slide 60 text

‣ ͔ͭͯ͸ਖ਼͔ͬͨ͠લఏ (ϝʔϧΞυϨε͕͋ΔɺͳͲ) ͕ඞཁҎ্ʹ
 ޿ൣʹద༻͞Ε͍ͯΔɻ ‣ ͔ͭͯ͸ʮϝʔϧΞυϨεΛೖྗͯ͠Ϣʔβʔొ࿥ʯΛલఏͱ͍ͯͨ͠ɻ ‣ ϝʔϧΞυϨεೖྗΛল͍ͯɺ༗ྉձһͱͯ͠࢖͍͍ͨͱݴͬͯ͘ΕΔ
 Ϣʔβʔ͞Μ΋ग़͖ͯͨɻ ‣ ʮΞϓϦΛΠϯετʔϧͯ͘͠ΕͨʯΒϢʔβʔͱѻ͏࢓૊Έ͕͍ΔͷͰ͸ɻ ࣗ෼ͨͪͷϏδωεͷϢʔβʔঢ়ଶΛֶशͰ͖͖ͯͨ

Slide 61

Slide 61 text

‣ αʔϏε։ൃͷ֤ॴͰѻ͍ͮΒ͘ͳ͍ͬͯΔɻ ‣ ίϛϡχέʔγϣϯܥͷػೳͰܾࡁखஈΛҙࣝ͠ͳ͍ͱ͍͚ͳ͍ɺͳͲɻ ‣ اը΍αϙʔτ΋೉͚͠Ε͹ɺ࣮૷্ͷམͱ݀͠ʹͳΔ͜ͱ΋͋Δɻ ‣ ৽͘͠ೖࣾͨ͠ਓ͕ཧղ͢Δͷ΋೉͍͠ɻ σʔλঢ়ଶ͕೉͍͠

Slide 62

Slide 62 text

“ νʔϜ͕ҙࣝతʹ౒ྗ͢Ε͹ɺυϝΠϯϞσϧ͸ͦ ͷڞ௨ݴޠͷج൫ͱͳΕΔ͠ɺͦͷҰํͰɺνʔϜ ͷίϛϡχέʔγϣϯΛιϑτ΢ΣΞͷ࣮૷ͱ݁ͼ ͚ͭΔ͜ͱ΋Ͱ͖Δɻ ドメイン駆動設計 「第2章 コミュニケーションと言語の使い方」

Slide 63

Slide 63 text

Slide 64

Slide 64 text

ίʔυΛॻ͘ͷ͕ͨͷ͍͠ νʔϜͰ։ൃ͢Δͷ͕ͨͷ͍͠ νʔϜͱνʔϜͷ֎ͷਓͱ ΈΜͳͰαʔϏεΛಧ͚Δͷ͕ͨͷ͍͠

Slide 65

Slide 65 text

“ ͦͷϓϩηεͷͳ͔Ͱɺ։ൃऀͱͯ͠࠷ળΛਚ͘͢ ͜ͱͩɻϏδωεͷͨΊʹͳΔ༏ΕͨίʔυΛॻ͘ ͜ͱͩɻ — エクストリーム・プログラミング 「第1章 XPとは何か」

Slide 66

Slide 66 text

ίʔυΛॻ͘ͷ͕ͨͷ͍͠ νʔϜͰ։ൃ͢Δͷ͕ͨͷ͍͠ νʔϜͱνʔϜͷ֎ͷਓͱ ΈΜͳͰαʔϏεΛಧ͚Δͷ͕ͨͷ͍͠

Slide 67

Slide 67 text

ίʔυΛॻ͘ͷ͕ͨͷ͍͠ νʔϜͰ։ൃ͢Δͷ͕ͨͷ͍͠ νʔϜͱνʔϜͷ֎ͷਓͱ ΈΜͳͰαʔϏεΛಧ͚Δͷ͕ͨͷ͍͠

Slide 68

Slide 68 text

http://techlife.cookpad.com/entry/2017/04/06/172601

Slide 69

Slide 69 text

‣ ݄࣍ར༻ऀ਺ɿ໿6000ສਓ ‣ ϓϨϛΞϜձһ਺ɿ190ສਓҎ্ ‣ ͜ͷํͨͪʹ໎࿭Λ͔͚ͳ͍͜ͱΛେલఏͱ͠ɺ
 ֓೦Λ੔ཧͯ͠ɺ࣮૷΋γϯϓϧʹ͍ͯ͘͠ɻ ؆୯ͳ໰୊͸͋·Γ࢒͍ͬͯͳ͍ ˞਺ࣈ͸೥݄຤࣌఺

Slide 70

Slide 70 text

Slide 71

Slide 71 text

‣ ٕज़తෛ࠴ΛआΓೖΕͳ͕ΒਐΊΔ ‣ Ұ࣌తʹDBͷಉςʔϒϧ΁ෳ਺ΞϓϦέʔγϣϯ͔Β write͢Δͱ͔ ‣ ࠓճ΋ͦͷதͰϕετΛਚ͘͢ ‣ ػೳͷείʔϓΛ෼͚ͯͪΐͬͱͣͭग़͢ɻ ‣ ม਺ͷείʔϓ΋෼͚ΔɺςετՄೳʹ͢Δ… etc ࣍ͷʮϨΨγʔʯΛ͍ͭͬͯ͘Δͷ͔΋…

Slide 72

Slide 72 text

“ 5IFSFTBEJ⒎FSFODFCFUXFFO LOPXJOHUIFQBUIBOEXBMLJOHUIFQBUI ಓΛ஌Δ͜ͱͱา͖ͩ͢͜ͱ͸ҧ͏ — Morpheus; Matrix

Slide 73

Slide 73 text

ҙࣝͯͨ͠ͷ͍ͨ͘͠͠

Slide 74

Slide 74 text

“ ͦΕ͔Βɺʮָ͠͞ʯʹ΋
 ϏδωεՁ஋͕͋Γ·͢ http://bliki-ja.github.io/DynamicTyping/

Slide 75

Slide 75 text

Slide 76

Slide 76 text

ίʔυΛॻ͘ͷ͕ͨͷ͍͠ νʔϜͰ։ൃ͢Δͷ͕ͨͷ͍͠ νʔϜͱνʔϜͷ֎ͷਓͱ ΈΜͳͰαʔϏεΛಧ͚Δͷ͕ͨͷ͍͠