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

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

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

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

Masafumi Okura

December 08, 2018
Tweet

More Decks by Masafumi Okura

Other Decks in Technology

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  23. View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  30. ·ͱΊ

    View Slide

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

    View Slide