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

Bye-bye Magic Number

hideki kinjyo
PRO
September 18, 2018
1.2k

Bye-bye Magic Number

CakePHP3アプリケーションで、「マジックナンバー」的な値とどう向き合っていくかを考えた結果

hideki kinjyo
PRO

September 18, 2018
Tweet

More Decks by hideki kinjyo

Transcript

  1. Bye-Bye

    Magic Number
    ʙʮࣙॻʯΛ࡞ͬͨ࿩ʙ
    Hideki Kinjyo
    twitter: @o0h_ / github: o0h

    View Slide

  2. ࣗݾ঺հ
    • ίωώτגࣜձࣾ
    • αʔόʔαΠυΤϯδχΞ
    • ओʹCakePHPͳͲ

    View Slide

  3. ࠓ೔͓࿩͢Δ͜ͱ
    • ϚδοΫφϯόʔʹউͭͧɾɾɾʂ
    • ͦͷͨΊʹ”Ϟϊ”Λ࡞Γ·ͨ͠

    View Slide

  4. Έͳ͞Μɺ

    ΞϓϦέʔγϣϯͷʮఆ਺ʯ
    ͷ؅ཧͲ͏͍ͯ͠·͔͢ʁ
    ϚδοΫφϯόʔ
    తͳ΍ͭ

    View Slide

  5. ͜͏͍͏΍ͭ
    • Ϣʔβʔͷొ࿥ঢ়ଶ͕ɾɾ
    • 0: ϝʔϧΞυϨε֬ೝ଴ͪ
    • 1: ࢧ෷͍৘ใ֬ೝ଴ͪ
    • 2: ొ࿥׬ྃ

    View Slide

  6. ᶃϚδοΫφϯόʔ͸ਏ͍

    View Slide

  7. ᶃϚδοΫφϯόʔ͸ਏ͍
    • ಡΜͰ͍ͯʮಥવग़͖ͯͨʯײ͡
    • ʮಛผͳҙຯͷ͋Δ஋ʯʁʮྔͱ͔౓߹͍Λද͍ͯ͠
    Δ੔਺஋ʯʁ
    • ൑ผ͕ͮ͠Β͍
    • grep͠ʹ͘͞ => ϦϑΝΫλ͠ʹ͘͞
    • etc… (άάͬͨΒ৭ʑग़ͯ͘ΔͷͰׂѪ

    View Slide

  8. ᶄϞσϧΫϥεͷఆ਺ʹʂ

    View Slide

  9. ᶄϞσϧΫϥεͷఆ਺ʹʂ
    • ୯ޠͰ໊લ͕෇͚ΒΕ͍ͯΔ͔Β෼͔Γ΍͢
    ͍Ͷʂ
    • ؔ࿈͢Δ஌ࣝΛ1Օॴʹ·ͱΊΒΕͯ෼͔Γ΍
    ͍͢Ͷʂ(scoped, contextual)

    View Slide

  10. ᶄϞσϧΫϥεͷఆ਺ʹʂ
    • ʮͲͷΫϥεʹஔ͔͘ʯ͸೰·͍͠
    • ͋ΕɺTableʹ࣋ͨͤΔʁEntityʹ࣋ͨͤ
    Δʁ
    • ͦ΋ͦ΋Ϟσϧͱؔ࿈͠ͳ͍஌ࣝ͸Ͳ͏͢Δʁ

    View Slide

  11. ᶅConfigureΫϥεͰѻ͏ʂ

    View Slide

  12. ᶅConfigureΫϥεͰѻ͏ʂ
    • ͜ΕͰ΋໊෇͚͸Մೳʂ
    • ֊૚Խ΋Ͱ͖Δʂ
    • ʮͲͷΫϥεʹଐ͢Δ͔ʯΛҙࣝͤͣʹ͓͚
    Δʂ

    View Slide

  13. ᶅConfigureΫϥεͰѻ͏ʂ
    • ΍Ζ͏ͱࢥ͑͹ॻ͖׵͑ΒΕͪΌ͏ΑͶ…
    • ७ਮͳʮΞϓϦέʔγϣϯͷઃఆʯͱ

    ͍ࠞͬͯ͟ΔͷɺԿͱͳ͘ؾ࣋ͪѱ͍͔΋…
    • ෆ༻ҙʹ௕͘ͳΓ͕ͪɻ
    • ͪͳΈʹɺ

    ίωώτʹ͸2,181ߦͷconstants.php͕͋Γ·͢

    View Slide

  14. ͳΜ͔ྑ͍ͷͳ͍ͷ͔ͳʂ

    View Slide

  15. ͭͬͯ͘Έͨʂ

    View Slide

  16. View Slide

  17. ͳΜͰ͔͢
    • ఆ਺ΫϥεΛϦονʹ͠·ͨ͠Έ͍ͨͳ΋ͷ
    • ΫϥεΛఆٛͯ͠

    ʮ໊લʯͱʮ஋ʯͷએݴΛ͓ͯ͘͠
    • ʮࣙॻʯ͕஌͍ͬͯΔ৘ใΛ

    ʮEnumʯͱͯ͠औΓग़ͤΔΑ͏ʹͳΔ
    • PHPʹ͸ྻڍܕ͕ͳ͍͔ΒΦϨΦϨ࣮૷

    View Slide

  18. ʮࣙॻʯͷ࡞Γํ
    • AbstractΫϥεΛܧঝͯ͠
    • `ENUM_` prefixΛ࣋ͬͨconstΛએݴ͢Δ

    View Slide

  19. ʮࣙॻʯͷ࡞Γํ

    View Slide

  20. ʮࣙॻʯͷ࢖͍ํ

    View Slide

  21. ࣙॻͷԠ༻ᶃʮTypeʯ
    • Database\Type\EnumType
    • marshal/toPHPͰEnumΛѻ͑ΔΑ͏ʹ͢Δ

    View Slide

  22. ࣙॻͷԠ༻ᶃʮEnumTypeʯ

    View Slide

  23. ࣙॻͷԠ༻ᶃʮEnumTypeʯ

    View Slide

  24. ࣙॻͷԠ༻ᶄʮValidationʯ
    • ʮରԠ͢Δࣙॻʹએݴ͞Ε͍ͯΔ͔ʯΛ

    νΣοΫ͢ΔValidationProvider
    • ʮ͜ͷྻ͸͜ͷࣙॻʯͱ͍͏ͷΛ

    ηοτ͓ͯ͘͠ͱɺະએݴͳ஋Λڋ൱Ͱ͖Δ

    View Slide

  25. ࣙॻͷԠ༻ᶄʮValidationʯ

    View Slide

  26. ࣙॻͷԠ༻ᶄʮValidationʯ

    View Slide

  27. ·ͱΊ
    • લੈ୅ͷΞϓϦέʔγϣϯͰ

    ϚδοΫφϯόʔ΍constansͷരൃ͕ਏͯ͘ɾɾ
    • CakePHP3ͷPJ্ཱͪ͛࣌ʹ

    ݁ߏͳίετΛ͔͚ͭͭɺ͜ͷػߏͷ࡞੒Λߦ͍·ͨ͠
    • ݁Ռɺॻ͖ํ͕౷Ұ͞Ε͍͍ͯײ͡
    • ͱΓΘ͚ɺCakePHP3ͷORMपΓ͸͔ͳΓڧԽ͞Ε͍ΔͷͰ

    Type/ValidationपΓͱͷ࿈ܞ͕ศར
    • ಠཱͨ͠ϨϙδτϦʹ͓͍ͨࣄͰϙʔλϏϦςΟ

    View Slide

  28. ͝ਗ਼ௌɺ

    ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ

    ࣮૷ͷ࿩ͱ͔͍ͯ͠ͳ͍ͷͰ

    ͓ؾܰʹฉ͍͍ͯͩ͘͞

    View Slide