Upgrade to Pro — share decks privately, control downloads, hide ads and more …

二人チームにおけるバックエンド開発の効率化を求めて

110cd4dcaed019b3bd9809e541afdeb6?s=47 Masafumi Okura
December 08, 2018

 二人チームにおけるバックエンド開発の効率化を求めて

バックエンド二人(うち一人フロントエンド兼任)、フロントエンド一人という最小構成のチームにおける、バックエンド開発の効率化を模索する試みについてお話します。
具体的な話題としては、チーム人数が少ないことで生じる主な問題点、開発方針(速度と保守性のバランス)、RailsのAPI開発に関するツール(特にfast_jsonapiとinteractor)、コードレビューに関するツールと姿勢(RuboCopの使い方など)などが話題となります。
少人数のチームで開発されている方には特に参考になる内容になると思います。

110cd4dcaed019b3bd9809e541afdeb6?s=128

Masafumi Okura

December 08, 2018
Tweet

Transcript

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  23. None
  24. RSpecʹؔ͢Δن໿ • RSpec͸͔ͬ͠Γॻ͍͍͖͍ͯͨ • ͱ͸͍͑ޮ཰ͱͷ݉Ͷ߹͍Ͱॻ͘ͷ͸Model Specͱ Request SpecͷΈɻ • Request

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

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

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

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

  29. RuboCopͷ׆༻ • CircleCIͰRuboCopΛ૸ΒͤΔ • खݩͷΤσΟλͰautocorrectͯ͠ϨΠΞ΢τͷ໰୊ͱ ͔͸ίϛοτલʹ௵͢ • ຊ౰͸Siderͱ͔࢖͍͍͚ͨͲ͓͕ۚͳ͍ • ৄࡉ͸

    https://speakerdeck.com/okuramasafumi/ training-rubocop ࢀরͷ͜ͱʢεϥΠυ͸ӳޠʣ
  30. ·ͱΊ

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