Slide 1

Slide 1 text

ೋਓνʔϜʹ͓͚Δ όοΫΤϯυ։ൃͷ ޮ཰ԽΛٻΊͯ For RailsDM Day 4, 2018/12/08 By OKURA Masafumi (@okuramasafumi) from Cycle

Slide 2

Slide 2 text

͜ͷൃදʹ͍ͭͯ • εϥΠυຕ਺ɿ31ຕ • ൃද࣌ؒɿ20෼ʢ࣭ٙԠ౴ؚΉʣ • Ұ൪ࢗ͞ΔͰ͋Ζ͏૚ɿখ͍͞νʔϜͰϦιʔ εෆ଍ʹ೰Έͭͭ։ൃ͍ͯ͠Δਓͨͪ

Slide 3

Slide 3 text

ࣗݾ঺հ • ໊લɿେ૔խ࢙ • ձࣾɿCycleʢ೶Ո͞Μ޲͚ΞϓϦ։ൃʣ • Ruby/Railsྺɿ5೥ڧ • ͓࢓ࣄɿRailsͰͷAPI։ൃɺAWSͷΠϯϑϥ؅ཧ • ΤσΟλɿVim

Slide 4

Slide 4 text

͓඼ॻ͖ 1. νʔϜਓ਺͕গͳ͍͜ͱͰੜ͡Δओͳ໰୊఺ 2. ։ൃํ਑ʢ଎౓ͱอकੑͷόϥϯεʣ 3. RailsͷAPI։ൃʹؔ͢Δπʔϧ 4. ίʔυϨϏϡʔʹؔ͢Δπʔϧͱ࢟੎

Slide 5

Slide 5 text

1. νʔϜਓ਺͕গͳ͍͜ͱͰ ੜ͡Δओͳ໰୊఺

Slide 6

Slide 6 text

ͦ΋ͦ΋ • νʔϜਓ਺͸ଟ͚Ε͹͍͍ͱ͍͏΋ͷͰ΋ͳ ͍ • ཧ૝͸গ਺ਫ਼Ӷ͕ͩɺগ਺͗ͯ͢΋ਏ͍͠ਫ਼ Ӷ͚ͩͱ΋͍͔ͳ͍ʢࢲࣗ਎͕…ʣ

Slide 7

Slide 7 text

͏ͪͷνʔϜͷݱঢ় • ΤϯδχΞ͸2໊ʢ͏ͪ1໊͸ࢲʣ • ࢒Γͷ1໊͸CEO • όοΫΤϯυʢRails APIʣ͸2໊ͱ΋Ͱ͖Δ • ϑϩϯτΤϯυʢReact Nativeʣ͸ࢲ͕Ͱ͖ͳ ͍

Slide 8

Slide 8 text

ೋਓνʔϜͷ͕͜͜ਏ͍ • શPRͷϨϏϡʔ͸૬ख͕ݟͳͯ͘͸ͳΒͳ͍ ʢ૬ख͕ٳΈor๩͍͠ͱϨϏϡʔ͕ࢭ·Δʣ • ૬ஊ૬ख͕গͳ͍ • CEO͸๩͍͠Μͩ <- IMPORTANT!

Slide 9

Slide 9 text

CEO๩͍͠໰୊ • CEO͸։ൃҎ֎ʹ΋ࢿۚௐୡͦͷଞͰखҰഋͰ ͋Γ͕ͪ • ͔͠͠ɺίʔυͷ඼࣭ΛอͭͨΊʹ΋ίʔυϨ Ϗϡʔ͸͍ͨ͠͠ɺԿΑΓCEOࣗ਎͕RubyΛ ॻ͖͕ͨΔ • ࢲͱͯ͠͸ɺCEO͸ϑϩϯτ΍ͬͯ΄͍͠

Slide 10

Slide 10 text

CEO๩͍͠໰୊ʢଓʣ • ΤϯδχΞͱͯ͠ͷCEOΛ࠷େݶʹαϙʔτ ͍ͨ͠ɺͦͷͨΊʹ͸ • Railsଆͷ։ൃޮ཰Λ্͛Δ • APIͱͷͭͳ͗ࠐΈ෦෼Λޮ཰తʹ͢Δ

