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

BIT VALLEY 2018 ミクシィにおけるTDDの取り組みと実態

dsakamoto
September 10, 2018

BIT VALLEY 2018 ミクシィにおけるTDDの取り組みと実態

dsakamoto

September 10, 2018
Tweet

More Decks by dsakamoto

Other Decks in Technology

Transcript

  1. (c) mixi, Inc, ࣗݾ঺հ • גࣜձࣾϛΫγΟ • ࡔຊ େี •

    2017೥౓৽ଔೖࣾ • ීஈ͸αʔόαΠυΤϯδχΞ • RubyΛॻ͔͘AWSͱٔΕ͍ͯΔ • झຯͰElixir, JavaScript, GoͳͲ
  2. (c) mixi, Inc, ࣗݾ঺հ • גࣜձࣾϛΫγΟ • ࡔຊ େี •

    2017೥౓৽ଔೖࣾ • ීஈ͸αʔόαΠυΤϯδχΞ • RubyΛॻ͔͘AWSͱٔΕ͍ͯΔ • झຯͰElixir, JavaScript, GoͳͲ ͍ͬ͘͢͟͝Γ
  3. (c) mixi, Inc, ͳͥςετݚमΛߦ͏ͷ͔ • ͲͷΑ͏ͳܗͰ͋ΕςετΛॻ͘ͱ͍͏ͷ͸ҰൠతͰ͋ΓશࣾతʹߦΘΕͯ ͍Δ΋ͷ • →աڈɺݚमͱͯ͠ߦΘΕ͍ͯͳ͔ͬͨ •

    →ͦ΋ͦ΋ςετ͢Βॻ͍ͨ͜ͱͷͳ͍৽ଔ͕഑ଐ͞Ε͍ͯͨ • ݁Ռͱ࣭ͯ͠ͷྑ͘ͳ͍ςετίʔυ͕ॻ͔ΕΔ • ΋͘͠͸ͦ΋ͦ΋ςετ͕ॻ͔Εͳ͍ • ͱ͍͏ݱ৔͔Βͷ੠Λ౿·͑ݚमʹ૊Έࠐ·Εͨ
  4. (c) mixi, Inc, TDD Challenge • ৽ଔͰ޷ධͩͬͨςετݚमΛֶੜ޲͚Πϕϯτͱͯ͠ΞϨϯδ • ֶੜ࣌୅ʹ͸ͳ͔ͳ͔ςετΛॻ͘͜ͱ͕ͳ͍ •

    ͦ΋ͦ΋Ͳ͏΍ͬͯॻ͍͍͚ͯ͹͍͍͔Θ͔Βͳ͍ • ςετͷॻ͖ํ͔ΒTDDͷϑϩʔΛମݧ • 9/7(ۚ)ʹ΋։࠵͠·ͨ͠
  5. (c) mixi, Inc, લఏ • ϛΫγΟࣾͰ͸ଟछଟ༷ͳαʔϏε͕ల։͞Ε͍ͯ·͢ • νʔϜ͝ͱʹٕज़ελοΫ΋։ൃελΠϧ΋શ͘ҟͳΔ • Web

    app, Android/iOS app, Unity, etc etc…. • શࣾͰ౷Ұͷ։ൃख๏ͳͲ͸ͳ͘దࡐదॴ • ฐࣾΤϯδχΞͷTDDʹର͢Δؾ࣋ͪΛฉ͍ͯΈ·ͨ͠
  6. (c) mixi, Inc, શମ΁ͷΞϯέʔτ • ճ౴ऀ਺ 38໊ • TDDΛ஌͍ͬͯ·͔͢ʁ •

    ॴଐ͍ͯ͠ΔνʔϜͰTDDΛ࣮ફ͍ͯ͠·͔͢ʁ • TDDΛ࣮ફ্ͨ͠Ͱײͨ͡ϝϦοτɾσϝϦοτ • ଞͷਓ΍νʔϜϝϯόʔʹTDDΛקΊ͍ͨͰ͔͢ʁ • (࣮ફ͍ͯ͠ͳ͍৔߹͸)ͳ࣮ͥફ͍ͯ͠·ͤΜ͔ʁ
  7. (c) mixi, Inc, શମ΁ͷΞϯέʔτ • ճ౴ऀ਺ 38໊ • TDDΛ஌͍ͬͯ·͔͢ʁ •

    ॴଐ͍ͯ͠ΔνʔϜͰTDDΛ࣮ફ͍ͯ͠·͔͢ʁ • TDDΛ࣮ફ্ͨ͠Ͱײͨ͡ϝϦοτɾσϝϦοτ • ଞͷਓ΍νʔϜϝϯόʔʹTDDΛקΊ͍ͨͰ͔͢ʁ • (࣮ફ͍ͯ͠ͳ͍৔߹͸)ͳ࣮ͥફ͍ͯ͠·ͤΜ͔ʁ
  8. (c) mixi, Inc, Ξϯέʔτ·ͱΊ • ϝϦοτ • ςετʹ͍ͭͯ೦಄ʹஔ͖ͳ͕Β࡞ۀΛਐΊΔ͜ͱͰ࢓༷࿙ΕΛճආɺઃܭΛ͢͢Ί΍͘͢ͳͬ ͨͱײ͍ͯ͡Δ •

    ෆ҆Λίϯτϩʔϧ͠ͳ͕Βண࣮ʹҰาͣͭਐΊΔ҆৺ײ͕ϝϦοτͱͯ͠ײ͡ΒΕ͍ͯΔ • σϝϦοτ • ςετΛճ্͢Ͱͷ؀ڥ੔උ΍ςετίʔυͷ؅ཧɾӡ༻ίετ͕ߴ͍ • ։ൃ͢ΔϓϩμΫτͷੑ࣭ɺϑΣʔζʹΑͬͯ͸ෆద౰ͳ৔߹͕ଟ࣮͘ࡍʹಋೖ͍ͯ͠ͳ͍ύ λʔϯ΋
  9. (c) mixi, Inc, ݸਓతͳ͓ؾ࣋ͪ • “ςετۦಈ։ൃ͸ϓϩάϥϛϯάதͷෆ҆Λίϯτϩʔϧ͢Δख๏ͩ” • ςετۦಈ։ൃ ·͕͖͑ •

    ෆ҆ͳ఺Λ໌Β͔ʹ͠ͳ͕ΒਐΊΔ • ࢓༷΍ઃܭʹ͍ͭͯਂ͘ߟ͑Δඞཁ • ͦͷաఔͰ࿙ΕͳͲΛ๷͙͖͔͚ͬͱͳͬͯΑ͍ • ͱ͍͏͔جຊతʹࣗ෼ࣗ਎͕৴͡ΒΕͳ͍!!! • TDD͕͙ͦΘͳ͍෦෼Ͱಋೖͯ͠ίετ͕େ͖͘ͳΔͷ͸ຊ຤స౗
  10. (c) mixi, Inc, શମ޲͚Ξϯέʔτ • ճ౴਺ 38 • TDDΛ஌͍ͬͯ·͔͢ʁ •

    ॴଐ͍ͯ͠ΔνʔϜͰTDDΛ࣮ફ͍ͯ͠·͔͢ʁ • TDDΛ࣮ફ্ͨ͠Ͱײͨ͡ϝϦοτɾσϝϦοτ • ଞͷਓ΍νʔϜϝϯόʔʹTDDΛקΊ͍ͨͰ͔͢ʁ • (࣮ફ͍ͯ͠ͳ͍৔߹͸)ͳ࣮ͥફ͍ͯ͠·ͤΜ͔ʁ
  11. (c) mixi, Inc, TDDΛ΍͍ͬͯͯΑ͔ͬͨ͜ͱɺಘΒΕͨϝϦοτʹ͍ͭͯڭ͍͑ͯͩ͘͞ ࣮૷ʹࣗ৴͕࣋ͯ·͢ɻ جຊతʹʮςετ͕͋Δʯ͜ͱ͕อূ͞Ε͍ͯΔͷͰɼ҆৺ͯ͠ίʔυΛॻ͍ͯJenkins͓͡͞ΜʹౖΒΕΔ͜ͱ͕Ͱ͖Δ ࣮૷࿙Ε͕ݮͬͨ / ظ଴͢Δಈ࡞͕Θ͔Γ΍͔ͬͨ͢ ۦಈͰܶతʹخ͍͜͠ͱ͸ࢥ͍͔ͭͳ͍ʢςετͦͷ΋ͷ͸͋Δ͚Ͳʣɻ

    ઌʹςετΛ४උ͢Δ͜ͱͰɺ࣮૷࣌ʹԿ͕ඞཁͱ͞Ε͍ͯΔ͔ɺߟ͑ͳ͚Ε͹ͳΒͳ͍ͷ͔ͱ͍ͬͨ͜ͱΛࣗવͱҙࣝ͢ΔΑ͏ʹͳͬͨ ·ͨɺςετ͕ઌߦ͢Δ͜ͱͰɺͦͷ৔͠ͷ͗ͷ࣮૷Ͱ͸ͳ͘ςετ͕Ͱ͖Δ࣮૷͕Ͱ͖ͨΓɺϦϑΝΫλ࣌ͷ҆৺ʹͭͳ͕ͬͨΓ͢Δͱײ͍ͯ͡Δ ಛʹOSSͱͯ͠ެ։͢Δࡍʹ͸πʔϧͷ৴པੑ୲อ΍ܰඍͳෆ۩߹ࠞೖΛ๷͛Δͷ͕ྑ͍ɻ ஌Βͳ͍ίʔυ΍֮͑ͯͳ͍ίʔυʹमਖ਼͕ඞཁʹͳͬͯ΋ɺ҆৺ͯ͠มߋΛՃ͑Δ͜ͱ͕Ͱ͖Δ ϨΞέʔε΍ڥքΛ͜΅ͣ͞ʹॻ͚Δ͠ɺάϦʔϯɾϨουΛ܁Γฦ͢͜ͱͰୡ੒ײ͕ಘ΍͍͢ όά͕ίϛοτ͞Εʹ͘͘ͳͬͯ݁Ռతʹ඼্࣭͕͕Δɻ όάमਖ਼ʹ͓͍ͯɺใࠂ͞ΕͨόάΛ࠶ݱ͢ΔςετΛ࡞੒͔ͯ͠Β࣮૷Λमਖ਼͢Δ͜ͱͰແҙຯͳվम (վमͨͭ͠΋Γ͕ͩվमͰ͖ͳ͍) ΛճආͰ͖ΔϝϦοτΛײ͡Δɻ ࣮૷ͷલʹৼΔ෣͍͓Αͼ࢓༷͕໌֬ʹͳΓɺઃܭͷॿ͚ʹͳΔ લ৬Ͱ΍͍͕ͬͯͨQAͰݕূ͢Δ߲໨͕ݮͬͨɻ ϦϞʔτϦϙδτϦʹpush͢ΔલʹඞͣςετΛ௨͢ඞཁ͕͋ΔϫʔΫϑϩʔʹ͢Δ͜ͱͰࣄނ͕ݮͬͨɻ ࣮૷͠๨ΕΛ๷͙͜ͱ͕Ͱ͖ͨɻظ଴͢Δڍಈ͕੔ཧ͞ΕͲ͏ৼΔ෣͏΂͖͔ઃܭͬΆ͍͜ͱ͕Ͱ͖ͨɻ ࡉ͔ͳϛεʹؾ͖ͮ΍͍͢ test feed backʹΑΔproduction codeͷ඼࣭޲্ ૄ݁߹ͳ࣮૷ɺ࢓༷΍ಈ࡞αϯϓϧͷςετʹΑΔ໌จԽ ςετΛॻ͘தͰ࢓༷Λ໌֬ԽͰ͖Δɻ࢓༷͸ܾ·ͬͨͱࢥ͍͕ͬͯͨ࿙Ε͍ͯͨέʔεʹؾ෇͘͜ͱ͕Ͱ͖Δɻ ςετϑΝʔετͰ͸ͳͯ͘΋ɺςετΛॻ͖ͳ͕Β։ൃΛਐΊΔͱ҆৺ײ͕͋Δ viewʹϩδοΫؙग़͠ɺͳͲͻͲ͍࣮૷ʹͳΔ͜ͱ͸ͳ͘ͳͬͨ rubyಈ͔͢·ͰΘ͔ΒΜͷͰઌʹςετॻ͍ͱ͘ͱศར ϝιουΛ௨͢ςετΛॻ͘ͷ͔࢓༷ʹ४ͨ͡ςετΛॻ͘ͷ͔ߟ͑ΔΑ͏ʹͳͬͨؾ͕͢Δ
  12. (c) mixi, Inc, ൓ରʹTDDΛਐΊΔʹ͋ͨͬͯࠔͬͨ͜ͱɺσϝϦοτͩͳͱײͨ͜͡ͱʹ͍ͭͯڭ͍͑ͯͩ͘͞ ࡶͳςετ΋ଟʑ͋Δ TDDΛ໌จԽͨ͜͠ͱʹΑΔྫ֎ͷೝΊʹ͘͞ ϓϩδΣΫτ͕ڊେͩͱςετΛ࣮ߦ͢Δͷʹ͔͔࣌ؒͬͯɺ͍͍ͪͪςετۦಈͯͨ͠Β͕͔͔࣌ؒͬͯ͠·͏ɻ ෳ਺ਓͰ΍͍ͬͯ͘ͱɺͦΕͧΕඞཁͱࢥ͍ͬͯΔ͜ͱͳͲͷՁ஋؍͕߹Θͳ͔ͬͨΓ͢ΔͷͰ͙͢ʹಋೖͱ͍͏͜ͱ͕೉͘͠ײ͡Δ ɾClean ArchitectureͷΑ͏ʹςετۦಈΛલఏͱͨ͠ઃܭ͸ಘͯͯ͠ίʔυྔ͕૿େ͕ͪ͠ͳͷͰͦ͜͸σϝϦοτͷ̍ͭͱͳΔͱࢥΘΕΔ

    ɾTDDΛ࣮ફ͍ͯ͠ͳ͍ൺֱతग़དྷΔதڃΤϯδχΞ΁ͷཧղ͕ಘΒΕʹ͍͘໘΋͋Δ (্هͷίʔυྔ͕૿େ͢Δ໰୊΋ͦͷ̍ͭͱࢥΘΕΔ) ɾςετͷཻ౓ΛͲͷఔ౓·Ͱ୲อ͢Δ΂͖͔͸Αٞ͘࿦ʹͳΔɻશέʔεΛΧόʔͰ͖Ε͹ཧ૝͕ͩݱ࣮తʹ͕࣌ؒ଍Γͳ͍͜ͱ΋ଟ͘ɺམͱ͠ॴΛܾΊΔͨΊͷ൑அࡐྉͱͯ͠ઈରతͳ ج४͕ଘࡏ͠ͳ͍ ɾTDDʹ͓͚ΔΫϥεઃܭ (ΞϓϦέʔγϣϯଆ΋ͦ͏͕ͩςετίʔυଆͷํ΋) Λ঺հ͍ͯ͠Δྫ͸গͳ͍ͷͰͦ͜ͷϕετϓϥΫςΟε͸஌Γ͍ͨ TDDະܦݧऀʹςετͷॏཁੑΛ஌Βͳ͍ਓʹॏཁੑɺϝϦοτΛઆ໌͢Δɺ࣮ײͯ͠΋Β͏ͷ͕ࠔ೉ ࠓ͸৽نࣄۀΛ΍͍ͬͯΔͨΊɺ࡞Γ௚͠΍ϒϥογϡΞοϓͷաఔͰςετͷҙ͕ٛͳ͘ͳͬͨΓ଍ᐫʹͳΔ͜ͱ΋ଟ͍ͷͰɺ΍Ίͯ͠·͍·ͨ͠ɻ ͪΐͬͱ໘౗ɻ ࢓༷͕໌֬ʹ༩͑ΒΕ͓ͯΒͣɺͨͱ͑͹ίϯϙʔωϯτͷڥքͰͷ࢓༷͸ዞҙతʹܾΊΒΕΔ৔߹ɺઌʹૈ࣮͘૷͢Δํ͕ΑΓద੾ͳ࢓༷͓ΑͼઃܭΛܾఆͰ͖ΔΑ͏ʹࢥͬͨɻTDDΛݪ ཧతʹద༻͠Α͏ͱ͢Δͱɺ࢓༷ → ઃܭͱ͍͏ྲྀΕ͕Ұํ޲ʹա͗Δؾ͕͢Δɻ·ͨɺΫϥΠΞϯτΞϓϦͷΑ͏ʹϏϧυ͓Αͼςετʹ10෼୯ҐͰ͕͔͔࣌ؒΓɺ࢓༷͕͜Ζ͜ΖมΘΔ։ ൃʹ͓͍ͯ͸͋·ΓTDD͸͙ͦΘͳ͍Α͏ʹײͨ͡ɻ ήʔϜΛ։ൃ͢Δ͏͑Ͱ͸TDDʹ޲͍͍ͯΔ఺ɺͦ͏Ͱ͸ͳ͍఺͕ଘࡏ͢ΔͷͰѻ͍͕೉͍͠ɻ Ͳ͏ͯ͠΋ೲظ͕ഭΔͱ㚽ΖʹͳΔɻ ৐ΓؾͰ͸ͳ͍ਓͷ࢓ࣄͷύϑΥʔϚϯε͕ۃ୺ʹԼ͕Δ৔߹͕͋Δɻ ಛʹࢥ͍͔ͭͳ͍Ͱ͢ ςετέʔεΛա৴ͯ͠όά͕ൃݟͰ͖ͳ͍ test codeͷ؅ཧίετ ֎෦αʔϏε΁ͷґଘόϦόϦͳ΋ͷ΍ίϯτϩʔϥͳͲ্ҐͷϨΠϠʔͰ͸͏·͍͔͘ͳ͍ ࢓༷͕ᐆດͳதͰͱΓ͋͑ͣίʔυΛॻ͖ग़͢ͱ͍͏͜ͱ͕Ͱ͖ͳ͍ɻͦͷ৔߹݁ہޙ͔ΒςετΛॻ͍ͯTest DrivenʹͰ͖ͳ͔ͬͨΓ͢Δɻ ຊ౰ʹςετ͚͔ͩΒॻ͖࢝ΊΔͷ͸೉͍͠ & ޮ཰͕ѱ͍ͱࢥ͏ طଘͷίʔυϕʔεʹςετίʔυ͕੔͍ͬͯͳ͍ͱɺςετΛಋೖ͢Δ·Ͱʹ͕͔͔࣌ؒΔ
  13. (c) mixi, Inc, ςετݚमΛड͚ͨ৽ଔ޲͚Ξϯέʔτ • ճ౴਺14 • ݚमΛड͚ΔલͷTDDʹ͍ͭͯ (΍͍͔ͬͯͨɺ஌Βͳ͍͔ͳͲ) •

    ݚमޙɺ഑ଐઌ΍ݸਓͰͷ։ൃͰTDDΛ࣮ફ͍ͯ͠·͔͢ • TDDͷ࣮ફ΍͍ͬͯΔ or ΍͍ͬͯͳ͍ཧ༝͸ͳΜͰ͔͢ʁ
  14. (c) mixi, Inc, TDDͷ࣮ફ΍͍ͬͯΔ or ΍͍ͬͯͳ͍ཧ༝͸ͳΜͰ͔͢ʁ ͍··Ͱͷίʔυʹ΋ςετ͸ॻ͔Ε͍ͯΔ͠ɼTDD͸૘շײ͕͋Δ͔Β ݱঢ়ͷϓϩμΫτʹςετΛಋೖ͢Δ͜ͱͷ࡞ۀίετ͕ߴ͍, ৽نͰ࡞੒͢Δ৔߹͸ςετΛॻ͘ ςετΛॻ͘͜ͱͰࠓ͔Βॻ͘ίʔυͷ࢓༷ʹ͍ͭͯͷཧղ͕ਂ·Δɻ

    ςετΛॻͨ͘ΊʹϝιουͷΠϯλʔϑΣʔεΛܾΊΔඞཁ͕͋ΔͷͰ៉ྷͳίʔυ͕ॻ͚ΔΑ͏ʹͳΔؾ͕͢Δɻ TDDͷਖ਼ղ͕Θ͔Βͳ͍ ݁ہTDD͠΍͍࣮͢૷Λॻ͍ͯɺςετ௨࣮ͬͯ૷Ͱ͖͚ͨͲɺͦͷؔ਺͸࢖͍΍͍͢΋ͷ͔ʁͱ͍͏ͷʹؕͬͨͷͰɻ ͋ͱUnityͰςετॻ͍ͯࢥͬͨͷ͸ϑϨʔϜϫʔΫଆͰ༻ҙͯ͠ΔΫϥεΛςετͰnew()͢Δํ๏͕Θ͔Βͳͯ͘ɺ݁ہ࣮૷ͷํॻ͖׵͑Δ݁ՌʹͳͬͨΓɻ ςετ͕஗͍ͷͰ׬શͳςετۦಈΛ΍Δؾ͕ى͖ͳ͍(bug fix ͷ࣌͸ TDD ͢Δ͚Ͳ) ࠷ॳ͔Βશମͷ࣮૷ײ͕(ະख़Ώ͑ʹ)ݟ͍͑ͯͳ͍ͷͰ࠷ॳʹςετॻ͜͏ͱࢥ͑ͳ͍ ػցֶशपΓΛ৮͓ͬͯΓɺςετΛॻ͘ͷ͕೉͍͠ ςετࣗମ͸ྲྀੴʹॻ͖·͕͢ɺςετϑΝʔετͰॻ͍͍ͯΔΘ͚Ͱ͸ͳ͍Ͱ͢ɻ ΄ͱΜͲ৮ͬͨ͜ͱ͕ͳ͍ݴޠ&&৮ͬͨ͜ͱ͕ͳ͍ϑϨʔϜϫʔΫ&&Α͘஌Βͳ͍ϓϩμΫτ…ͷΑ͏ͳঢ়گͰɺ͍͖ͳΓςετ͔Βॻ͘ͷ͸೉͍͠ͳͱײ͡ ͍ͯΔͨΊɺTDDΛ࣮ફͰ͖͍ͯͳ͍ͷ͕ݱঢ়Ͱ͢ɻ ϓϩμΫτʹςετίʔυ͕੔͍ͬͯͳ͍ ࢓༷มߋ΍ϦϑΝΫλϦϯάͳͲͷࡍʹςετ͕ແ͍ͱཱͪߦ͔ͳ͍ͱ͔ɺTDDΛߦ͏จԽΛ࡞͓͍ͬͯͯϨϏϡʔίετΛԼ͛Δͱ͔ʢཁ݅ɾ࢓༷ʹରͯ͠ς ετΛϨϏϡʔͯ͋͠Δఔ౓࣮૷ํ਑ͷϨϏϡʔʹͳΔʣ Unity։ൃͰ͸ςετΛॻ͖ͮΒ͍(ࢼͯ͠ͳ͍͚ͲPlayModeTestͱ͍͏΋ͷ͕͋ΔΒ͍͔͠Βݴ͍༁͔΋)ɻ Viewͱؔ܎͠ͳ͍෦෼ɾ੾Γ෼͚͍ͯΔ෦෼͸ςετ͕͋Δ(ςετۦಈͰ͸ͳ͘ɺอकͷ໨త͕ڧ͍) ָ͍͔͠Β΍͍ͬͯΔ ࢓༷Λ໌֬ʹͰ͖Δ͔Β