Rails アンチパターン「RDBMS を単なるデータストアとして扱う」 / Rails Anti-pattern RDBMS is not more than datastore

Rails アンチパターン「RDBMS を単なるデータストアとして扱う」 / Rails Anti-pattern RDBMS is not more than datastore

RDBMS は便利だからもっと使っていきましょうというお話。

表参道.rb #25 Rails アンチパターン で話しました。
https://omotesandorb.connpass.com/event/62936/

F479995c305f00405361e4b158ff225c?s=128

OSA Shunsuke

August 03, 2017
Tweet

Transcript

  1. ʮ3%#.4Λ୯ͳΔσʔλετΞͱͯ͠ѻ͏ʯ දࢀಓSCd3BJMTΞϯνύλʔϯd  !T@PTB@

  2. ୭ʁ • OSA Shunsuke • Rails Ͱ Web ΞϓϦέʔγϣϯΛॻ͍͍ͯ·͢ •

    Working on ΫοΫύουྉཧڭࣨ • ޷͖ͳ͜ͱɿϞσϦϯά • ΦϒδΣΫτ΍ͦͷ૬ޓ࡞༻Λߟ͑Δͷ͕޷͖ • Twitter: @s_osa_ • GitHub: s-osa
  3. ͜Μͳ͜ͱͰࠔ͍ͬͯ·ͤΜ͔ʁ

  4. ਌Ϧιʔεͷଘࡏ֬ೝ • belongs_to Ͱఆٛ͞Ε͍ͯΔϦιʔεͷଘࡏ֬ೝΛ සൟʹ͍ͯ͠Δ • if article.blog • nil?

    • blank? • present? • try • &.
  5. ͔ͭ͠ͳ͍͸ͣͷϨίʔυ͕ෳ਺͋Δ • ຊདྷ͸ unique Ͱ͋Δ͸ͣͷΧϥϜ͕ unique ʹͳͬ ͍ͯͳ͍ • ʮFavorite

    ΛऔΓফ͚ͨ͠Ͳফ͑ͳ͍ʯ • ௐ΂ͯΈͨΒ2݅σʔλ͕Ͱ͖͍ͯͯɺยํ͔͠ ࡟আ͞Ε͍ͯͳ͔ͬͨ
  6. ͳͥ͜Μͳ͜ͱʹʁ

  7. ਌Ϧιʔεͷ࡟আ • ଞͷϦιʔεʹΑͬͯࢀর͞Ε͍ͯΔϦιʔεΛ࡟আ ͯ͠͠·͏ • Rails Ͱ͸ Association ͷఆٛʹ dependent

    Φϓγϣ ϯΛ౉͢ͱ࡟আ࣌ͷಈ࡞͕ఆٛͰ͖Δ • nullify: ݁ہ nil check ͕ඞཁ • restrict_with_*: ʢ࢖͍ͬͯΔਓΛݟͨ͜ͱ͕ͳ͍ʣ
  8. WBMJEBUJPODBMMCBDLΛհ͞ͳ͍σʔλߋ৽ • update_attribute(:column, value) • save(validate: false) • ଞͷΞϓϦέʔγϣϯ •

    SQL
  9. ଟॏੜ੒ • ಉ͡σʔλΛෳ਺ճॻ͖ࠐΉͱॏෳσʔλ͕࡞੒͞ Εͯ͠·͏ • ʮϘλϯ͸1ճ͚ͩԡ͍ͯͩ͘͠͞ʯ

  10. ΞϓϦέʔγϣϯʹ͸όά͕ೖΓ΍͍͢ • ਓؒ͸ؒҧ͑ΔͷͰόάΛੜΜͰ͠·͏ • ΞϓϦέʔγϣϯ͸සൟʹߋ৽͞ΕΔ

  11. ΞϓϦέʔγϣϯͰ͸๷͛ͳ͍

  12. 3%#.4ͷ੍໿Λ࢖͏

  13. '03&*(/,&:੍໿ • ֎෦Ωʔͷࢀরઌ͕ଘࡏ͢Δ͜ͱΛอূ͢Δ • ࢀরઌ͕ଘࡏ͠ͳ͍ϨίʔυΛ INSERT/UPDATE ͨ͠Γɺࢀর͞Ε͍ͯΔϨίʔυΛ DELETE ͢Δ ͱΤϥʔʹͳΔ

    • Rails 4.2 Ͱαϙʔτ͞ΕΔΑ͏ʹͳͬͨ
  14. 6/*26&੍໿ • ࢦఆͨ͠ΧϥϜͷσʔλ͕ҰҙͰ͋Δ͜ͱΛอূ • ॏෳϨίʔυΛൃੜͤ͞ΔΫΤϦ͸Τϥʔ • ֎෦Ωʔʹઃఆ͢Δͱศརͳ͜ͱ͕ଟ͍ • has_one ͞Ε͍ͯΔ֎෦Ωʔʹఆٛͯ͠࠷େ1݅Ͱ͋Δ͜ͱ

    Λอূ • தؒςʔϒϧͷ֎෦Ωʔʹෳ߹ UNIQUE ੍໿Λఆٛͯ͠ɺ ಉ͡૊Έ߹Θͤ͸อଘ͞Εͳ͍Α͏ʹ • users <— favorites —> articles
  15. ͓·͚ɿͦͷଞͷ੍໿ • NOT NULL ੍໿ • σϑΥϧτͰ͚ͭΔ΂͖ • ϛοΫ͞ΜʹΑΔʮNULLʹ·ͭΘΔॾ໰୊ʯ͕Φεεϝ •

    http://www.geocities.jp/mickindex/database/idx_database.html • CHECK ੍໿ • ศར͚ͩͲϨʔϧ͔Β֎Εͯ͠·͏ • schema.rb -> structure.sql • MySQL Ͱ͸࢖͑ͳ͍
  16. ੍໿ʹΑͬͯಘΒΕΔ΋ͷ

  17. σʔλΛ৴པͰ͖Δ • FOREIGN KEY ੍໿͕͍͍ͭͯΔ֎෦Ωʔ͸࣮֬ʹ ؔ࿈ϦιʔεΛͨͲΕΔ • UNIQUE ੍໿͕͍͍ͭͯΔΧϥϜ͸࣮֬ʹ unique

    • nil check ΍Ϩίʔυ਺ͷ֬ೝ͕ෆཁʹͳͬͯίʔυ ͕εοΩϦ͢Δ
  18. ޡΓʹૣ͘ؾ෇͚Δ • ෆਖ਼ͳσʔλΛੜ੒͠Α͏ͱ͢ΔΫΤϦ͕౤͛ΒΕ ͨΒɺྫ֎ʹΑͬͯͦΕʹؾͮ͘͜ͱ͕Ͱ͖Δ • ҟৗঢ়ଶʹૣ͘ؾ͚ͮ͹ݪҼΛಥ͖ࢭΊΔͷ͕༰қ ʹͳΔ • յΕͨσʔλΛදࣔ͢Δͱ͖·ͰҟৗͰ͋Δ͜ͱ ʹؾ͚ͮͳ͍ͱɺͲ͜Ͱੜ੒ɾߋ৽͞Εͨͷ͔Λ

    ௐ΂Δͷ͸େม
  19. 3%#.4ͱ஥ྑͯ͘͠ ָ͘͠ίʔυΛॻ͜͏