Slide 11

Slide 11 text

2. ։ൃํ਑ ʢ଎౓ͱอकੑͷόϥϯεʣ

Slide 12

Slide 12 text

جຊ͸ޮ཰ॏࢹ • ೋਓνʔϜ͸جຊతʹ͕࣌ؒͳ͍ • CEOͷ࣌ؒ͸وॏ • Ϣʔβʔମݧʹͱͬͯॏཁͳͷ͸ϑϩϯτΤ ϯυͳͷͰɺͦͪΒʹ࣌ؒΛ࢖͍͍ͨ

Slide 13

Slide 13 text

ίʔυ඼࣭ͱͷόϥϯε • ΤϯδχΞͱͯ͠ίʔυ඼࣭͸कΓ͍ͨ • Ϗδωεͷ௕ظతͳ੒௕ʹ͸ίʔυͷॊೈ͞ ͕ॏཁ • ςετ΋͔ͬ͠Γॻ͖͍ͨ͠ɺՄಡੑ΋ߴ͘ อ͍ͪͨ

Slide 14

Slide 14 text

૬൓͢Δཁٻ • ޮ཰Λߴ͘อͪͭͭɺίʔυͷ඼࣭Λ΋ߴ͘ ҡ࣋͢Δ • ྆ํΛ࠷େʹ͢Δ͜ͱ͸Ͱ͖ͳ͍ͷͰɺόϥ ϯεʢଥڠ఺ʣΛߟ͑Δ • GemͦͷଞͷύϫʔΛ׆͔͢

Slide 15

Slide 15 text

3. RailsͷAPI։ൃʹؔ͢Δ πʔϧ

Slide 16

Slide 16 text

Rails͸͢Ͱʹޮ཰త • Railsͷʢॳظʣੜ࢈ੑͷߴ͞͸͔ͳΓͷ΋ͷ • େ͖ͳཧ༝ͷҰ͕ͭCoC (Convention over Configuration)ɺʮઃఆΑΓن໿ʯ • Ͱ͸ɺن໿Λ΋ͬͱͨ͘͞Μಋೖ͢Δͷ͸Ͳ ͏ͩΖ͏ʁ

Slide 17

Slide 17 text

ن໿Λಋೖ͢Δ • ن໿ΛಋೖͰ͖ͦ͏ͳՕॴΛߟ͑Δ • APIͷεΩʔϚ • αʔϏεΦϒδΣΫτͷAPI • RSpecͷॻ͖ํ

Slide 18

Slide 18 text

APIͷܗࣜʹ͍ͭͯͷن໿ • ࣗ෼ͨͪͰߟ͑ͯ΋΋ͪΖΜྑ͍ • ͕ɺ࣌ؒΛઅ໿͢ΔͨΊͷن໿ͷ࡞੒ʹ࣌ؒΛ࢖͏ͷ ͸… • ͢Ͱʹ͋Δن໿Λྲྀ༻͍ͨ͠ • JSON:API͕͋Δ͡ΌΜʂ • fast_jsonapi͕͋Δ͡ΌΜʂ

Slide 19

Slide 19 text

JSON:API • https://jsonapi.org/ • ;໊͚ͨ͟લͰ༗໊ʢʁʣͳJSONʹ͓͚Δ APIͷ࢓༷ • ར఺ɿࡉʑͨ͜͠ͱΛߟ͑ͳͯ͘Α͘ͳΔ • ܽ఺ɿ͔ͳΓ৑௕

Slide 20

Slide 20 text

fast_jsonapi • https://github.com/Netflix/fast_jsonapi • NetflixʹΑΔߴ଎ͳγϦΞϥΠβ࣮૷ • ActiveModelSerializerΑΓ͔ͳΓߴ଎ • ରԠ͍ͯ͠Δܗࣜ͸JSON:APIͷΈ

Slide 21

Slide 21 text

