Slide 1

Slide 1 text

FJORD BOOT CAMP !LBLVUBOJ AS A

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

ࠓ೔ɺ఻͍͑ͨ͜ͱ

Slide 8

Slide 8 text

ϕςϥϯͷݴ͏͜ͱ͸࿩൒෼Ͱड͚ͱΊΑ͏

Slide 9

Slide 9 text

ԋश໰୊ ຊ೔ͷ͓࿩͸ۀքྺ೥Ҏ্ͷϕςϥϯ͕͓ಧ͚͍ͨ͠·͢

Slide 10

Slide 10 text

֯୩৴ଠ࿠ @kakutani حൈͳཧ࿦ʹڵฃ͕ͪ͠ झຯϝΧχΧϧΩʔϘʔυεΠονͷ५׈

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

ൃച༧ఆɻࣗ৴࡞ɻ

Slide 15

Slide 15 text

τʔΫޙͷ࣭ٙԠ౴ʹ͍ͭͯ ࣭໰Λ͖͔͚ͬʹͯ͠ϕςϥϯ͕ࣗ෼ͷݴ͍͍ͨ ͜ͱΛݴ͏͚ͩͳͷͰɺͳΜͰ΋ԕྀͤͣͲ͏ͧ

Slide 16

Slide 16 text

ࠓ೔ɺ఻͍͑ͨ͜ͱ

Slide 17

Slide 17 text

ϥζϕϦʔδϟϜ ͷ๏ଇ l޿͛Ε͹޿͛Δ΄Ͳബ͘ͳΔ https://pxhere.com/en/photo/1150628

Slide 18

Slide 18 text

l޿͛Ε͹޿͛Δ΄Ͳബ͘ͳΔ w3VCZ3BJMTΛಈ͔͢ͷʹඞཁͳ΍ͭɻࠃ࢈ɻब৬ʹ༗ར ɻ wΞδϟΠϧٻਓථʹࡌͬͯΔ΍ͭ εΫϥϜͰ։ൃ͍ͯ͠·͢ ɻब৬ʹ༗རɻ wΦʔϓϯιʔε(JU)VCʹ͋Δ΍ͭɻ׆ಈͰ૲͕ੜ͑Δɻब৬ʹ༗རɻ wίϛϡχςΟΠϕϯτɻษڧձɻlΤϯδχΞzͷू·Γɻब৬ʹ༗རɻ

Slide 19

Slide 19 text

ΠνΰδϟϜ ͷ๏ଇ lཻ͕͋Ε͹ɺͲ͜·Ͱ΋ബ͘͸ͳΒͳ͍

Slide 20

Slide 20 text

lཻ͕͋Ε͹ɺͲ͜·Ͱ΋ബ͘͸ͳΒͳ͍ w3VCZίʔυͷ޲͜͏ʹ͸ਓ͕͍Δɻਓ͕ؒlͨͷ͍͠zϓϩάϥϛϯάɻ wΞδϟΠϧίʔυͷ޲͜͏ʹ͸ਓ͕͍Δɻιϑτ΢ΣΞΛιϑτ΢ΣΞͷΑ͏ʹͭ͘Δɻ wΦʔϓϯιʔείʔυͷ޲͜͏ʹ͸ਓ͕͍Δɻιϑτ΢ΣΞͷࣗ༝ɻ wίϛϡχςΟίʔυͷ޲͜͏ʹ͸ਓ͕͍Δɻ͋ͳ͕ͨίϛϡχςΟͩɻ

Slide 21

Slide 21 text

http://www.flickr.com/photos/alanstanton/5863143738/ l୯ʹੴΛ੾Γग़͢৔߹Ͱ΋ɺ ৗʹ৺ʹ੟ಊΛࢥ͍ඳ͔Ͷ͹ ͳΒͳ͍ɻ ʕʕ࠾ੴ৔࡞ۀऀͷ৺ಘ

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

࣌Λ௒͑ͨݐઃͷಓ lݐ෺΍ொ͸ɺ࣌Λ௒͑ͨಓʹै͑͹ɺͦΕ͚ͩੜ͖ੜ͖ ͱͯ͘͠Δ͠ɺ·ͨͦΕ͕ͦ͜།ҰͷಓͰ͋Δɻ

Slide 24

Slide 24 text

࣌Λ௒͑ͨݐઃͷಓ ͦΕ͸ɺ΄͔ͳΒ͵ࢲࣗ਎ͷ಺໘͔Βடং͕ੜ·Εͯ ͘ΔΑ͏ͳϓϩηεͰ͋ΔɻͦΕ͸ۃΊΔಓͰ͸ͳ͘ɺ ͳ͕͢··ʹ͓͚ͯ͠͹ɺ͓ͷ͔ͣΒੜ·Εͯ͘ΔಓͰ͋ Δɻ

Slide 25

Slide 25 text

࣌Λ௒͑ͨϓϩάϥϛϯάͷಓ

Slide 26

Slide 26 text

ϥϒϨεഢऋ෉ਓ ΦʔΨελɾΤΠμɾΩϯά ੈքͰ࠷ॳͷlϓϩάϥϚʔzɻ ࢻతՊֶऀ ࣗশ ɻ ࢻਓόΠϩϯ།Ұͷ஢ग़ࢠɻ όϕοδͷղੳػؔʹ͍ͭͯͷ ஶ࡞Ͱ஌ΒΕΔɻ Augusta Ada King, Countess of Lovelace(1815-1852)

Slide 27

Slide 27 text

— Augusta Ada King, Countess of Lovelace lͨͱ͑͹ɺ͜Ε·ͰԻֶָͷ࿨Իཧ࿦΍࡞ۂ࿦Ͱ࿦͡ΒΕ ͖ͯͨԻ֊ͷجຊతͳߏ੒Λɺ਺஋΍ͦͷ૊Έ߹Θͤʹஔ͖ ׵͑Δ͜ͱ͕Ͱ͖Ε͹ɺղੳػؔ͸ۂͷෳࡶ͞΍௕͞Λ໰Θ ͣɺࡉີͰܥ౷తͳԻָ࡞඼Λ࡞ۂͰ͖ΔͰ͠ΐ͏ɻ

Slide 28

Slide 28 text

No content

Slide 29

Slide 29 text

lίϯϐϡʔλͱΠϯλʔωοτ͸ݱ୅ͷͻͱ͖Θॏཁͳൃ ໌ʹ਺͑ΒΕΔ͕ɺͩΕ͕࡞ͬͨͷ͔͸͋·Γ஌ΒΕ͍ͯͳ ͍ɻʜͦ͏ͨ͠ਓ෺ͷνʔϜϫʔΫʹ͍ͭͯඳ͘͜ͱ͕ॏཁ ͳͷ͸ɺνʔϜϫʔΫͷεΩϧͦ͜ΠϊϕʔγϣϯͷࠜװͰ ͋Δʜ͔Βͩɻʜσδλϧ࣌୅Λ࡞ͬͨίϥϘϨʔγϣϯ͸ ஥ؒ ϐΞ ͷ͍͚͋ͩͩͰ͸ͳ͘ɺੈ୅ؒͰ΋ൃੜͨ͠ɻʜ ͦͯ͠ɺͳʹΑΓҹ৅ʹ࢒ͬͨͷ͕ɺσδλϧ࣌୅ͷਅͷ૑ ଄ੑ͸ɺܳज़ͱՊֶΛ݁ͼ෇͚ΒΕΔਓ͔Βੜ·Ε ͖ͯͨʜඒΛେ੾ͱߟ͑Δਓͨͪͩɻ

