Bye-bye Magic Number

C90bac78c0fb61105cfd8239767f903d?s=47 hideki kinjyo
September 18, 2018
830

Bye-bye Magic Number

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

C90bac78c0fb61105cfd8239767f903d?s=128

hideki kinjyo

September 18, 2018
Tweet

Transcript

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

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

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

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

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

    2: ొ࿥׬ྃ
  6. ᶃϚδοΫφϯόʔ͸ਏ͍

  7. ᶃϚδοΫφϯόʔ͸ਏ͍ • ಡΜͰ͍ͯʮಥવग़͖ͯͨʯײ͡ • ʮಛผͳҙຯͷ͋Δ஋ʯʁʮྔͱ͔౓߹͍Λද͍ͯ͠ Δ੔਺஋ʯʁ • ൑ผ͕ͮ͠Β͍ • grep͠ʹ͘͞

    => ϦϑΝΫλ͠ʹ͘͞ • etc… (άάͬͨΒ৭ʑग़ͯ͘ΔͷͰׂѪ
  8. ᶄϞσϧΫϥεͷఆ਺ʹʂ

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

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

  11. ᶅConfigureΫϥεͰѻ͏ʂ

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

  13. ᶅConfigureΫϥεͰѻ͏ʂ • ΍Ζ͏ͱࢥ͑͹ॻ͖׵͑ΒΕͪΌ͏ΑͶ… • ७ਮͳʮΞϓϦέʔγϣϯͷઃఆʯͱ
 ͍ࠞͬͯ͟ΔͷɺԿͱͳ͘ؾ࣋ͪѱ͍͔΋… • ෆ༻ҙʹ௕͘ͳΓ͕ͪɻ • ͪͳΈʹɺ


    ίωώτʹ͸2,181ߦͷconstants.php͕͋Γ·͢
  14. ͳΜ͔ྑ͍ͷͳ͍ͷ͔ͳʂ

  15. ͭͬͯ͘Έͨʂ

  16. None
  17. ͳΜͰ͔͢ • ఆ਺ΫϥεΛϦονʹ͠·ͨ͠Έ͍ͨͳ΋ͷ • ΫϥεΛఆٛͯ͠
 ʮ໊લʯͱʮ஋ʯͷએݴΛ͓ͯ͘͠ • ʮࣙॻʯ͕஌͍ͬͯΔ৘ใΛ
 ʮEnumʯͱͯ͠औΓग़ͤΔΑ͏ʹͳΔ •

    PHPʹ͸ྻڍܕ͕ͳ͍͔ΒΦϨΦϨ࣮૷
  18. ʮࣙॻʯͷ࡞Γํ • AbstractΫϥεΛܧঝͯ͠ • `ENUM_` prefixΛ࣋ͬͨconstΛએݴ͢Δ

  19. ʮࣙॻʯͷ࡞Γํ

  20. ʮࣙॻʯͷ࢖͍ํ

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

  22. ࣙॻͷԠ༻ᶃʮEnumTypeʯ

  23. ࣙॻͷԠ༻ᶃʮEnumTypeʯ

  24. ࣙॻͷԠ༻ᶄʮValidationʯ • ʮରԠ͢Δࣙॻʹએݴ͞Ε͍ͯΔ͔ʯΛ
 νΣοΫ͢ΔValidationProvider • ʮ͜ͷྻ͸͜ͷࣙॻʯͱ͍͏ͷΛ
 ηοτ͓ͯ͘͠ͱɺະએݴͳ஋Λڋ൱Ͱ͖Δ

  25. ࣙॻͷԠ༻ᶄʮValidationʯ

  26. ࣙॻͷԠ༻ᶄʮValidationʯ

  27. ·ͱΊ • લੈ୅ͷΞϓϦέʔγϣϯͰ
 ϚδοΫφϯόʔ΍constansͷരൃ͕ਏͯ͘ɾɾ • CakePHP3ͷPJ্ཱͪ͛࣌ʹ
 ݁ߏͳίετΛ͔͚ͭͭɺ͜ͷػߏͷ࡞੒Λߦ͍·ͨ͠ • ݁Ռɺॻ͖ํ͕౷Ұ͞Ε͍͍ͯײ͡ •

    ͱΓΘ͚ɺCakePHP3ͷORMपΓ͸͔ͳΓڧԽ͞Ε͍ΔͷͰ
 Type/ValidationपΓͱͷ࿈ܞ͕ศར • ಠཱͨ͠ϨϙδτϦʹ͓͍ͨࣄͰϙʔλϏϦςΟ
  28. ͝ਗ਼ௌɺ
 ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ
 ࣮૷ͷ࿩ͱ͔͍ͯ͠ͳ͍ͷͰ
 ͓ؾܰʹฉ͍͍ͯͩ͘͞