αʔϏεΦϒδΣΫτʹ͍ͭͯ ͷن໿ • αʔϏεΦϒδΣΫτɺͳΜ͔ͩΜͩ࢖͍ͨ ͍ͱ͖͕͋Δ • αʔϏεΦϒδΣΫτ͸Railͷ֎ͳͷͰɺن໿ ͸ଘࡏ͠ͳ͍ • Interactorͱ͍͏gemΛൃݟ

Slide 22

Slide 22 text

Interactor • https://github.com/collectiveidea/interactor • ϏδωεϩδοΫΛΧϓηϧԽ͢ΔͨΊͷgem • ϩʔϧόοΫ͕ఆٛͰ͖Δ͜ͱͱνΣΠϯΛ؆ ୯ʹॻ͚Δ͜ͱ͕ಛ௕ • `call`ϝιουʹΠϯλʔϑΣʔε͕౷Ұ͞ΕΔ

Slide 23

Slide 23 text

No content

Slide 24

Slide 24 text

RSpecʹؔ͢Δن໿ • RSpec͸͔ͬ͠Γॻ͍͍͖͍ͯͨ • ͱ͸͍͑ޮ཰ͱͷ݉Ͷ߹͍Ͱॻ͘ͷ͸Model Specͱ Request SpecͷΈɻ • Request Spec͸ෳࡶʹͳΓ΍͍͢ͷͰͳΜͱ͔͍ͨ͠ • rspec-request_describer͕͋Δ͡ΌΜ

Slide 25

Slide 25 text

rspec-request_describer • https://github.com/r7kamura/rspec- request_describer • describeͷҾ਺ʹ౉ͨ͠จࣈྻ͕ͦͷ··࣮ߦ ͞ΕΔϦΫΤετͷHTTPͷϝιουͱύεʹ ͳΔ • ύϥϝʔλ΍ID͸letͰࢦఆͰ͖Δ

Slide 26

Slide 26 text

autodoc • https://github.com/r7kamura/autodoc • ࣮ࡍʹ͸࢖͍ͬͯͳ͍͕ɺautodocΛ࢖͏ͱυ Ωϡϝϯτͷࣗಈੜ੒΋Մೳ • ࢖͍ͬͯͳ͍ཧ༝͸ɺೋਓͱ΋RSpec͕ಡΊ ΔͷͰͦͬͪಡΜͩ΄͏͕ૣ͍͔Β

Slide 27

Slide 27 text

4. ίʔυϨϏϡʔʹؔ͢Δ πʔϧͱ࢟੎

Slide 28

Slide 28 text

ίʔυϨϏϡʔͷޮ཰ • લఏͱͯ͠ɺίʔυ͸ඞͣϨϏϡʔ͢Δ • ϩδοΫ͕όάͬͯͳ͍͔ɺDBͷεΩʔϚ͸ େৎ෉͔ɺͳͲΛݟ͍ͨ • ࠣ຤ͳ఺͸Ͱ͖Δ͚ͩࣄલʹ௵͓͖͍ͯͨ͠

Slide 29

Slide 29 text

RuboCopͷ׆༻ • CircleCIͰRuboCopΛ૸ΒͤΔ • खݩͷΤσΟλͰautocorrectͯ͠ϨΠΞ΢τͷ໰୊ͱ ͔͸ίϛοτલʹ௵͢ • ຊ౰͸Siderͱ͔࢖͍͍͚ͨͲ͓͕ۚͳ͍ • ৄࡉ͸ https://speakerdeck.com/okuramasafumi/ training-rubocop ࢀরͷ͜ͱʢεϥΠυ͸ӳޠʣ

Slide 30

Slide 30 text

·ͱΊ

Slide 31

Slide 31 text

ޮ཰ͱอकੑͷཱ྆Λ໨ࢦͯ͠ • ن໿ΛಋೖͰ͖ͦ͏ͳͱ͜Ζʹ͸ੵۃతʹಋ ೖ͍ͯ͘͠ • GemͷྗΛआΓΕΔͱ͖ʹ͸आΓ͍ͯ͘ • ίʔυϨϏϡʔ͸େࣄͳͱ͜Ζ͚ͩʹߜͬͯ ͍͘