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

Rails Developers Meetup

AKAMATSU Yuki
November 16, 2017

Rails Developers Meetup

AKAMATSU Yuki

November 16, 2017
Tweet

More Decks by AKAMATSU Yuki

Other Decks in Technology

Transcript

  1. 3BJMTͰ&$αʔϏεΛ
    θϩ͔Β࡞ͬͯΈͯ
    גࣜձࣾTQJDFMJGF
    $5045&&34ϓϩμΫτϚωʔδϟʔ੺দ༞ر

    View Slide

  2. 45&&34ʹ͍ͭͯ
    w ΦϦδφϧ5γϟπൢചαʔϏε
    w ը૾Ξοϓϩʔυ΍αʔϏε্ͷσβΠϯΤσΟλͰ5γϟπ
    ΛσβΠϯɾൢച
    w ઃఆͨ͠ൢചՁ֨ʹԠͯ͡஫จ͝ͱʹऩӹ͕ൃੜ

    View Slide

  3. 45&&34ʹ͍ͭͯ
    w ΦϦδφϧ5γϟπൢചαʔϏε
    w ը૾Ξοϓϩʔυ΍αʔϏε্ͷσβΠϯΤσΟλͰ5γϟπ
    ΛσβΠϯɾൢച
    w ઃఆͨ͠ൢചՁ֨ʹԠͯ͡஫จ͝ͱʹऩӹ͕ൃੜ

    View Slide

  4. νʔϜߏ੒
    w ϓϩμΫτϚωʔδϟʔ݉ΞϓϦέʔγϣϯΤϯδχΞ
    w Πϯϑϥ݉ΞϓϦέʔγϣϯΤϯδχΞ
    w σβΠφ

    View Slide

  5. 1E.ͱ։ൃऀ͕ಉҰਓ෺Ͱ͋ΔϝϦοτ
    w ҙࢥૄ௨ͷίετ͕େ෯ݮ
    w Ϗδωεͱ։ൃͱͰೝࣝͷҧ͍ͱ͍͏ͷ͕جຊతʹൃੜ͠ͳ
    ͍

    View Slide

  6. ೝࣝҧ͍ͷൃੜͱ͸
    w ྫ͑͹
    w Ϗδωεଆͷࢥ࿭ʮͱΓ͋͑ͣ.71ͱͯ͠ϦϦʔεͯ͠ػೳͱͯ͠ඞཁ͔֬
    ೝ͍ͨ͠ʯ
    w ։ൃଆͷࢥ࿭ʮͱ͘ʹԿ΋ݴΘΕͯͳ͍͠ɺ࡞ΓࠐΜͰ͠·͍͍ͬͯΜͩΖ
    ͏ʯ
    w Ϗδωεͱ։ൃͷར֐ͷෆҰகͱ͔΋͋Δ
    w Ϗδωε͸ച্΍ϦϦʔεεϐʔυΛؾʹ͢Δ͕ɺ։ൃଆ͸কདྷతʹࣗ෼ୡ
    ͕ۤ࿑͠ͳ͍͔Ͳ͏͔Λؾʹ͢Δ
    w ։ൃʮԾઆݕূ͕͏·͍ͬͨ͘Β࡞Γͳ͓࣌ؒ͢Λ࡞Δ͘ΕΔͱݴ͚ͬͨͲ
    ͍ͭ΋͘Εͳ͍΍Μ͚ʜʯ
    w ҆શࡦͰෛ࠴Λ࡞Γ͜·ͳ͍ํ਑ΛͱΓ͕ͪ

    View Slide

  7. ಉҰਓ෺ͷ৔߹
    w ෛ࠴ΛੵΉͱͯ͠΋ͲΕ͙Β͍ۤ࿑ͦ͠͏͔ɺϏδωεతʹ
    ࠓޙͲ͏͍ͨ͠ͷ͔ࣗ෼͕Θ͔͍ͬͯΔͷͰ൑அ͕ϥΫ
    w ۤ࿑͢Δͷ΋ࣗ෼ͳͷͰɺͦ͜Β΁Μʹର͢Δؾෛ͍͸͋·
    Γͳ͍

    View Slide

  8. ͱ͸͍͑ʜ
    w ΍͸ΓϢʔβʔͷߦಈ͕ࣗ෼ͱ૝ఆ͠ͳ͍΋ͷͩͬͨΓ͢Δ
    ͷͰɺ༧ఆ֎ͷ࢓༷มߋ͕ൃੜ͢Δ
    w 45&&34ͷ৔߹ɺ࠷ॳ͸γϯϓϧʹճͷ஫จͰͻͱͭͷαΠ
    ζ͔͠ങ͑ͳ͔ͬͨ
    w ࣗ෼ͷ෼Λങ͏෼ʹ͸ࣗ෼ͷαΠζ͚ͩങ͑Ε͹Α͍ͱࢥͬ
    ͨ
    w ͚ͩͲ૝ఆ֎ʹෳ਺αΠζΛങ͍͍ͨਓ͕ଟ͔ͬͨ
    w ͳΔ΄ͲͶ͍ͬͯ͏͜ͱͰ%#ͷߏ੒Λม͑ͯෳ਺αΠζߪೖ
    ͷϦϦʔεΛߦͬͨ

    View Slide

  9. ͭ·Γʜ
    w ߟ͑Δਓͱ࡞Δਓ͕ಉ͡Ͱ΋Ϣʔβʔ͕͍ΔҎ্͢΂ͯεϜʔ
    ζʹߦ͘Θ͚Ͱ͸ͳ͍
    w ࣗ෼ͻͱΓͩͱͦ͜Β΁Μͷ࢓༷มߋͷཧ༝ͱ͔ٕज़తͳΉͣ
    ͔͠͞΋Θ͔ΔͷͰೲಘײ͕͋Δ
    w ෳ਺ਓͷ৔߹ɺཧ༝͕։ൃʹ఻ΘΒͣ࢓༷มߋͷࢦ͚ࣔͩ఻Θ
    Δͱඃ֐ऀతͳؾ࣋ͪʹͳΓ͕ͪ
    w ͦ͜Β΁Μͷίϛϡχέʔγϣϯ͕͏·͍͔͘ͳ͍ͱۭؾ΋Θ
    Δ͘ͳΓ͕ͪ
    w ͜ͷลΓʹରͯࣗ͠෼΋ಛʹ౴͑Λ͍࣋ͬͯΔΘ͚Ͱ͸ͳ͍
    ͚Ͳɺҙࣝ͸͓ͯ͘͠ͱΑͦ͞͏

    View Slide

  10. 3BJMTͷ࿩
    w 3BJMT%FWFMPQFST.FFUVQͳͷͰ։ൃଆͷ࿩Λ
    w ͋·ΓίΞٕज़తͳ࿩͕͋ΔΘ͚Ͱ΋ͳ͍ͷͰτϐοΫ͸গ
    ͠෼ࢄؾຯʹͳΔ͔΋
    w ಛผͳʹ͔೉͍͜͠ͱΛ͍ͯ͠ΔΘ͚͡Όͳ͍ͷͰɺ͋Δҙ
    ຯ਎ۙͳ࿩୊ʹͳΔͱࢥ͏

    View Slide

  11. ։ൃʹ͓͍ͯߟ͍͑ͯͨ͜ͱ
    w ඼࣭ͱεϐʔυͷόϥϯεΛऔΓ͍ͨͱߟ͍͑ͯͨ
    w εϐʔυॏࢹ͗ͣ͢͠ɺ ࣗ෼ʹͱͬͯ
    ͋ͨΓ·͑ͷ͜ͱ͸
    ͋ͨΓ·͑ʹͪΌΜͱ΍Δ
    w ػೳݸผͷઃܭ͸͋Δఔ౓ͬ͘͟ΓͰ΋0,ɻ࣍ΠδΔػձ͕
    ͋Ε͹ͦͷ࣌ʹ௚͢
    w ٯʹશମͷઃܭํ਑͸ͳΔ΂͘ߟ͓͖͔͑ͯͨͬͨ

    View Slide

  12. σʔλϕʔεઃܭ
    w ͪΌΜͱਖ਼نԽͱ֎෦ΩʔΛ͸Δ
    w σʔλϕʔεͱσʔλͷෛ࠴͸ղফ͢Δͷ͕େมͳͷͰ࠷
    ௿ݶ͜Ε͙Β͍͸΍Δ
    w ͍Βͳ͍ςʔϒϧ΍΍Γ͍ͨ͜ͱͱ߹Θͳ͍ઃܭʹͳͬͨΒ
    ͪΌΜͱ௚͢
    w ΞΫηε਺͕ଟ͘ͳ͚Ε͹มߋʹରͯͦ͜͠·ͰγϏΞʹ
    ͳΔ͜ͱ΋ͳ͍
    w ͦΕΑΓ΋Α͘Θ͔ΒΜઃܭͷςʔϒϧ࢒͢ํ͕ࠔΔ

    View Slide

  13. σʔλϕʔεͷ7JFX
    w ਖ਼نԽ͍ͯ͘͠ͱ/ͷղফ΍+0*/ͷ਺͕ଟͯ͘3BJMT্ͷίʔ
    υͷݟ௨͕͠ΘΔ͘ͳΔ͜ͱ͕͋Δ
    w ͦͷͱ͖͸7JFXΛ༻ҙͯ͠ରॲ͢Δ
    w IUUQTHJUIVCDPNUIPVHIUCPUTDFOJD
    w 7JFXΛଟஈʹ͢Δͱ͋Δ7JFXͷߏ੒Λม͍͑ͨͱ͖ʹ໘౗ʹͳ
    ΔͷͰ஫ҙ
    w ࣅͨཧ༝ͰΧϥϜ௥Ճ࣌ʹ͜·ΔͷͰ7JFXʹ͸࠷௿ݶͷΧϥϜ
    Λࢦఆ͢Δ΄͏͕Α͍
    w ΞϓϦଆͱ%#ଆʹϩδοΫ͕෼͔ΕΔͷ͸ͪΐͬͱ೰ΈͲ͜Ζ

    View Slide

  14. ϚΠάϨʔγϣϯ
    w εΩʔϚͷมߋͱσʔλͷ౤ೖͷ؅ཧΛΘ͚ΔΑ͏ʹͨ͠
    w σʔλ౤ೖ͸IUUQTHJUIVCDPNIBSSZTUFDI
    TFFE@NJHSBUJPOͰ
    w εΩʔϚͷมߋʹIUUQTHJUIVCDPNBOLBOF
    TUSPOH@NJHSBUJPOTΛೖΕͯΈͨ
    w ةݥͳ%#มߋʹରͯ͠ܯࠂΛग़͢
    w ৭ʑษڧʹͳ͚ͬͨͲɺࠓճ͸ෆཁ͔ͩͬͨͳͱ΋ࢥ͏

    View Slide

  15. αʔϏεϨΠϠ
    w αʔϏεϨΠϠ͸ѱ͘ͳ͍͕ɺಋೖ౰ॳͷαʔϏεϨΠϠʹ
    ର͢ΔෆษڧͰඍົͳײ͡ʹ
    w "3ͷΠϯελϯεΛෳ਺࢖͏Α͏ͳॲཧ͸αʔϏεϨΠ
    ϠΈ͍ͨʹͯͨ͠

    View Slide

  16. ߪೖॲཧ·ΘΓΛαʔϏεΫϥεʹ
    w ߪೖॲཧ͸΍Δ͜ͱ͕ͨ͘͞Μ
    w ΫϨΧͷܾࡁॲཧɺ஫จ৘ใͷӬଓԽɺϢʔβʔ΁ͷϝʔϧ
    ௨஌ͳͲͳͲʜ
    w ѻ͏Ϟσϧ͕ଟ͍͠ɺ΍Δ͜ͱ΋ଟ͍ͷͰɺͦΕΛ·Δͬͱ
    αʔϏεΫϥε΁
    w ౰ॳ͸ίʔυ͕खଓ͖తʹࣗવͱͳΔͷͰͦΕ͸ͦΕͰϝϦο
    τ͕͋ͬͨ
    w ίʔυΛ࠶ར༻͢Δͱͳͬͨͱ͖ʹ࢖͍·Θ͕͠Ͱ͖ͣʹࠔ
    Δ͸Ίʹʜ

    View Slide

  17. Ͳ͏͢Ε͹Α͔ͬͨͷ͔
    w αʔϏεϨΠϠ͸ग़དྷΔݶΓബ͘͢Δ
    w ͦ͏͢Δͱ3BJMTͷ৔߹ɺίϯτϩʔϥʔʹॻ͚͹͍͍΍ͬ
    ͍ͯ͏ͷ΋ଟʑ͋Δ
    w υϝΠϯϞσϧͷઃܭྗΛ஁͑Δ

    View Slide

  18. ϑΥʔϜΫϥε
    w ਖ਼نԽ͢Δͱେମʹ͓͍ͯϑΥʔϜͱϞσϧ͕ʹͳΒͳ͍
    w ϑΥʔϜ͝ͱʹϑΥʔϜΫϥεΛ࡞Δͷ͕݁ہ͸ϥΫ
    w ࣮૷͸IUUQUFDINFEQFFSDPKQFOUSZ
    Λࢀߟʹ͢Ε͹େମ0,

    View Slide

  19. όϦσʔγϣϯΛͲ͜Ͱߦ͏͔
    w ͋ͱ͔ΒϑΥʔϜΫϥεΛಋೖͨ͠ͷͰ౰ॳ͸ϞσϧʹόϦ
    σʔγϣϯ͕͋ͬͨ
    w ϑΥʔϜΫϥεͷόϦσʔγϣϯ͸஋ΛϞσϧͷΠϯελϯ
    εʹ౉ͯ͠ϞσϧͰߦ͏

    View Slide

  20. class Form
    def sync
    @model_a = ModelA.new(foo: @foo, bar: @bar)
    @model_b = ModelB.new(hoge: @hoge)
    end
    def valid?
    sync
    @model_a.valid? && @model_b.valid?
    end
    end
    όϦσʔγϣϯΛͲ͜Ͱߦ͏͔

    View Slide

  21. ϑΥʔϜΫϥεʹ௚઀ॻ͘ํ޲ʹγϑτ
    w ਓ਺΋গͳ͍ͷͰϞσϧ௚઀ݺΜͰόϦσʔγϣϯ͞ΕͣࣄނΔ
    ͱ͍͏ͷ΋গͳ͍
    w ϑΥʔϜ࣮૷͢Δͱ͖ʹϑΥʔϜ୯ҐͰόϦσʔγϣϯߟ͑Δํ
    ͕ͳΜ͔ϥΫ
    w ϞσϧͰόϦσʔγϣϯ͢ΔͱࠔΔέʔε΋͋Δ
    w ಛఆΧϥϜ͸ଞͷΧϥϜಉ࢜ͷܭࢉʹΑͬͯຒΊΒΕΔ৔߹
    w όϦσʔγϣϯ࣌ʹܭࢉ͢ΔίετΛࢧ෷͏ඞཁ͕͋Δ
    w ·ͨϑΥʔϜͷ஋ΛόϦσʔγϣϯ͍ͨ͠ͷͰϑΥʔϜͰͦ
    ͜Λ͋·Γؾʹͨ͘͠ͳ͍

    View Slide

  22. class Form
    def sync
    @model = ModelA.new(foo: @foo, bar: @bar)
    end
    def valid?
    @model.valid? # hogeΛೖΕͯͳ͍ͷͰvalidʹͳΒͳ͍
    end
    def save!
    hoge = (@foo + @bar) * rate
    @model.hoge = hoge
    @model.save!
    end
    end

    View Slide

  23. ϑΥʔϜΫϥεʹ௚઀ॻ͘ํ޲ʹγϑτ
    w ͱ͸͍͑΍͸ΓϞσϧʹόϦσʔγϣϯ͕ͳ͍ͷ͸ʜ
    w ͋ͱࣅͨΑ͏ͳϑΥʔϜͰࣅͨΑ͏ͳόϦσʔγϣϯΛॻ͘
    ͜ͱ΋ଟʑ
    w όϦσʔγϣϯΛ͍͍ײ͡ʹ·ͱΊͨϞδϡʔϧΛ࡞Δͱ
    Α͍ͷ͔ͳʜ

    View Slide

  24. ·ͱΊ
    w ϓϩμΫτϚωʔδϟʔͱ։ൃऀͷҙࢥૄ௨͸େࣄͩΑ
    w ͏ͪͷ৔߹݉຿Ͱͦ͜͸εΩοϓ͚ͨ͠Ͳɺݱ࣮໰୊ͦΕΛଓ
    ͚͍ͯ͘ͷ͸ͳ͔ͳ͔೉͍͠
    w 3BJMT։ൃʹ͓͍ͯେ·͔ͳݪଇΛक͍ͬͯ͘ͷ͕جຊ
    w ݪଇʹ͍ͭͯ͸ษڧ͠Α͏
    w ҙਤతʹखΛൈ͘ͱ͔Ͱͳ͍ݶΓɺ্ݶ͕ࣗ෼ͷ࣮ྗͰܾ·Δ
    w ͱ͸ݴ࣮͑૷Ϩϕϧͩͱܾ·Γख͕ͳ͍͜ͱ΋ଟ͍
    w ͦͷลͷࢼߦࡨޡ͸ڪΕͳ͍

    View Slide