Fjorb Boot Camp as a Gate

Fjorb Boot Camp as a Gate

(Show Noteは後日更新します)

34fcd5f1deeb25b1138e9845137feb6e?s=128

Shintaro Kakutani

September 10, 2020
Tweet

Transcript

  1. FJORD BOOT CAMP !LBLVUBOJ  AS A

  2. None
  3. None
  4. None
  5. None
  6. None
  7. ࠓ೔ɺ఻͍͑ͨ͜ͱ

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

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

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

  11. None
  12. None
  13. None
  14. ൃച༧ఆɻࣗ৴࡞ɻ

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

  16. ࠓ೔ɺ఻͍͑ͨ͜ͱ

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

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

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

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

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

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

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

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

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

    Ada King, Countess of Lovelace(1815-1852)
  27. — Augusta Ada King, Countess of Lovelace lͨͱ͑͹ɺ͜Ε·ͰԻֶָͷ࿨Իཧ࿦΍࡞ۂ࿦Ͱ࿦͡ΒΕ ͖ͯͨԻ֊ͷجຊతͳߏ੒Λɺ਺஋΍ͦͷ૊Έ߹Θͤʹஔ͖ ׵͑Δ͜ͱ͕Ͱ͖Ε͹ɺղੳػؔ͸ۂͷෳࡶ͞΍௕͞Λ໰Θ

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

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

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

  33. None
  34. օ͞Μ͕࢖͍ͬͯΔιϑτ΢ΣΞ͸ ϋʔυ΢ΣΞ ͸ Πϯλʔωοτ͸ʮ୭͔ʯ͕աڈʹ࡞ͬͨ΋ͷ Ͱ͋Γɺద੾ʹಈ࡞͠ଓ͚ΔΑ͏ʹʮ୭͔ʯ͕ҡ ͍࣋ͯ͠Δɻ͍·࢖͍ͬͯΔύιίϯ΍εϚϗͷ ը໘ͷ޲͜͏ʹ͍Δͷ͸ਓؒͩɻ͋ͳͨͷੜΈग़ ͨ͠ίʔυ ςΩετ ը૾

    Ի੠ ө૾σʔλ͸͜Ε ͔Βͷʮ୭͔ʯ͕৮ΕΔ͔΋͠Εͳ͍ɻ৮Εͳ͍ ͔΋͠Εͳ͍ɻͦͷʮ୭͔ʯ͸ࣗ෼͔΋͠Εͳ͍ ࠓޙ͸CPU΍ΞϧΰϦζϜ͔΋͠Εͳ͍͚Ͳʜ ɻ
  35. http://www.flickr.com/photos/alanstanton/5863143738/ l୯ʹੴΛ੾Γग़͢৔߹Ͱ΋ɺ ৗʹ৺ʹ੟ಊΛࢥ͍ඳ͔Ͷ͹ ͳΒͳ͍ɻ ʕʕ࠾ੴ৔࡞ۀऀͷ৺ಘ

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

  37. w࣭ w໳ wಓ wಓͷ֩৺

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

  39. ࣗ༝ͳ͍ͷͪͷً͖

  40. None
  41. None
  42. ࣭ Quality

  43. None
  44. None
  45. None
  46. ৬ۀϓϩάϥϚʔͱͯ͠ͷl࣭z

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

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

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

  50. w࣭ w໳ wಓ wಓͷ֩৺

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

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

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

  55. w࣭ w໳ wಓ wಓͷ֩৺

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

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

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

  59. Ruby “The State of the Octoverse”, Top languages section, GitHub

    https://octoverse.github.com/#top-languages
  60. Ruby 3.0 IS COMING!

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

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

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

  64. ͪΐͬͱ3VCZΛॻ͍ͯΈΑ͏͔ɻ࢓༷ wϘʔφεͷֹۚΛࢉग़͢ΔΑ ͜Ε͸ՍۭͷྫͰ͋Γ࣮ࡏͷਓ෺ஂମͱ͸ SZ wڅ༩άϨʔυ͝ͱʹج४ֹ͕ۚ͋ΔΑ 4ϥϯΫ ສԁ "ϥϯΫ ສԁ #ϥϯΫ

    ສԁ  wύϑΥʔϚϯεϨϏϡʔͷ݁ՌͰϘʔφε͸૿ݮ͢Δ ༏ल ສԁϓϥε ;ͭ͏ Մࢉͳ͠ ࢒೦ ϚΠφεʜ આ໌༻ͷίʔυ͔ͩΒɺ͜Ε͕ʮਖ਼͍͠ʯॻ͖ํ͡Ό͋ͳ͍Α
  65. 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
  66. ❯ 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
  67. 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
  68. class Person attr_reader :name, :grade def initialize(name:, grade:) @name, @grade

    = name, grade end end
  69. 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
  70. l5FMM %PO`U"TL https://martinfowler.com/bliki/TellDontAsk.html μϒϧσΟεύον ,FOU#FDL͕޿Ίͨ ͷઆ໌΋͔͚ͨͬͨ͠Ͳࠓ೔͸ׂѪͩ

  71. 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
  72. 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
  73. 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
  74. 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
  75. 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
  76. lҙਤΛ͋ΒΘ໊͢લ https://wiki.c2.com/?IntentionRevealingNames DDPNͷϠό͞ʹ͍ͭͯ͸ʰύλʔϯ 8JLJ 91ʱΛಡΜͰ͘ΕͨͷΉ

  77. 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
  78. 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ʹͳͬͨ
  79. 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Ͱࢦఆ͢Δ ΠϯλʔϑΣΠε͸มΘΒͳ͍
  80. … 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) … ৼΔ෣͍͸มΘΒͳ͍ͷͰɺςετίʔυ΋มΘΒͳ͍ ʘϦϑΝΫλϦϯάʗ
  81. ͔͜͜Β͓·͚

  82. ॏෳΛݮΒͤͳ͍͔

  83. 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 ͱճ΋ॻ͍ͯͯɺ෼ྔͷΘΓ ʹ৘ใྔ͕গͳ͍ͷͰ͸  ݸਓͷײ૝Ͱ͢ 
  84. 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΂ΜΓ
  85. -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

    ͱ͍͏ᎄͩΑɻ ʮσϝςϧͷ๏ଇʯͱ͍͏ͷ͕ఆ༁͚ͩͲɺ๏ଇͱ͍͏ΑΓ͸ɺΦϒδΣΫτࢦ޲ϓϩ άϥϛϯάͷమଇͱ͍͏ײͩ͡ͱࢥ͏͔Βɺࢲ͸ʮᎄʯͱݺͿΑ
  86. ❯ 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
  87. 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 … ਓؒͷج४ֹۚʹϨϏϡʔ݁ՌΛద༻ͨ͠ͷ͕Ϙʔφε
  88. 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
  89. 3VCZͨͷ͍͠2

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

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

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

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

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

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

  96. lιϑτ΢ΣΞ։ൃ͸νʔϜεϙʔπͰ͋Δ wݠڏ )VMJMJUZ  ੈքͷத৺͸܅Ͱ͸ͳ͍ɻ܅͸શ஌શೳͰ͸ͳ͍͠ɺઈରʹਖ਼͍͠Θ͚Ͱ΋ͳ͍ɻৗʹࣗ෼Λ վળ͍ͯ͜͠͏ɻ wଚܟ 3FTQFDU  Ұॹʹಇ͘ਓͷ͜ͱΛ৺͔Βࢥ͍΍Ζ͏ɻ૬खΛਓͷਓؒͱͯ͠ѻ͍ɺͦͷೳྗ΍ޭ੷Λߴ

    ͘ධՁ͠Α͏ɻ w৴པ 5SVTU  ࣗ෼Ҏ֎ͷਓ͸༗ೳͰ͋Γɺਖ਼͍͜͠ͱΛ͢Δͱ৴͡Α͏ɻͦ͏͢Ε͹ɺ࢓ࣄΛ ೚ͤΔ͜ͱ͕Ͱ͖Δɻ
  97. l͋ΒΏΔਓؒؔ܎ͷিಥ͸ɺ ݠڏɾଚܟɾ৴པͷܽ೗ʹΑΔ΋ͷͩ

  98. ࠓ೔ɺ఻͍͑ͨ͜ͱ

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

    ΔΑ͏ʹͳΓ·͢ɻʜΑΓਖ਼ࣗ͘͠෼ͷײ৘Λड͚औͬͯ΋Β͏͜ͱ͕Ͱ͖ΔΑ ͏ʹͳΔ
  100. w͍·ͷؾ࣋ͪ ײ৘  ͋ͳ͕ͨॻ͔ͳ͚Ε͹୭ʹ΋఻ΘΒͳ͍ɻl૬खʹ఻ΘΔΑ͏ʹzςΩετͰॻ͘ʹ͸܇࿅͕ඞཁͩɻ w΍ͬͨ͜ͱ ࣄ࣮  ࠓ೔΋Ұ೔͕Μ͹ͬͨৄ͘͠ॻ͖͍ͨͩΖ͏͚ͲɺΈΜͳ͸ৄࡉΛಡΈ͍͔ͨͳ  wΘ͔ͬͨ͜ͱ

    ҙݟ ղऍ  ΋ͪΖΜɺײ৘Ҏ֎΋ద੾ʹ఻ΘΔΑ͏ʹςΩετग़ྗ͢Δʹ͸܇࿅ɺ܇࿅ɺ܇࿅ɻ w࣍ʹ΍Δ͜ͱ ܭը ද໌  ߟ͑Δ͜ͱ͸େࣄ͚ͩΕͲɺ໌೔ͷࣗ෼΁ͷஔ͖खࢴ ໌೔ͷࣗ෼ʹద੾ʹ఻ΘΔΑ͏ʹॻ͚Δ͔ͳ  wγϟ΢τΞ΢τ ײँ  νʔϜʹײँɻ஥ؒʹײँɻΑ͍ৼΔ෣͍ɺॿ͔ͬͨ͜ͱΛϑΟʔυόοΫͯ͠૿͑ͨΒ͏Ε͘͠ͳ͍ l೔ใz͸Ͳ͜ʹྗΛೖΕͯॻ͘ͷ͕Α͍͔
  101. lཻ͕͋Ε͹ɺͲ͜·Ͱ΋ബ͘͸ͳΒͳ͍ w3VCZίʔυͷ޲͜͏ʹ͸ਓ͕͍Δɻਓ͕ؒlͨͷ͍͠zϓϩάϥϛϯάɻ wΞδϟΠϧίʔυͷ޲͜͏ʹ͸ਓ͕͍Δɻιϑτ΢ΣΞΛιϑτ΢ΣΞͷΑ͏ʹͭ͘Δɻ wΦʔϓϯιʔείʔυͷ޲͜͏ʹ͸ਓ͕͍Δɻιϑτ΢ΣΞͷࣗ༝ɻ  wίϛϡχςΟίʔυͷ޲͜͏ʹ͸ਓ͕͍Δɻ͋ͳ͕ͨίϛϡχςΟͩɻ

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

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

  104. At RubyKaigi 2011, taken by recmpile_net

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

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

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

    ΔΑ͏ʹͳΔͱΑ͍Ͱ͢Ͷɻ૊৫ͷঢ়گ͕ݸਓ ͷৼΔ෣͍ΛܾΊΔ͜ͱ΋͋Δ͔Βɺͳ͔ͳ͔ Ή͔͍ͣ͜͠ͱ΋ଟ͍Ͱ͚͢ΕͲɻ
  108. None
  109. None
  110. lཻ͕͋Ε͹ɺͲ͜·Ͱ΋ബ͘͸ͳΒͳ͍ w3VCZίʔυͷ޲͜͏ʹ͸ਓ͕͍Δɻਓ͕ؒlͨͷ͍͠zϓϩάϥϛϯάɻ wΞδϟΠϧίʔυͷ޲͜͏ʹ͸ਓ͕͍Δɻιϑτ΢ΣΞΛιϑτ΢ΣΞͷΑ͏ʹͭ͘Δɻ wΦʔϓϯιʔείʔυͷ޲͜͏ʹ͸ਓ͕͍Δɻιϑτ΢ΣΞͷࣗ༝ɻ  wίϛϡχςΟίʔυͷ޲͜͏ʹ͸ਓ͕͍Δɻ͋ͳ͕ͨίϛϡχςΟͩɻ

  111. w࣭ w໳ wಓ wಓͷ֩৺

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

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

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

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

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

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

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

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

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

  124. օ͞Μ͕࢖͍ͬͯΔιϑτ΢ΣΞ͸ ϋʔυ΢ΣΞ ͸ Πϯλʔωοτ͸ʮ୭͔ʯ͕աڈʹ࡞ͬͨ΋ͷ Ͱ͋Γɺద੾ʹಈ࡞͠ଓ͚ΔΑ͏ʹʮ୭͔ʯ͕ҡ ͍࣋ͯ͠Δɻ͍·࢖͍ͬͯΔύιίϯ΍εϚϗͷ ը໘ͷ޲͜͏ʹ͍Δͷ͸ਓؒͩɻ͋ͳͨͷੜΈग़ ͨ͠ίʔυ ςΩετ ը૾

    Ի੠ ө૾σʔλ͸͜Ε ͔Βͷʮ୭͔ʯ͕৮ΕΔ͔΋͠Εͳ͍ɻ৮Εͳ͍ ͔΋͠Εͳ͍ɻͦͷʮ୭͔ʯ͸ࣗ෼͔΋͠Εͳ͍ ࠓޙ͸CPU΍ΞϧΰϦζϜ͔΋͠Εͳ͍͚Ͳʜ ɻ
  125. None
  126. None
  127. l͋Δঢ়گԼͰͷ໰୊Λ܁Γฦ͠ղܾ͍ͯ͠Δํ๏ʹ ໊લΛ෇͚ͨઆ໌͕ύλʔϯͰ͢ɻ

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

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

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

  131. ࠓ೔ɺ఻͍͑ͨ͜ͱ

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

  133. ࠓ೔ɺ఻͍͑ͨ͜ͱ

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

  135. ࠓ೔ɺ఻͍͑ͨ͜ͱ

  136. w͍·ͷؾ࣋ͪ ײ৘  ͋ͳ͕ͨॻ͔ͳ͚Ε͹୭ʹ΋఻ΘΒͳ͍ɻl૬खʹ఻ΘΔΑ͏ʹzςΩετͰॻ͘ʹ͸܇࿅͕ඞཁͩɻ w΍ͬͨ͜ͱ ࣄ࣮  ࠓ೔΋Ұ೔͕Μ͹ͬͨৄ͘͠ॻ͖͍ͨͩΖ͏͚ͲɺΈΜͳ͸ৄࡉΛಡΈ͍͔ͨͳ  wΘ͔ͬͨ͜ͱ

    ҙݟ ղऍ  ΋ͪΖΜɺײ৘Ҏ֎΋ద੾ʹ఻ΘΔΑ͏ʹςΩετग़ྗ͢Δʹ͸܇࿅ɺ܇࿅ɺ܇࿅ɻ w࣍ʹ΍Δ͜ͱ ܭը ද໌  ߟ͑Δ͜ͱ͸େࣄ͚ͩΕͲɺ໌೔ͷࣗ෼΁ͷஔ͖खࢴ ໌೔ͷࣗ෼ʹద੾ʹ఻ΘΔΑ͏ʹॻ͚Δ͔ͳ  wγϟ΢τΞ΢τ ײँ  νʔϜʹײँɻ஥ؒʹײँɻΑ͍ৼΔ෣͍ɺॿ͔ͬͨ͜ͱΛϑΟʔυόοΫͯ͠૿͑ͨΒ͏Ε͘͠ͳ͍ l೔ใz͸Ͳ͜ʹྗΛೖΕͯॻ͘ͷ͕Α͍͔
  137. http://www.flickr.com/photos/alanstanton/5863143738/ l୯ʹੴΛ੾Γग़͢৔߹Ͱ΋ɺ ৗʹ৺ʹ੟ಊΛࢥ͍ඳ͔Ͷ͹ ͳΒͳ͍ɻ ʕʕ࠾ੴ৔࡞ۀऀͷ৺ಘ

  138. (It’s brave new world)

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

  141. FJORD BOOT CAMP !LBLVUBOJ  AS A