Slide 30

Slide 30 text

lਓؒ͸ύλʔϯΛೝࣝ͠ɺͦͷඒΛѪͰΔɻ৘ใ͔Β෺ޠ ΛͭΉ͙ɻਓؒͱ͸ʜ෺ޠͦͷ΋ͷͳͷͩɻ ਓؒͷ૑଄ੑʹ͸ɺՁ஋؍ɺҙࢤɺ৹ඒ؟ɺײ৘ɺݸͷҙࣝɺ ಓಙ؍೦ͱ͍ͬͨ΋ͷ͕͔ܽͤͳ͍ɻ͍ͣΕ΋ɺܳज़ͱਓจ Պֶ͕զʑʹڭ͑ͯ͘ΕΔ΋ͷͩɻܳज़ͱਓจՊֶ͕ɺࣗવ Պֶ΍ςΫϊϩδʔɺΤϯδχΞϦϯάɺ਺ֶͳͲʹྼΒͣ ڭҭͷҰ؏ͱͯ͠ॏཁͳͷ΋ɺͦͷͨΊͩɻ

Slide 31

Slide 31 text

No content

Slide 32

Slide 32 text

lʜΠϊϕʔγϣϯΛੜΈग़͢ͷ͸ɺඒͱΤϯδχΞϦϯά ΛɺਓؒੑͱςΫϊϩδʔΛɺͦͯ͠ࢻͱϓϩηοαʔΛ݁ ͼ෇͚Δ͜ͱͷͰ͖Δਓ෺ͩɻ ਓจՊֶͱࣗવՊֶͷަࠩ఺Ͱͳʹ͔Λͳ͠਱͛ΒΕΔΫϦ Τʔλʔɺ྆ํͷඒʹؾ͔ͮͤͯ͘ΕΔ৽઱ͳڻ͖ͷײ֮ ηϯεɾΦϒɾϫϯμʔ Λ๨Εͳ͍ࣗ༝ਓͱݴͬͯ΋͍͍ɻ ͭ·Γ͸ɺΤΠμɾϥϒϨεͷਫ਼ਆతͳޙܧऀͱ ݺͿʹ;͞Θ͍͠ਓ෺ͩɻ

Slide 33

Slide 33 text

No content

Slide 34

Slide 34 text

օ͞Μ͕࢖͍ͬͯΔιϑτ΢ΣΞ͸ ϋʔυ΢ΣΞ ͸ Πϯλʔωοτ͸ʮ୭͔ʯ͕աڈʹ࡞ͬͨ΋ͷ Ͱ͋Γɺద੾ʹಈ࡞͠ଓ͚ΔΑ͏ʹʮ୭͔ʯ͕ҡ ͍࣋ͯ͠Δɻ͍·࢖͍ͬͯΔύιίϯ΍εϚϗͷ ը໘ͷ޲͜͏ʹ͍Δͷ͸ਓؒͩɻ͋ͳͨͷੜΈग़ ͨ͠ίʔυ ςΩετ ը૾ Ի੠ ө૾σʔλ͸͜Ε ͔Βͷʮ୭͔ʯ͕৮ΕΔ͔΋͠Εͳ͍ɻ৮Εͳ͍ ͔΋͠Εͳ͍ɻͦͷʮ୭͔ʯ͸ࣗ෼͔΋͠Εͳ͍ ࠓޙ͸CPU΍ΞϧΰϦζϜ͔΋͠Εͳ͍͚Ͳʜ ɻ

Slide 35

Slide 35 text

http://www.flickr.com/photos/alanstanton/5863143738/ l୯ʹੴΛ੾Γग़͢৔߹Ͱ΋ɺ ৗʹ৺ʹ੟ಊΛࢥ͍ඳ͔Ͷ͹ ͳΒͳ͍ɻ ʕʕ࠾ੴ৔࡞ۀऀͷ৺ಘ

Slide 36

Slide 36 text

࣌Λ௒͑ͨϓϩάϥϛϯάͷಓ

Slide 37

Slide 37 text

w࣭ w໳ wಓ wಓͷ֩৺

Slide 38

Slide 38 text

࣭ l࣌Λ௒͑ͨಓΛٻΊΔ΋ͷ͸ɺ·ͣແ໊ͷ࣭Λ஌ΒͶ͹ͳΒͳ͍ɻ

Slide 39

Slide 39 text

ࣗ༝ͳ͍ͷͪͷً͖

Slide 40

Slide 40 text

No content

Slide 41

Slide 41 text

No content

Slide 42

Slide 42 text

࣭ Quality

Slide 43

Slide 43 text

No content

Slide 44

Slide 44 text

No content

Slide 45

Slide 45 text

No content

Slide 46

Slide 46 text

৬ۀϓϩάϥϚʔͱͯ͠ͷl࣭z

Slide 47

Slide 47 text

lϓϩάϥϚʔͱ͸ɺλεΫ Λίʔυߦʹ෼ׂ͢ΔεΩ ϧͷ͋Δਓͷ͜ͱΛࢦ͢ɻ Robert C. Martin

Slide 48

Slide 48 text

lϓϩάϥϚ͸ৄࡉͷ؅ཧऀͰ͋Δɻ ͦΕ͕զʑͷ࢓ࣄͩɻγεςϜͷৼΔ ෣͍ΛৄࡉʹܾΊΔɻ ͦͷͨΊʹςΩετݴޠΛ࢖͏ ͦΕ͕ ίʔυͩ ɻ Robert C. Martin

Slide 49

Slide 49 text

http://www.flickr.com/photos/alanstanton/5863143738/ l୯ʹੴΛ੾Γग़͢৔߹Ͱ΋ɺ ৗʹ৺ʹ੟ಊΛࢥ͍ඳ͔Ͷ͹ ͳΒͳ͍ɻ ʕʕ࠾ੴ৔࡞ۀऀͷ৺ಘ

Slide 50

Slide 50 text

w࣭ w໳ wಓ wಓͷ֩৺

Slide 51

Slide 51 text

lແ໊ͷ࣭ʹ౸ୡ͢Δʹ͸ɺͦ͜ʹ௨͡Δ໳ͱͯ͠ɺੜ͖͍ͯΔύλ ϯɾϥϯήʔδΛ૊ΈཱͯͶ͹ͳΒͳ͍ɻ ໳

Slide 52

Slide 52 text

http://www.flickr.com/photos/yukop/3659638918/ Gate ໳

Slide 53

Slide 53 text

No content

Slide 54

Slide 54 text

l͋Δঢ়گԼͰͷ໰୊Λ܁Γฦ͠ղܾ͍ͯ͠Δํ๏ʹ ໊લΛ෇͚ͨઆ໌͕ύλʔϯͰ͢ɻ

Slide 55

Slide 55 text

w࣭ w໳ wಓ wಓͷ֩৺

Slide 56

Slide 56 text

l໳ΛݐͯΕ͹ɺͦΕΛ͙ͬͯ࣌͘Λ௒͑ͨಓΛ࣮ફ͍ͯ͘͜͠ͱ͕ Ͱ͖Δɻ ಓ

