Pro Yearly is on sale from $80 to $50! »

「技術的負債」について私から言えること私から言えないこと

 「技術的負債」について私から言えること私から言えないこと

omotesando.rb #41のテーマである「技術的負債」について喋ります。

開発者目線で、「負債っぽいやつ」を見つけたら すぐにアクションしたほうがいいということを喋ります。

右記のことについては喋りません。-> (「技術的負債」キーワード(になりそうなやつ)、ステークホルダーへの説明どうするか、成長に感謝しようとか 負債は生存者バイアスだとか、負債とは何かとかetc)

B122e77de860c4307034f0a041dabc8e?s=128

hoshino tsuyoshi

December 08, 2018
Tweet

Transcript

  1. ʮٕज़తෛ࠴ʯʹ͍ͭͯ ࢲ͔Βݴ͑Δ͜ͱ ࢲ͔Βݴ͑ͳ͍͜ͱ #omotesandorb #41 2018/12/06

  2. ໔੹ ओ؍ೖͬͯΔεϥΠυͰ͢ɻ จ੹͸৬৔Ͱ͸ͳ͘ࢲ (੕໺ twitter.com/hoppiestar) ʹ͋Γ ·͢

  3. ͓୊͸ʮٕज़తෛ࠴ʯͩͬͨ ʮԶ͕͠Ό΂Γ͍ͨʂʂʯ

  4. ௚ۙͷݱ৔͔Β: ෛ࠴ͬΆ͍΍ͭͷฦ٫ • redshift΁ͷΠϯϙʔτ(ΊͬͪΌϝϞϦϦʔΫ͢Δ)Λ embulkʹஔ͖׵͑ • ෆ҆ఆͩͬͨWercker v1ͷCIΛ CircleCI v2ʹҠߦ

    • ☕ hubot2ඖɾruboty1ඖΛ ruboty1ඖʹ౷߹ͯ͠ coffeeͷίʔυΛফͨ͠☕ • rubocop todoΛ1500ߦ ->130ߦʹݮΒͨ͠ • 3೥ͿΓͷrails updateͨ͠ • αϙʔτ੾Εͷruby2.1 -> ruby2.3ʹΞοϓσʔτ • ✨঎඼classͷdefault_scopeΛ1ݸফͨ͠✨
  5. ( ŋ´Ŗŋʆ)Ͳ΍

  6. ʮٕज़తෛ࠴ʯΩʔϫʔυ(ʹͳΓͦ͏ͳ΍ͭ) • εςʔΫϗϧμʔ΁ͷઆ໌Ͳ͏͢Δ͔ • Ϟνϕʔγϣϯ͕Ͳ͏ͱ͔ • εϓϦϯτʹͲ͏૊ΈࠐΉ͔ • ෛ࠴ͱ͔ܰʑʹ͍͏΂͖Ͱ͸ͳ͍ɺ੒௕ʹײँ͠Α͏ͱ͔ •

    ෛ࠴͸ੜଘऀόΠΞεͩͱ͔ • ෛ࠴ͱ͸Կ͔ͱ͔
  7. ʮٕज़తෛ࠴ʯΩʔϫʔυ(ʹͳΓͦ͏ͳ΍ͭ) • εςʔΫϗϧμʔ΁ͷઆ໌Ͳ͏͢Δ͔ • Ϟνϕʔγϣϯ͕Ͳ͏ͱ͔ • εϓϦϯτʹͲ͏૊ΈࠐΉ͔ • ෛ࠴ͱ͔ܰʑʹ͍͏΂͖Ͱ͸ͳ͍ɺ੒௕ʹײँ͠Α͏ͱ͔ •

    ෛ࠴͸ੜଘऀόΠΞεͩͱ͔ • ෛ࠴ͱ͸Կ͔ͱ͔ ࿩͞ͳ͍!!!!
  8. ࿩͢͜ͱ • ࡶ༻ܥͷখखઌςΫχοΫε • simplecov • Rails.logger • rubocop •

    (Ϩϕϧ͕௿͔ͬͨΒεϚϯɻɻɻɻ)
  9. ʮٕज़తෛ࠴ʯʹ͍ͭͯ ࢲ͔Βݴ͑Δ͜ͱ

  10. ໌೔ͷօ͞Μͷ͓͠͝ͱ • ʮ(࢓ࣄ, ࢓ࣄ…..)ʯ

  11. • ʮ(࢓ࣄ, ࢓ࣄ…..)ʯ • ʮ͋ɺ͜Εෛ࠴ͩʯ ໌೔ͷօ͞Μͷ͓͠͝ͱ

  12. • ʮ(࢓ࣄ, ࢓ࣄ…..)ʯ • ʮ͋ɺ͜Εෛ࠴ͩʯ • ʮͲ͏͠Α͏࣏ͦ͏͔ͳʯ ໌೔ͷօ͞Μͷ͓͠͝ͱ

  13. • ʮ(࢓ࣄ, ࢓ࣄ…..)ʯ • ʮ͋ɺ͜Εෛ࠴ͩʯ • ʮͲ͏͠Α͏࣏ͦ͏͔ͳʯ ඞͣͿͪ౰ͨΔ ໌೔ͷօ͞Μͷ͓͠͝ͱ

  14. (ෛ࠴ͬΆ͍΍ͭ)ݟ͚ͭͨΒͲ͏͢Δ͔

  15. ʮՄೳͳΒͦͷ৔ͰԿ͔ΞΫγϣϯ͢Δʯ ͷ͕ྑ͍!!!! ͱ͍͏࿩Λ͠·͢

  16. ෛ࠴ฦ٫ͷݱ৔ • ςετ଍͢ ☺☺☺☺☺ • ࢖ͬͯͳ͍ίʔυΛফ͢ ☺☺☺☺☺ • ίʔσΟϯάελΠϧΛ੔ཧ ☺☺☺

    • ݹ͍ϥΠϒϥϦͷΞοϓσʔτ ☺ • ෳࡶԽ͍ͯ͠Δ෦෼ͷϦϑΝΫλϦϯά ίεύ౓ (ओ؍) = ☺
  17. ෛ࠴ฦ٫ͷݱ৔ • ςετ଍͢ ☺☺☺☺☺ <- ͜Ε • ࢖ͬͯͳ͍ίʔυΛফ͢ ☺☺☺☺☺ •

    ίʔσΟϯάελΠϧΛ੔ཧ ☺☺☺ • ݹ͍ϥΠϒϥϦͷΞοϓσʔτ ☺ • ෳࡶԽ͍ͯ͠Δ෦෼ͷϦϑΝΫλϦϯά ίεύ౓ (ओ؍) = ☺
  18. ʮςετ଍͢ʯ

  19. • νʔϜͰʮॻ͍ͯ͑͑Μ΍Ͱʯͱ͍͏Ωϝ͚͓͚ͩͯ͠͹ ௚ͯ͠Okͦ͏(͍͍ͨͯେৎ෉ͦ͏) ʮ͋ɺ͜͜ςετ௨ͬͯͳͦ͞͏ʯ ʮςετ଍͢ʯνϟϯε

  20. • νʔϜͰʮॻ͍ͯ͑͑Μ΍Ͱʯͱ͍͏Ωϝ͚͓͚ͩͯ͠͹ ௚ͯ͠Okͦ͏(͍͍ͨͯେৎ෉ͦ͏) • ςετ࣮ߦ࣌ؒ஗͘ͳΓͦ͏ • େৎ෉ɺݩʑे෼஗͍…. • ฒྻςετͰ͓ۚͰԥΖ͏…. ʮ͋ɺ͜͜ςετ௨ͬͯͳͦ͞͏ʯ

    ʮςετ଍͢ʯνϟϯε
  21. ʮςετ଍͢ʯνϟϯε ʮ͋ɺ͜͜ςετ௨ͬͯͳͦ͞͏?ʯ • (ಡΜͰ΋ͪ͝Όͪ͝Όͯͯ͠Α͘Θ͔ΒΜ..)

  22. ʮςετ଍͢ʯνϟϯε • (ಡΜͰ΋ͪ͝Όͪ͝Όͯͯ͠Α͘Θ͔ΒΜ..) • ͋Γ͕ͪ • -> ͝ଘ஌ simplecov gem

    ศར ʮ͋ɺ͜͜ςετ௨ͬͯͳͦ͞͏?ʯ
  23. simplecovͷు͘Ϩϙʔτ

  24. simplecov gemศར • rspecগ͠஗͘ͳΔͷͰɺݟ͍ͨͱ͖ʹ͚ͩͰ΍Δ • spec/rails_helper.rbྫ • ↑؀ڥม਺Ͱ੾Γସ͑ͯΔɻCIͰ͸ONɻ։ൃऀ͸೚ҙɻ •

  25. simplecov gemศར • rspecগ͠஗͘ͳΔͷͰɺݟ͍ͨͱ͖ʹ͚ͩͰ΍Δ • spec/rails_helper.rbྫ • ↑؀ڥม਺Ͱ੾Γସ͑ͯΔɻCIͰ͸ONɻ։ൃऀ͸೚ҙɻ • ͔͠͠CircleCIͰฒྻςετ͢Δͱ͏·͘ಈ͔Μ

    -> codecov.io ศར
  26. codecov.io ͷϨϙʔτ simplecovͱҰॹ

  27. codecov.io ศར • CI্Ͱௐ΂ͨΧόϨοδΛ΋ͱʹϨϙʔτදࣔͯ͘͠ΕΔ • CircleCI্Ͱฒྻςετͯ͠΋ͪΌΜͱಈ͘ͷͰศར • ɹ •

  28. codecov.io ศར • CI্Ͱௐ΂ͨΧόϨοδΛ΋ͱʹϨϙʔτදࣔͯ͘͠ΕΔ • CircleCI্Ͱฒྻςετͯ͠΋ͪΌΜͱಈ͘ͷͰศར • READMEͱ͔ʹషΕΔόοξ΋͋ΔΑ • spec/rails_helper.rbྫ

    • (ॏๅ͍ͯ͠Δɺͱ͍͏ΑΓ΋ɺͨ·ʔʔʔʹݟΔ͙Β͍)
  29. ΧόϨοδ͸্͛ͱ͍ͨ΄͏͕ྑ͍(ܦݧஊ) • εϚʔϏʔͷAPI͸ෛ࠴ଟ͍͕ΧόϨοδ͸ߴ͘ɺrails update ࣌ɺॿ͔ͬͨ • 2೥લ࣌఺Ͱ80%ۙ͋ͬͨ͘ -> ࠓ90%୆ •

    ɹ •
  30. ΧόϨοδ͸্͛ͱ͍ͨ΄͏͕ྑ͍(ܦݧஊ) • εϚʔϏʔͷAPI͸ෛ࠴ଟ͍͕ΧόϨοδ͸ߴ͘ɺrails update ࣌ɺॿ͔ͬͨ • 2೥લ࣌఺Ͱ80%ۙ͋ͬͨ͘ -> ࠓ90%୆ •

    ʮRails ΞοϓάϨʔυΨΠυʯʹ΋ͦ͏ॻ͍ͯ͋Δ •
  31. ͱ͍͏Θ͚Ͱ • Q. ʮςετ଍͢ʯνϟϯε ʹग़͘Θͨ͠Β?? • A.

  32. ͱ͍͏Θ͚Ͱ • Q. ʮςετ଍͢ʯνϟϯε ʹग़͘Θͨ͠Β?? • A. ͦͷ৔Ͱॻ͚͹͍͍ͱࢥ͏!! • (Ұ୴issueʹ͢Δ…

    ͱ͔ϝϯυΠͷͰɺՄೳͳΒ͙͢ॻ͘)
  33. ෛ࠴ฦ٫ͷݱ৔ • ςετ଍͢ ☺☺☺☺☺ • ࢖ͬͯͳ͍ίʔυΛফ͢ ☺☺☺☺☺ <- ͭ͗͜Ε •

    ίʔσΟϯάελΠϧΛ੔ཧ ☺☺☺ • ݹ͍ϥΠϒϥϦͷΞοϓσʔτ ☺ • ෳࡶԽ͍ͯ͠Δ෦෼ͷϦϑΝΫλϦϯά ίεύ౓ (ओ؍) = ☺
  34. ʮ࢖ͬͯͳ͍ίʔυফ͢ʯ

  35. • νʔϜͰʮফͯ͑͑͠Μ΍Ͱʯͱ͍͏Ωϝ͚͓͚ͩͯ͠͹Ok ͦ͏(͍͍ͨͯେৎ෉ͦ͏) • …. • …. ʮ͋ɺ͜ͷϝιου(or Ϋϥε)࢖ͬͯͳͦ͞͏ʯ ʮ࢖ͬͯͳ͍ίʔυফ͢ʯνϟϯε

  36. • νʔϜͰʮফͯ͑͑͠Μ΍Ͱʯͱ͍͏Ωϝ͚͓͚ͩͯ͠͹Ok ͦ͏(͍͍ͨͯେৎ෉ͦ͏) • ͳΜ͔յͨ͠Βා͍…. • େৎ෉ɺ౓ڳͰ৐Γ੾Ζ͏(?)…. ʮ͋ɺ͜ͷϝιου(or Ϋϥε)࢖ͬͯͳͦ͞͏ʯ ʮ࢖ͬͯͳ͍ίʔυফ͢ʯνϟϯε

  37. ࢖ͬͯͳ͍ίʔυΛফ͢ํ๏ ೉͍͠ॱ • ͍͖ͳΓফ͢ -> • Α͘ಡΜͰ͔Βফ͢ -> •

  38. ࢖ͬͯͳ͍ίʔυΛফ͢ํ๏ ೉͍͠ॱ • ͍͖ͳΓফ͢ -> • Α͘ಡΜͰ͔Βফ͢ -> • Α͘Θ͔ΒΜͷͰͱΓ͋͑ͣϩάΛೖΕΔ

    -> • ޙ೔ফ͢ • ݟͳ͔ͬͨ͜ͱʹ͢Δɾ๨ΕΔ -> ΘΓͱΑ͘ͳ͍
  39. ʮ(ফͤͦ͏͚ͩͲ)Α͘Θ͔ΒΜͷͰͱΓ͋͑ͣϩάΛ ೖΕ·͢ʯ

  40. ʮ(ফͤͦ͏͚ͩͲ)Α͘Θ͔ΒΜͷͰͱΓ͋͑ͣϩάΛ ೖΕ·͢ʯ ʮ࢖ͬͯͳ͍ϝιου͕ݺ͹Ε·ͨ͠ʯͱ͍͏(ҰݟͻͲ͍)ϩά

  41. ʮ(ফͤͦ͏͚ͩͲ)Α͘Θ͔ΒΜͷͰͱΓ͋͑ͣϩάΛ ೖΕ·͢ʯ ʮ࢖ͬͯͳ͍ϝιου͕ݺ͹Ε·ͨ͠ʯͱ͍͏(ҰݟͻͲ͍)ϩά • ຊ౰ʹݺ͹Εͳ͚Ε͹ϩάʹग़ͳ͍͸ͣ!! ʮΑ͠ʯ

  42. ʮ(ফͤͦ͏͚ͩͲ)Α͘Θ͔ΒΜͷͰͱΓ͋͑ͣϩάΛ ೖΕ·͢ʯ ʮ࢖ͬͯͳ͍ϝιου͕ݺ͹Ε·ͨ͠ʯͱ͍͏(ҰݟͻͲ͍)ϩά • ຊ౰ʹݺ͹Εͳ͚Ε͹ϩάʹग़ͳ͍͸ͣ!! • ʮsentry࢖͑͹..?ʯ • ·ͬͱ͏ͳҙݟ… ͔͠͠ຊ౰ʹݺ͹Εͯͨ৔߹ʹϜμ

    ʮΑ͠ʯ
  43. ফ͢ॱ൪ʹ஫ҙ(ओʹDBपΓͷҰൠ࿦) • DBͷΧϥϜ࡟আͱcontroller/model/view࡟আ͸ஈ֊σϓϩΠͨ͠ ΄͏͕ྑ͍͜ͱ͕ଟ͍ɺΑΓ҆શʹσϓϩΠͰ͖ͳ͍͔͸(ҰԠ) ߟ͑ͨ΄͏͕ྑͦ͞͏ • ྫ • viewͷมߋͱALTER TABLE

    DROP COLUMN Λ͍ͬ΃Μʹ ΍Βͳ͍ɺͱ͔ɺɺ • ྫ͑͹Sidekiq΋ҰԠredisͳͷͰ஫ҙɻ҆қʹΫϥε໊Ϧ ωʔϜ͢Δͱഁ໓͢Δɺɺͱ͔ɺɺ
  44. ͱ͍͏Θ͚Ͱ • Q. ʮ࢖ͬͯͳ͍ίʔυফ͢ʯνϟϯε ʹग़͘Θͨ͠Β?? • A. ͦͷ৔Ͱফͤ͹͍͍ͱࢥ͏!! • ফ͢ͷ͕༐ऀ

    • ා͚Ε͹ϩάΛग़͢
  45. ෛ࠴ฦ٫ͷݱ৔ • ςετ଍͢ ☺☺☺☺☺ • ࢖ͬͯͳ͍ίʔυΛফ͢ ☺☺☺☺☺ • ίʔσΟϯάελΠϧΛ੔ཧ ☺☺☺

    <- ͭ͗͜Ε • ݹ͍ϥΠϒϥϦͷΞοϓσʔτ ☺ • ෳࡶԽ͍ͯ͠Δ෦෼ͷϦϑΝΫλϦϯά ίεύ౓ (ओ؍) = ☺
  46. ʮίʔσΟϯάελΠϧΛ੔ཧʯ

  47. • νʔϜͰʮ௚ͯ͑͑͠Μ΍Ͱʯͱ͍͏Ωϝ͚͓͚ͩͯ͠͹Ok ͦ͏(͍͍ͨͯେৎ෉ͦ͏) • rubocopͱ͔ೖΕ͓ͯ͘ɾCIͰνΣοΫ͢Δ • ͳΜ͔յͨ͠Βා͍…. • େৎ෉ɺ౓ڳͰ৐Γ੾Ζ͏…. ʮ(ϨϏϡʔதʹ)

    ͳΜ͔ελΠϧʹҰ؏ੑ͕ͳ͍…ʯ ʮίʔσΟϯάελΠϧΛ੔ཧʯ͢Δνϟϯε
  48. • Θ͔Βͳ͘͸ͳ͍ • rubyͳͷͰ • ͜Ε΋νʔϜͰ߹ҙͱͬͱ͚͹ྑͦ͞͏(࢖Θͳ͍ɺͱ͔) ʮrubocopͱ͔͍Ε͓ͯ͘ʯʹ͍ͭͯͷڋ൱൓Ԡ

  49. • `—lint` Φϓγϣϯ • Lint Cop͚ͩνΣοΫ͢Δ΍ͭ • ࣮ߦ଎͍ɾׂͱόάݟ͔ͭΔ • ࠷ॳʹ

    `DisabledByDefault: true` ͱॻ͘ • σϑΥϧτશ෦ແޮʹ͢Δͱ͏Δ͘͞ͳ͍ ΏΔ͘rubocopΛ࢝ΊΔબ୒ࢶ
  50. • εϚʔϏʔͷAPI͸ॳظʹ.rubocop.yml͋ͬͨͷͰͦΕʹै͏ • ͨͩ͠CIͰνΣοΫͯ͠ͳ͔ͬͨͷͰਏ͍ײ͡ʹ • CIͰνΣοΫ͢ΔΑ͏ʹͨ͠(͜ΕͰtodo૿͑ͳ͘ͳΔ) • ઃఆʹ͍ͭͯҟ࿦͕ग़ͨΒ౎౓ௐ੔͍ͯ͘͠ײ͡Ͱྑͦ͞͏ εϚʔϏʔͷAPIͷrubocop

  51. • ݸਓతʹtodoݮΒ͢ͷ޷͖ͳͷͰΨοͱ΍͍ͬͯͬͨ • ࢥ͍ೖΕͷ͋Δྫ • (ৼΓฦͬͯΈͯ)ਖ਼௚ͦΜͳʹؤுΜͳͯ͘΋ྑ͔͔ͬͨ΋ • ͜͜Ͱ΋΍ͬͺΓΧόϨοδߴ͍ͱ҆৺ • ΍ͬͺΓϩά؂ࢹେࣄɻsentryೖΕͱ͘ͱ҆৺

    εϚʔϏʔͷAPIͷrubocop(2)
  52. ͱ͍͏Θ͚Ͱ • Q. ʮίʔσΟϯάελΠϧΛ੔ཧʯ͢Δνϟϯε ʹग़͘Θ͠ ͨΒ?? • A. ͦͷ৔Ͱ࣏ͤ͹͍͍ͱࢥ͏!! •

    େมͦ͏ͱࢥͬͨΒ • rubocopͰ Enabled:false͢Ε͹͍͍ͱࢥ͏
  53. ෛ࠴ฦ٫ͷݱ৔ • ςετ଍͢ ☺☺☺☺☺ • ࢖ͬͯͳ͍ίʔυΛফ͢ ☺☺☺☺☺ • ίʔσΟϯάελΠϧΛ੔ཧ ☺☺☺

    • ݹ͍ϥΠϒϥϦͷΞοϓσʔτ ☺ <- ͭ͗͜Ε • ෳࡶԽ͍ͯ͠Δ෦෼ͷϦϑΝΫλϦϯά ίεύ౓ (ओ؍) = ☺
  54. ʮݹ͍ϥΠϒϥϦͷΞοϓσʔτʯ

  55. • ͜Εʹ͍ͭͯ͸͋·Γݴ͏͜ͱ͕ͳ͍ • ʮ΍͍͔ͬͯ͘͠ͳ͍ʯ ݹ͍ϥΠϒϥϦͷΞοϓσʔτ

  56. • ͜Ε௒൵͍͠΍ͭ • ͦΜͳʹܰ͘rails updateͰ͖ͳ͍(ݱ࣮) • ͚Ͳؾ͍ͮͨͷʹ௚͞ͳ͍ͷ͸΋͍ͬͨͳ͍ • issueʹॻ͘? ͍΍͍΍….

    ʮ৽͍͠RailsͳΒ͜͏ॻ͚Δͷʹ!!! ʢٽ)ʯ ʮݹ͍ϥΠϒϥϦͷΞοϓσʔτʯ͢Δνϟϯε
  57. ྫ: rails5.2͔ΒAR::Base.sanitize_sql_array͕publicʹঢ֨͢Δ όοΫϙʔτ

  58. ྫ: rails5.2͔ΒAR::Base.sanitize_sql_array͕publicʹঢ֨͢Δ όοΫϙʔτ

  59. ྫ: rails5.2͔ΒAR::Base.sanitize_sql_array͕publicʹঢ֨͢Δ όοΫϙʔτ • ͜ͷϞδϡʔϧΛincludeͯ͠࢖͏ • rails5.2ʹͳͬͨΒࡶʹraiseͯ͠rails͕ىಈͰ͖ͳ͍Α͏ʹ͢Δ

  60. ͱ͍͏Θ͚Ͱ • Q. ʮ৽͍͠railsͳΒ͜͏ॻ͚Δͷʹʯνϟϯε ʹग़͘Θͨ͠ Β?? • A. ͦͷ৔ͰόοΫϙʔτͯ͠΋͍͍ͱࢥ͏!! •

    ͍ܰ΍ͭͳΒɺͨ·ʹόοΫϙʔτͰ͖Δ͜ͱ΋͋Δ • ΋ͪΖΜίϝϯτॻ͚ͩ͘Ͱ΋ • ʮTODO: rails5.2ʹ্͛ͨΒ͜͏௚͠·͢!ʯͱ͔
  61. ͱ͍͏Θ͚Ͱ (ແཧ΍Γ·ͱΊ) • Q. νϟϯε ʹग़͘Θͨ͠Β?? • A. ͦͷ৔Ͱ௚ͤΕ͹௚͢ͱ͍͍ͱࢥ͏!!

  62. None
  63. εϥΠυ͸Ҏ্ • ࣗݾ঺հ • גࣜձࣾεϚʔϏʔ • ੕໺߶ࢤ(github.com/hoshinotsuyoshi) • ࢠҭͯੈ୅ɾঁੑ޲͚ͷECαΠτ࡞ͬͯΔ •

    rubyͱ͔Πϯϑϥͱ͔͕޷͖