Slide 57

Slide 57 text

lཻ͕͋Ε͹ɺͲ͜·Ͱ΋ബ͘͸ͳΒͳ͍ w3VCZίʔυͷ޲͜͏ʹ͸ਓ͕͍Δɻਓ͕ؒlͨͷ͍͠zϓϩάϥϛϯάɻ wΞδϟΠϧίʔυͷ޲͜͏ʹ͸ਓ͕͍Δɻιϑτ΢ΣΞΛιϑτ΢ΣΞͷΑ͏ʹͭ͘Δɻ wΦʔϓϯιʔείʔυͷ޲͜͏ʹ͸ਓ͕͍Δɻιϑτ΢ΣΞͷࣗ༝ɻ wίϛϡχςΟίʔυͷ޲͜͏ʹ͸ਓ͕͍Δɻ͋ͳ͕ͨίϛϡχςΟͩɻ

Slide 58

Slide 58 text

lཻ͕͋Ε͹ɺͲ͜·Ͱ΋ബ͘͸ͳΒͳ͍ w3VCZίʔυͷ޲͜͏ʹ͸ਓ͕͍Δɻਓ͕ؒlͨͷ͍͠zϓϩάϥϛϯάɻ wΞδϟΠϧίʔυͷ޲͜͏ʹ͸ਓ͕͍Δɻιϑτ΢ΣΞΛιϑτ΢ΣΞͷΑ͏ʹͭ͘Δɻ wΦʔϓϯιʔείʔυͷ޲͜͏ʹ͸ਓ͕͍Δɻιϑτ΢ΣΞͷࣗ༝ɻ wίϛϡχςΟίʔυͷ޲͜͏ʹ͸ਓ͕͍Δɻ͋ͳ͕ͨίϛϡχςΟͩɻ

Slide 59

Slide 59 text

Ruby “The State of the Octoverse”, Top languages section, GitHub https://octoverse.github.com/#top-languages

Slide 60

Slide 60 text

Ruby 3.0 IS COMING!

Slide 61

Slide 61 text

l3VCZͷ͍͢͝ͱ͜Ζ͸ɺݴޠͷಛ௃Λ ʮͨͷ͍͠ʯͱݴ͍੾ͬͯ͠·ͬͨ͜ͱɻ ݪ৴Ұ࿠ ͱͪ͗3VCZձٞ

Slide 62

Slide 62 text

ΦϒδΣΫτࢦ޲ͱ͸ wΞΠσϯςΟςΟΛ࣋ͭ ଘࡏΛಛఆͰ͖Δ ͻͱͭͻͱ͕ͭΦϒδΣΫτ wϝοηʔδΛ౉ͤΔ ΦϒδΣΫτͷlϝιουzʹҾ਺Λ౉ͯ͠ϝοηʔδΛૹ৴Ͱ͖Δ ੲɺ.BU[ͷஶ࡞ͰಡΜͩ͜ͱΛهԱΛཔΓʹॻ͍͍ͯΔΑɻਖ਼֬ͳઆ໌͡Όͳ͍͔΋͠Εͳ͍͠ɺ ·ͭ΋ͱ͞Μͷઆ໌ͷ࢓ํ΋มΘ͍ͬͯΔ͔΋͠Εͳ͍Αɻ͋͘·ͰLBLVUBOJͷղऍͱཧղͩΑɻ

Slide 63

Slide 63 text

Πϯλʔωοτ΍ੜ໋Λ໛ͨ͠ lະདྷΛ࡞Δzϓϩάϥϛϯά @sumim lΦϒδΣΫτࢦ޲ͱ͸ԿͰ͔͢ʁzͰάάͬͯΈΑ͏2 ΦϒδΣΫτࢦ޲ͱ͸ԿͰ͔͢ʁ

Slide 64

Slide 64 text

ͪΐͬͱ3VCZΛॻ͍ͯΈΑ͏͔ɻ࢓༷ wϘʔφεͷֹۚΛࢉग़͢ΔΑ ͜Ε͸ՍۭͷྫͰ͋Γ࣮ࡏͷਓ෺ஂମͱ͸ SZ wڅ༩άϨʔυ͝ͱʹج४ֹ͕ۚ͋ΔΑ 4ϥϯΫ ສԁ "ϥϯΫ ສԁ #ϥϯΫ ສԁ wύϑΥʔϚϯεϨϏϡʔͷ݁ՌͰϘʔφε͸૿ݮ͢Δ ༏ल ສԁϓϥε ;ͭ͏ Մࢉͳ͠ ࢒೦ ϚΠφεʜ આ໌༻ͷίʔυ͔ͩΒɺ͜Ε͕ʮਖ਼͍͠ʯॻ͖ํ͡Ό͋ͳ͍Α

Slide 65

Slide 65 text

require_relative 'fjord_works' RSpec.describe 'ϘʔφεΛܭࢉ͢ΔΑ!!' do context 'komagata͞ΜͷάϨʔυ͸B(ϕʔε100ສԁ)Ͱ' do komagata = Person.new(name:'komagata', grade: :B) context 'ධՁ͕༏ल(+50ສԁ)ͷͱ͖' do bonus = Bonus.new(komagata, review: :excellent) check = bonus.call example 'Ϙʔφε͸150ສԁ' do expect(check).to eq(150) context 'machida͞ΜͷάϨʔυ͸A(ϕʔε͕120ສԁ)Ͱ' do machida = Person.new(name:'machida', grade: :A) context 'ධՁ͕;ͭ͏(Մࢉͳ͠)ͷͱ͖' do bonus = Bonus.new(machida, review: :standard) check = bonus.call example 'Ϙʔφε͸120ສԁ' do expect(check).to eq(120) context 'kakutaniͷάϨʔυ͸S(ϕʔε͕160ສԁ)Ͱ' do kakutani = Person.new(name:'kakutani', grade: :S) context 'ධՁ͕࢒೦(2ׂݮ)ͷͱ͖' do bonus = Bonus.new(kakutani, review: :poor) check = bonus.call example 'Ϙʔφε͸128ສԁ' do expect(check).to eq(128) ennnnnd

Slide 66

Slide 66 text

❯ rspec -fd fjord_works_spec.rb ϘʔφεΛܭࢉ͢ΔΑ!! komagata͞ΜͷάϨʔυ͸B(ϕʔε100ສԁ)Ͱ ධՁ͕༏ल(+50ສԁ)ͷͱ͖ Ϙʔφε͸150ສԁ machida͞ΜͷάϨʔυ͸A(ϕʔε͕120ສԁ)Ͱ ධՁ͕;ͭ͏(Մࢉͳ͠)ͷͱ͖ Ϙʔφε͸120ສԁ kakutaniͷάϨʔυ͸S(ϕʔε͕160ສԁ)Ͱ ධՁ͕࢒೦(2ׂݮ)ͷͱ͖ Ϙʔφε͸128ສԁ Finished in 0.00239 seconds (files took 0.2104 seconds to load) 3 examples, 0 failures

Slide 67

Slide 67 text

class Person attr_reader :name, :grade def initialize(name:, grade:) @name, @grade = name, grade end end class Bonus attr_reader :person, :review def initialize(person, review:) @person, @review = person, review end # Ϙʔφε: άϨʔυ͝ͱͷϕʔεֹۚΛධՁʹΑͬͯ૿ݮֹͤͨۚ͞ def call case (g = @person.grade) when :S base = 160 apply_review(base) when :A base = 120 apply_review(base) when :B base = 100 apply_review(base) else raise "No such grade: '#{g}'" end end private def apply_review(base) case @review when :excellent base + 50 when :standard base when :poor base * 0.8 else raise "Nu such review: '#{@review}'" end end end

Slide 68

Slide 68 text

class Person attr_reader :name, :grade def initialize(name:, grade:) @name, @grade = name, grade end end

Slide 69

Slide 69 text

class Bonus attr_reader :person, :review def initialize(person, review:) @person, @review = person, review end # Ϙʔφε: άϨʔυ͝ͱͷϕʔεֹۚΛධՁʹΑͬͯ૿ݮֹͤͨۚ͞ def call case (g = @person.grade) when :S base = 160 apply_review(base) when :A base = 120 apply_review(base) when :B base = 100 apply_review(base) else raise "No such grade: '#{g}'" end end private def apply_review(base) case @review when :excellent base + 50 when :standard base when :poor base * 0.8 else raise "Nu such review: '#{@review}'" end end end

Slide 70

Slide 70 text

l5FMM %PO`U"TL https://martinfowler.com/bliki/TellDontAsk.html μϒϧσΟεύον ,FOU#FDL͕޿Ίͨ ͷઆ໌΋͔͚ͨͬͨ͠Ͳࠓ೔͸ׂѪͩ

Slide 71

Slide 71 text

class Bonus attr_reader :person, :review def initialize(person, review:) @person, @review = person, review end # Ϙʔφε: άϨʔυ͝ͱͷϕʔεֹۚΛධՁʹΑͬͯ૿ݮֹͤͨۚ͞ def call case (g = @person.grade) when :S base = 160 apply_review(base) when :A base = 120 apply_review(base) when :B base = 100 apply_review(base) else raise "No such grade: '#{g}'" end end private def apply_review(base) case @review when :excellent base + 50 when :standard base when :poor base * 0.8 else raise "Nu such review: '#{@review}'" end end end άϨʔυΛQFSTPOʹਘͶͯ BTL ɺ ج४ֹۚΛ൑ఆ͍ͯ͠Δ ϨϏϡʔͷ൑ఆ಺༰ΛਘͶͯ BTL ɺ ϘʔφεΛ૿ݮ͍ͤͯ͞Δ #POVT͕άϨʔυ΍ϨϏϡʔʹ ฉ͖·Θͬͯ࢓ࣄ͍ͯ͠Δ BTL

Slide 72

Slide 72 text

Grade = Struct.new(:sym, :base) GRADES = [ Grade.new(:S, 160), Grade.new(:A, 120), Grade.new(:B, 100) ].each_with_object({}){|g,h| h[g.sym] = g }.freeze class Person attr_reader :name, :grade def initialize(name:, grade:) @name, @grade = name, GRADES[grade] end end class Review class Excellent < Review def call(base) base + 50 end end class Standard < Review def call(base) base end end class Poor < Review def call(base) base * 0.8 end end def self.of(sym) @_types ||= { excellent: Excellent.new, standard: Standard.new, poor: Poor.new } @_types[sym] end def call(base); end end class Bonus attr_reader :person, :review def initialize(person, review:) @person, @review = person, Review.of(review) end # Ϙʔφε: άϨʔυ͝ͱͷϕʔεֹۚΛධՁʹΑͬͯ૿ݮֹͤͨۚ͞ def call @person.grade.base.then {|b| @review.call(b)} end end QFSTPOͷάϨʔυ͝ͱͷج४ֹۚΛɺ ϨϏϡʔ݁Ռʹ౉ͯ͠ɺϘʔφεΛࢉग़͠ ͍ͯΔ UFMM #POVT͸άϨʔυͱϨϏϡʔʹ ࢓ࣄΛ͓ئ͍͍ͯ͠Δ UFMM

Slide 73

Slide 73 text

class Bonus attr_reader :person, :review def initialize(person, review:) @person, @review = person, Review.of(review) end # Ϙʔφε: άϨʔυ͝ͱͷϕʔεֹۚΛධՁʹΑͬͯ૿ݮֹͤͨۚ͞ def call @person.grade.base.then {|b| @review.call(b)} end end QFSTPOͷάϨʔυ͝ͱͷج४ֹۚΛɺ ϨϏϡʔ݁Ռʹ౉ͯ͠ɺϘʔφεΛࢉग़͍ͯ͠Δ UFMM #POVT͸άϨʔυͱϨϏϡʔʹ ࢓ࣄΛ͓ئ͍͍ͯ͠Δ UFMM

Slide 74

Slide 74 text

class Bonus attr_reader :person, :review def initialize(person, review:) @person, @review = person, Review.of(review) end # Ϙʔφε: άϨʔυ͝ͱͷϕʔεֹۚΛධՁʹΑͬͯ૿ݮֹͤͨۚ͞ def call @review.call(@person.grade.base) end end ΋ͪΖΜɺ͜ΕͰ΋ߏΘͳ͍ #POVT͸άϨʔυͱϨϏϡʔʹ ࢓ࣄΛ͓ئ͍͍ͯ͠Δ UFMM

Slide 75

Slide 75 text

class Bonus attr_reader :person, :review def initialize(person, review:) @person, @review = person, Review.of(review) end # Ϙʔφε: άϨʔυ͝ͱͷϕʔεֹۚΛධՁʹΑͬͯ૿ݮֹͤͨۚ͞ def call @person.grade.base.then {|b| @review.call(b)} end end lͦͷਓͷάϨʔυʹɺϨϏϡʔΛద༻ͨ݁͠Ռ͕ ϘʔφεͩΑz #POVT͸άϨʔυͱϨϏϡʔʹ ࢓ࣄΛ͓ئ͍͍ͯ͠Δ UFMM

Slide 76

Slide 76 text

lҙਤΛ͋ΒΘ໊͢લ https://wiki.c2.com/?IntentionRevealingNames DDPNͷϠό͞ʹ͍ͭͯ͸ʰύλʔϯ 8JLJ 91ʱΛಡΜͰ͘ΕͨͷΉ

Slide 77

Slide 77 text

Grade = Struct.new(:sym, :base) GRADES = [ Grade.new(:S, 160), Grade.new(:A, 120), Grade.new(:B, 100) ].each_with_object({}){|g,h| h[g.sym] = g }.freeze class Person attr_reader :name, :grade def initialize(name:, grade:) @name, @grade = name, GRADES[grade] end end class Review class Excellent < Review def call(base) base + 50 end end class Standard < Review def call(base) base end end class Poor < Review def call(base) base * 0.8 end end def self.of(sym) @_types ||= { excellent: Excellent.new, standard: Standard.new, poor: Poor.new } @_types[sym] end def call(base); end end #POVT͸άϨʔυͱϨϏϡʔʹ ࢓ࣄΛ͓ئ͍͍ͯ͠Δ UFMM

Slide 78

Slide 78 text

Grade = Struct.new(:sym, :base) GRADES = [ Grade.new(:S, 160), Grade.new(:A, 120), Grade.new(:B, 100) ].each_with_object({}){|g,h| h[g.sym] = g }.freeze class Person attr_reader :name, :grade def initialize(name:, grade:) @name, @grade = name, GRADES[grade] end end άϨʔυ͕4ZNCPM͔Βج४ۚ ֹΛ࣋ͬͨ4USVDUʹͳͬͨ

Slide 79

Slide 79 text

class Review class Excellent < Review def call(base) base + 50 end end class Standard < Review def call(base) base end end class Poor < Review def call(base) base * 0.8 end end def self.of(sym) @_types ||= { excellent: Excellent.new, standard: Standard.new, poor: Poor.new } @_types[sym] end def call(base); end end class Bonus attr_reader :person, :review def initialize(person, review:) @person, @review = person, Review.of(review) end ϨϏϡʔ͸4ZNCPM͔ΒৼΔ෣ ͍Λ΋ͬͨ3FWJFXΫϥεͷΦ ϒδΣΫτʹͳͬͨ ϘʔφεΛݺͼग़͢ଆ͸ͲͷϨϏϡʔ݁Ռͳͷ͔͸ 4ZNCPMͰࢦఆ͢Δ ΠϯλʔϑΣΠε͸มΘΒͳ͍

Slide 80

Slide 80 text

… context 'komagata͞ΜͷάϨʔυ͸B(ϕʔε100ສԁ)Ͱ' do komagata = Person.new(name:'komagata', grade: :B) context 'ධՁ͕༏ल(+50ສԁ)ͷͱ͖' do bonus = Bonus.new(komagata, review: :excellent) check = bonus.call example 'Ϙʔφε͸150ສԁ' do expect(check).to eq(150) … ৼΔ෣͍͸มΘΒͳ͍ͷͰɺςετίʔυ΋มΘΒͳ͍ ʘϦϑΝΫλϦϯάʗ

Slide 81

Slide 81 text

͔͜͜Β͓·͚

Slide 82

Slide 82 text

ॏෳΛݮΒͤͳ͍͔

Slide 83

Slide 83 text

class Review class Excellent < Review def call(base) base + 50 end end class Standard < Review def call(base) base end end class Poor < Review def call(base) base * 0.8 end end def self.of(sym) @_types ||= { excellent: Excellent.new, standard: Standard.new, poor: Poor.new } @_types[sym] end def call(base); end end &YDFMMFOU 4UBOEBSE 1PPS ͱճ΋ॻ͍ͯͯɺ෼ྔͷΘΓ ʹ৘ใྔ͕গͳ͍ͷͰ͸ ݸਓͷײ૝Ͱ͢

Slide 84

Slide 84 text

Review = Struct.new(:sym, :apply) REVIEWS = [ Review.new(:excellent, ->(base){ base + 50}), Review.new(:standard, ->(base){ base }), Review.new(:poor, ->(base){ base * 0.8 }) ].each_with_object({}){|r,h| h[r.sym] = r }.freeze class Bonus attr_reader :person, :review def initialize(person, review:) @person, @review = person, REVIEWS[review] end # Ϙʔφε: άϨʔυ͝ͱͷϕʔεֹۚΛධՁʹΑͬͯ૿ݮֹͤͨۚ͞ def call @person.grade.base.then {|b| @review.apply.(b) } end … खଓ͖ΛΦϒδΣΫτʹͨ݁͠Ռɺσʔλ͚ͩʹͳͬͨͷͰ4USVDUͷΠϯελϯεʹͯ͠Έͨɻ ϨϏϡʔ݁Ռͷ໊લ͸ճ͔͠ग़ͯ͜ͳ͍ɻ3VCZ΂ΜΓ 3FWJFXͷ"SSBZΛ3FWJFXͷγϯϘϧΛΩʔʹͨ͠3FWJFXͷ)BTIʹͯ͋͠Δ ͔Β4ZNCPMͰ3FWJFXΛબ΂Δɻ3VCZ΂ΜΓ

Slide 85

Slide 85 text

-BXPG%FNFUFSσϝςϧͷᎄ w ͋ΔΦϒδΣΫτͷಛఆϝιου্ͰݺΜͰ͍͍ͷ͸ wࣗ෼͡͠Μ wͦͷϝιουͷҾ਺Ͱ౉͖ͬͯͨΦϒδΣΫτ wͦͷϝιου͕ࣗ෼ͰΠϯελϯεԽͨ͠ΦϒδΣΫτ wͦͷΦϒδΣΫτΛߏ੒͢ΔΦϒδΣΫτ https://ja.wikipedia.org/wiki/%E3%83%87%E3%83%A1%E3%83%86%E3%83%AB%E3%81%AE%E6%B3%95%E5%89%87 ࣗ෼͕஌Βͳ͍ΦϒδΣΫτʹ࿩͔͚͠Δͳ %PO`UUBMLUPTUSBOHFST ͱ͍͏ᎄͩΑɻ ʮσϝςϧͷ๏ଇʯͱ͍͏ͷ͕ఆ༁͚ͩͲɺ๏ଇͱ͍͏ΑΓ͸ɺΦϒδΣΫτࢦ޲ϓϩ άϥϛϯάͷమଇͱ͍͏ײͩ͡ͱࢥ͏͔Βɺࢲ͸ʮᎄʯͱݺͿΑ

Slide 86

Slide 86 text

❯ git diff diff --git a/fjord_works.rb b/fjord_works.rb index acb07f1..62f38e1 100644 --- a/fjord_works.rb +++ b/fjord_works.rb @@ -6,11 +6,13 @@ GRADES = [ ].each_with_object({}){|g,h| h[g.sym] = g }.freeze class Person - attr_reader :name, :grade + attr_reader :name def initialize(name:, grade:) @name, @grade = name, GRADES[grade] end + + def base_salary; @grade.base end end Review = Struct.new(:sym, :apply) @@ -28,6 +30,6 @@ class Bonus # Ϙʔφε: άϨʔυ͝ͱͷϕʔεֹۚΛධՁʹΑͬͯ૿ݮֹͤͨۚ͞ def call - @person.grade.base.then {|b| @review.apply(b)} + @person.base_salary.then {|b| @review.apply.(b)} end end

Slide 87

Slide 87 text

Review = Struct.new(:sym, :apply) REVIEWS = [ Review.new(:excellent, ->(base){ base + 50}), Review.new(:standard, ->(base){ base }), Review.new(:poor, ->(base){ base * 0.8 }) ].each_with_object({}){|r,h| h[r.sym] = r }.freeze class Bonus attr_reader :person, :review def initialize(person, review:) @person, @review = person, REVIEWS[review] end # Ϙʔφε: άϨʔυ͝ͱͷϕʔεֹۚΛධՁʹΑͬͯ૿ݮֹͤͨۚ͞ def call @person.base_salary.then {|b| @review.apply.(b) } end … ਓؒͷج४ֹۚʹϨϏϡʔ݁ՌΛద༻ͨ͠ͷ͕Ϙʔφε

Slide 88

Slide 88 text

class Bonus attr_reader :person, :review def initialize(person, review:) @person, @review = person, review end # Ϙʔφε: άϨʔυ͝ͱͷϕʔεֹۚΛධՁʹΑͬͯ૿ݮֹͤͨۚ͞ def call case (g = @person.grade) when :S base = 160 apply_review(base) when :A base = 120 apply_review(base) when :B base = 100 apply_review(base) else raise "No such grade: '#{g}'" end end private def apply_review(base) case @review when :excellent base + 50 when :standard base when :poor base * 0.8 else raise "Nu such review: '#{@review}'" end end end #POVT͕άϨʔυ΍ϨϏϡʔʹ ฉ͖·Θͬͯ࢓ࣄ͍ͯ͠Δ BTL

Slide 89

Slide 89 text

3VCZͨͷ͍͠2

Slide 90

Slide 90 text

l5FMM %PO`U"TL https://martinfowler.com/bliki/TellDontAsk.html μϒϧσΟεύον ,FOU#FDL͕޿Ίͨ ͷઆ໌΋͔͚ͨͬͨ͠Ͳࠓ೔͸ׂѪͩ

Slide 91

Slide 91 text

Πϯλʔωοτ΍ੜ໋Λ໛ͨ͠ lະདྷΛ࡞Δzϓϩάϥϛϯά @sumim lΦϒδΣΫτࢦ޲ͱ͸ԿͰ͔͢ʁzͰάάͬͯΈΑ͏2 ΦϒδΣΫτࢦ޲ͱ͸ԿͰ͔͢ʁ

Slide 92

Slide 92 text

https://eng.uber.com/microservice-architecture/

Slide 93

Slide 93 text

http://jeffsutherland.com/oopsla/schwapub.pdf

Slide 94

Slide 94 text

http://jeffsutherland.com/oopsla/schwapub.pdf

Slide 95

Slide 95 text

https://www.slideshare.net/kdmsnr/20140214-teamgeekfearlesschange l5FBN(FFLʹΑΔ'FBSMFTT$IBOHFz ֯੐య

Slide 96

Slide 96 text

lιϑτ΢ΣΞ։ൃ͸νʔϜεϙʔπͰ͋Δ wݠڏ )VMJMJUZ ੈքͷத৺͸܅Ͱ͸ͳ͍ɻ܅͸શ஌શೳͰ͸ͳ͍͠ɺઈରʹਖ਼͍͠Θ͚Ͱ΋ͳ͍ɻৗʹࣗ෼Λ վળ͍ͯ͜͠͏ɻ wଚܟ 3FTQFDU Ұॹʹಇ͘ਓͷ͜ͱΛ৺͔Βࢥ͍΍Ζ͏ɻ૬खΛਓͷਓؒͱͯ͠ѻ͍ɺͦͷೳྗ΍ޭ੷Λߴ ͘ධՁ͠Α͏ɻ w৴པ 5SVTU ࣗ෼Ҏ֎ͷਓ͸༗ೳͰ͋Γɺਖ਼͍͜͠ͱΛ͢Δͱ৴͡Α͏ɻͦ͏͢Ε͹ɺ࢓ࣄΛ ೚ͤΔ͜ͱ͕Ͱ͖Δɻ

Slide 97

Slide 97 text

l͋ΒΏΔਓؒؔ܎ͷিಥ͸ɺ ݠڏɾଚܟɾ৴པͷܽ೗ʹΑΔ΋ͷͩ

Slide 98

Slide 98 text

ࠓ೔ɺ఻͍͑ͨ͜ͱ

Slide 99

Slide 99 text

lࣗ෼ͷؾ࣋ͪΛਖ਼͘͠දݱ͢Δ ͚ΜͪΌΜ͘Μ͞ΜͷWeb೔ه, https://diary.shu-cream.net/2020/07/06/01.html wʮࣾձਓ೥໨͸ࣗ෼ͷؾ͕࣋ͪਖ਼͘͠දݱͰ͖ͨΒे෼ʯͱʜݴΘΕͨʜʢଟ ෼!LBLVUBOJ͔!LPJD͋ͨΓͩͱࢥ͏ wࣗ෼ͷײ৘͸ࣗ෼͔͠Θ͔Βͳ͍ͷͰɺͦΕʹ޲͖߹͍ɺݴ༿ʹ͢Δ܇࿅͕ඞཁ wײ৘͕දݱͰ͖ΔΑ͏ʹͳͬͨΒɺ࣍ͷεςοϓ͸ݴ༿ จষ ͷղ૾౓Λ্͛Δ wޠኮΛ૿΍͠ɺݴ༿ͷղ૾౓Λ্͛Δ͜ͱͰɺࣗ෼ͷײ৘ΛΑΓਖ਼͘͠දݱͰ͖ ΔΑ͏ʹͳΓ·͢ɻʜΑΓਖ਼ࣗ͘͠෼ͷײ৘Λड͚औͬͯ΋Β͏͜ͱ͕Ͱ͖ΔΑ ͏ʹͳΔ

Slide 100

Slide 100 text

w͍·ͷؾ࣋ͪ ײ৘ ͋ͳ͕ͨॻ͔ͳ͚Ε͹୭ʹ΋఻ΘΒͳ͍ɻl૬खʹ఻ΘΔΑ͏ʹzςΩετͰॻ͘ʹ͸܇࿅͕ඞཁͩɻ w΍ͬͨ͜ͱ ࣄ࣮ ࠓ೔΋Ұ೔͕Μ͹ͬͨৄ͘͠ॻ͖͍ͨͩΖ͏͚ͲɺΈΜͳ͸ৄࡉΛಡΈ͍͔ͨͳ wΘ͔ͬͨ͜ͱ ҙݟ ղऍ ΋ͪΖΜɺײ৘Ҏ֎΋ద੾ʹ఻ΘΔΑ͏ʹςΩετग़ྗ͢Δʹ͸܇࿅ɺ܇࿅ɺ܇࿅ɻ w࣍ʹ΍Δ͜ͱ ܭը ද໌ ߟ͑Δ͜ͱ͸େࣄ͚ͩΕͲɺ໌೔ͷࣗ෼΁ͷஔ͖खࢴ ໌೔ͷࣗ෼ʹద੾ʹ఻ΘΔΑ͏ʹॻ͚Δ͔ͳ wγϟ΢τΞ΢τ ײँ νʔϜʹײँɻ஥ؒʹײँɻΑ͍ৼΔ෣͍ɺॿ͔ͬͨ͜ͱΛϑΟʔυόοΫͯ͠૿͑ͨΒ͏Ε͘͠ͳ͍ l೔ใz͸Ͳ͜ʹྗΛೖΕͯॻ͘ͷ͕Α͍͔

Slide 101

Slide 101 text

lཻ͕͋Ε͹ɺͲ͜·Ͱ΋ബ͘͸ͳΒͳ͍ w3VCZίʔυͷ޲͜͏ʹ͸ਓ͕͍Δɻਓ͕ؒlͨͷ͍͠zϓϩάϥϛϯάɻ wΞδϟΠϧίʔυͷ޲͜͏ʹ͸ਓ͕͍Δɻιϑτ΢ΣΞΛιϑτ΢ΣΞͷΑ͏ʹͭ͘Δɻ wΦʔϓϯιʔείʔυͷ޲͜͏ʹ͸ਓ͕͍Δɻιϑτ΢ΣΞͷࣗ༝ɻ wίϛϡχςΟίʔυͷ޲͜͏ʹ͸ਓ͕͍Δɻ͋ͳ͕ͨίϛϡχςΟͩɻ

Slide 102

Slide 102 text

lཻ͕͋Ε͹ɺͲ͜·Ͱ΋ബ͘͸ͳΒͳ͍ w3VCZίʔυͷ޲͜͏ʹ͸ਓ͕͍Δɻਓ͕ؒlͨͷ͍͠zϓϩάϥϛϯάɻ wΞδϟΠϧίʔυͷ޲͜͏ʹ͸ਓ͕͍Δɻιϑτ΢ΣΞΛιϑτ΢ΣΞͷΑ͏ʹͭ͘Δɻ wΦʔϓϯιʔείʔυͷ޲͜͏ʹ͸ਓ͕͍Δɻιϑτ΢ΣΞͷࣗ༝ɻ wίϛϡχςΟίʔυͷ޲͜͏ʹ͸ਓ͕͍Δɻ͋ͳ͕ͨίϛϡχςΟͩɻ

Slide 103

Slide 103 text

ίϛϡχςΟͷ ҰһʹͳΔ https://skymapglobal.com/smart-transportation/funny-indian-train-transportation-picture/

Slide 104

Slide 104 text

At RubyKaigi 2011, taken by recmpile_net

Slide 105

Slide 105 text

http://www.flickr.com/photos/recompile_net/4932459606/ lίϛϡχςΟͱ͸୭͔ɻ΋ͪΖΜɺ ͋ͳͨͷ͜ͱͩɻ͋ͳ͕ͨίϛϡχ ςΟͰ͋Γɺ ͦΕҎ֎ʹίϛϡχ ςΟ͸͍ͳ͍ɻ͋ͳͨͷΑ͏ͳਓʑͷ ू·ΓΛɺίϛϡχςΟͱݺͿͷͩ ߴڮ੐ٛ 3VCZJTU.BHB[JOF߸ר಄ݴ

Slide 106

Slide 106 text

l8FGPDVTPOUIFQFPQMFCFIJOE$0%& — Akira Matsuda, RubyKaigi 2019 (Paraphrased)

Slide 107

Slide 107 text

͜Ε͔Βl*5ۀքzͰಇ͘͜ͱʹͳΔͷͳΒɺձ ࣾ๏ਓΑΓ΋ࣗ෼ͷΩϟϦΞͷ΄͏͕ण໋͕௕ ͍͔΋͠Εͳ͍͜ͱΛ಄ͷย۱ʹஔ͍͓͍ͯ ͯ΄͍͠ɻਓ͸ձࣾΛࣙΊΔ͕ɺ༷͟·ͳί ϛϡχςΟΛ௨ͯ͡ަྲྀ͕ଓ͘ ܧଓతɾஅଓ త ͜ͱ΋͋Δɻ૊৫ͱݸਓ͸෼͚ͯߟ͑ΒΕ ΔΑ͏ʹͳΔͱΑ͍Ͱ͢Ͷɻ૊৫ͷঢ়گ͕ݸਓ ͷৼΔ෣͍ΛܾΊΔ͜ͱ΋͋Δ͔Βɺͳ͔ͳ͔ Ή͔͍ͣ͜͠ͱ΋ଟ͍Ͱ͚͢ΕͲɻ

Slide 108

Slide 108 text

No content

Slide 109

Slide 109 text

No content

Slide 110

Slide 110 text

lཻ͕͋Ε͹ɺͲ͜·Ͱ΋ബ͘͸ͳΒͳ͍ w3VCZίʔυͷ޲͜͏ʹ͸ਓ͕͍Δɻਓ͕ؒlͨͷ͍͠zϓϩάϥϛϯάɻ wΞδϟΠϧίʔυͷ޲͜͏ʹ͸ਓ͕͍Δɻιϑτ΢ΣΞΛιϑτ΢ΣΞͷΑ͏ʹͭ͘Δɻ wΦʔϓϯιʔείʔυͷ޲͜͏ʹ͸ਓ͕͍Δɻιϑτ΢ΣΞͷࣗ༝ɻ wίϛϡχςΟίʔυͷ޲͜͏ʹ͸ਓ͕͍Δɻ͋ͳ͕ͨίϛϡχςΟͩɻ

Slide 111

Slide 111 text

w࣭ w໳ wಓ wಓͷ֩৺

Slide 112

Slide 112 text

l͜͜ʹࢸͬͯ΋ɺ࣌Λ௒͑ͨಓ͸·ͩ׬શͰ͸ͳ͍ɻ໳Λޙʹͯ͠ าΈग़͞ͳ͚Ε͹ɺແ໊ͷ࣭Λे෼ʹੜ੒͢Δ͜ͱ͸Ͱ͖ͳ͍ɻ ಓͷ֩৺

Slide 113

Slide 113 text

No content

Slide 114

Slide 114 text

No content

Slide 115

Slide 115 text

ίϛϡχςΟͷ ҰһʹͳΔ https://skymapglobal.com/smart-transportation/funny-indian-train-transportation-picture/

Slide 116

Slide 116 text

No content

Slide 117

Slide 117 text

ϥζϕϦʔδϟϜ ͷ๏ଇ l޿͛Ε͹޿͛Δ΄Ͳബ͘ͳΔ https://pxhere.com/en/photo/1150628

Slide 118

Slide 118 text

l޿͛Ε͹޿͛Δ΄Ͳബ͘ͳΔ w3VCZ3BJMTΛಈ͔͢ͷʹඞཁͳ΍ͭɻࠃ࢈ɻlब৬ʹ༗ར ɻ wΞδϟΠϧٻਓථʹࡌͬͯΔ΍ͭ εΫϥϜͰ։ൃ͍ͯ͠·͢ ɻब৬ʹ༗རɻ wΦʔϓϯιʔε(JU)VCʹ͋Δ΍ͭɻ׆ಈͰ૲͕ੜ͑Δɻब৬ʹ༗རɻ wίϛϡχςΟΠϕϯτɻษڧձɻlΤϯδχΞzͷू·Γɻब৬ʹ༗རɻ

Slide 119

Slide 119 text

ΠνΰδϟϜ ͷ๏ଇ lཻ͕͋Ε͹ɺͲ͜·Ͱ΋ബ͘͸ͳΒͳ͍

Slide 120

Slide 120 text

lཻ͕͋Ε͹ɺͲ͜·Ͱ΋ബ͘͸ͳΒͳ͍ w3VCZίʔυͷ޲͜͏ʹ͸ਓ͕͍Δɻਓ͕ؒlͨͷ͍͠zϓϩάϥϛϯάɻ wΞδϟΠϧίʔυͷ޲͜͏ʹ͸ਓ͕͍Δɻιϑτ΢ΣΞΛιϑτ΢ΣΞͷΑ͏ʹͭ͘Δɻ wΦʔϓϯιʔείʔυͷ޲͜͏ʹ͸ਓ͕͍Δɻιϑτ΢ΣΞͷࣗ༝ɻ wίϛϡχςΟίʔυͷ޲͜͏ʹ͸ਓ͕͍Δɻ͋ͳ͕ͨίϛϡχςΟͩɻ

Slide 121

Slide 121 text

http://www.flickr.com/photos/alanstanton/5863143738/ l୯ʹੴΛ੾Γग़͢৔߹Ͱ΋ɺ ৗʹ৺ʹ੟ಊΛࢥ͍ඳ͔Ͷ͹ ͳΒͳ͍ɻ ʕʕ࠾ੴ৔࡞ۀऀͷ৺ಘ

Slide 122

Slide 122 text

࣌Λ௒͑ͨϓϩάϥϛϯάͷಓ

Slide 123

Slide 123 text

࣌Λ௒͑ͨݐઃͷಓ ͦΕ͸ɺ΄͔ͳΒ͵ࢲࣗ਎ͷ಺໘͔Βடং͕ੜ·Εͯ ͘ΔΑ͏ͳϓϩηεͰ͋ΔɻͦΕ͸ۃΊΔಓͰ͸ͳ͘ɺ ͳ͕͢··ʹ͓͚ͯ͠͹ɺ͓ͷ͔ͣΒੜ·Εͯ͘ΔಓͰ͋ Δɻ

Slide 124

Slide 124 text

օ͞Μ͕࢖͍ͬͯΔιϑτ΢ΣΞ͸ ϋʔυ΢ΣΞ ͸ Πϯλʔωοτ͸ʮ୭͔ʯ͕աڈʹ࡞ͬͨ΋ͷ Ͱ͋Γɺద੾ʹಈ࡞͠ଓ͚ΔΑ͏ʹʮ୭͔ʯ͕ҡ ͍࣋ͯ͠Δɻ͍·࢖͍ͬͯΔύιίϯ΍εϚϗͷ ը໘ͷ޲͜͏ʹ͍Δͷ͸ਓؒͩɻ͋ͳͨͷੜΈग़ ͨ͠ίʔυ ςΩετ ը૾ Ի੠ ө૾σʔλ͸͜Ε ͔Βͷʮ୭͔ʯ͕৮ΕΔ͔΋͠Εͳ͍ɻ৮Εͳ͍ ͔΋͠Εͳ͍ɻͦͷʮ୭͔ʯ͸ࣗ෼͔΋͠Εͳ͍ ࠓޙ͸CPU΍ΞϧΰϦζϜ͔΋͠Εͳ͍͚Ͳʜ ɻ

Slide 125

Slide 125 text

No content

Slide 126

Slide 126 text

No content

Slide 127

Slide 127 text

l͋Δঢ়گԼͰͷ໰୊Λ܁Γฦ͠ղܾ͍ͯ͠Δํ๏ʹ ໊લΛ෇͚ͨઆ໌͕ύλʔϯͰ͢ɻ

Slide 128

Slide 128 text

lϓϩάϥϚʔͱ͸ɺλεΫ Λίʔυߦʹ෼ׂ͢ΔεΩ ϧͷ͋Δਓͷ͜ͱΛࢦ͢ɻ Robert C. Martin

Slide 129

Slide 129 text

lϓϩάϥϚ͸ৄࡉͷ؅ཧऀͰ͋Δɻ ͦΕ͕զʑͷ࢓ࣄͩɻγεςϜͷৼΔ ෣͍ΛৄࡉʹܾΊΔɻ ͦͷͨΊʹςΩετݴޠΛ࢖͏ ͦΕ͕ ίʔυͩ ɻ Robert C. Martin

Slide 130

Slide 130 text

http://www.flickr.com/photos/alanstanton/5863143738/ l୯ʹੴΛ੾Γग़͢৔߹Ͱ΋ɺ ৗʹ৺ʹ੟ಊΛࢥ͍ඳ͔Ͷ͹ ͳΒͳ͍ɻ ʕʕ࠾ੴ৔࡞ۀऀͷ৺ಘ

Slide 131

Slide 131 text

ࠓ೔ɺ఻͍͑ͨ͜ͱ

Slide 132

Slide 132 text

ϕςϥϯͷݴ͏͜ͱ͸࿩൒෼Ͱड͚ͱΊΑ͏

Slide 133

Slide 133 text

ࠓ೔ɺ఻͍͑ͨ͜ͱ

Slide 134

Slide 134 text

lཻ͕͋Ε͹ɺͲ͜·Ͱ΋ബ͘͸ͳΒͳ͍ w3VCZίʔυͷ޲͜͏ʹ͸ਓ͕͍Δɻਓ͕ؒlͨͷ͍͠zϓϩάϥϛϯάɻ wΞδϟΠϧίʔυͷ޲͜͏ʹ͸ਓ͕͍Δɻιϑτ΢ΣΞΛιϑτ΢ΣΞͷΑ͏ʹͭ͘Δɻ wΦʔϓϯιʔείʔυͷ޲͜͏ʹ͸ਓ͕͍Δɻιϑτ΢ΣΞͷࣗ༝ɻ wίϛϡχςΟίʔυͷ޲͜͏ʹ͸ਓ͕͍Δɻ͋ͳ͕ͨίϛϡχςΟͩɻ

Slide 135

Slide 135 text

ࠓ೔ɺ఻͍͑ͨ͜ͱ

Slide 136

Slide 136 text

w͍·ͷؾ࣋ͪ ײ৘ ͋ͳ͕ͨॻ͔ͳ͚Ε͹୭ʹ΋఻ΘΒͳ͍ɻl૬खʹ఻ΘΔΑ͏ʹzςΩετͰॻ͘ʹ͸܇࿅͕ඞཁͩɻ w΍ͬͨ͜ͱ ࣄ࣮ ࠓ೔΋Ұ೔͕Μ͹ͬͨৄ͘͠ॻ͖͍ͨͩΖ͏͚ͲɺΈΜͳ͸ৄࡉΛಡΈ͍͔ͨͳ wΘ͔ͬͨ͜ͱ ҙݟ ղऍ ΋ͪΖΜɺײ৘Ҏ֎΋ద੾ʹ఻ΘΔΑ͏ʹςΩετग़ྗ͢Δʹ͸܇࿅ɺ܇࿅ɺ܇࿅ɻ w࣍ʹ΍Δ͜ͱ ܭը ද໌ ߟ͑Δ͜ͱ͸େࣄ͚ͩΕͲɺ໌೔ͷࣗ෼΁ͷஔ͖खࢴ ໌೔ͷࣗ෼ʹద੾ʹ఻ΘΔΑ͏ʹॻ͚Δ͔ͳ wγϟ΢τΞ΢τ ײँ νʔϜʹײँɻ஥ؒʹײँɻΑ͍ৼΔ෣͍ɺॿ͔ͬͨ͜ͱΛϑΟʔυόοΫͯ͠૿͑ͨΒ͏Ε͘͠ͳ͍ l೔ใz͸Ͳ͜ʹྗΛೖΕͯॻ͘ͷ͕Α͍͔

Slide 137

Slide 137 text

http://www.flickr.com/photos/alanstanton/5863143738/ l୯ʹੴΛ੾Γग़͢৔߹Ͱ΋ɺ ৗʹ৺ʹ੟ಊΛࢥ͍ඳ͔Ͷ͹ ͳΒͳ͍ɻ ʕʕ࠾ੴ৔࡞ۀऀͷ৺ಘ

Slide 138

Slide 138 text

(It’s brave new world)

Slide 139

Slide 139 text

No content

Slide 140

Slide 140 text

ԋश໰୊ ຊ೔ͷ͓࿩͸ۀքྺ೥Ҏ্ͷϕςϥϯ͕͓ಧ͚͍ͨ͠·͢

Slide 141

Slide 141 text

FJORD BOOT CAMP !LBLVUBOJ AS A