Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Bye-bye Magic Number
Search
hideki kinjyo
PRO
September 18, 2018
1.5k
1
Share
Bye-bye Magic Number
CakePHP3アプリケーションで、「マジックナンバー」的な値とどう向き合っていくかを考えた結果
hideki kinjyo
PRO
September 18, 2018
More Decks by hideki kinjyo
See All by hideki kinjyo
ソースコード→AST→オペコード、の旅を覗いてみる
o0h
PRO
1
140
PCOVから学ぶコードカバレッジ #phpcon_odawara
o0h
PRO
0
340
夢の無限スパゲッティ製造機 -実装篇- #phpstudy
o0h
PRO
0
230
夢の無限スパゲッティ製造機 #phperkaigi
o0h
PRO
0
470
PHPer Book Revue 「雑に作る」 #phperkaigi
o0h
PRO
0
360
俺にも私がAIと作った オススメの個人ツールを語らせてくれ
o0h
PRO
0
59
#phperbiglt のLT
o0h
PRO
0
97
手軽に積ん読を増やすには?/読みたい本と付き合うには?
o0h
PRO
1
270
symfony/mcp-bundleで、既存アプリケーションもお手軽にMCPサーバー化
o0h
PRO
1
160
Featured
See All Featured
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
290
Tell your own story through comics
letsgokoyo
1
930
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
200
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.4k
Producing Creativity
orderedlist
PRO
348
40k
How to train your dragon (web standard)
notwaldorf
97
6.6k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.1k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.3k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
190
Are puppies a ranking factor?
jonoalderson
1
3.4k
Transcript
Bye-Bye Magic Number ʙʮࣙॻʯΛ࡞ͬͨʙ Hideki Kinjyo twitter: @o0h_ / github:
o0h
ࣗݾհ • ίωώτגࣜձࣾ • αʔόʔαΠυΤϯδχΞ • ओʹCakePHPͳͲ
ࠓ͓͢Δ͜ͱ • ϚδοΫφϯόʔʹউͭͧɾɾɾʂ • ͦͷͨΊʹ”Ϟϊ”Λ࡞Γ·ͨ͠
Έͳ͞Μɺ ΞϓϦέʔγϣϯͷʮఆʯ ͷཧͲ͏͍ͯ͠·͔͢ʁ ϚδοΫφϯόʔ తͳͭ
͜͏͍͏ͭ • Ϣʔβʔͷొঢ়ଶ͕ɾɾ • 0: ϝʔϧΞυϨε֬ೝͪ • 1: ࢧ͍ใ֬ೝͪ •
2: ొྃ
ᶃϚδοΫφϯόʔਏ͍
ᶃϚδοΫφϯόʔਏ͍ • ಡΜͰ͍ͯʮಥવग़͖ͯͨʯײ͡ • ʮಛผͳҙຯͷ͋Δʯʁʮྔͱ͔߹͍Λද͍ͯ͠ Δʯʁ • ผ͕ͮ͠Β͍ • grep͠ʹ͘͞
=> ϦϑΝΫλ͠ʹ͘͞ • etc… (άάͬͨΒ৭ʑग़ͯ͘ΔͷͰׂѪ
ᶄϞσϧΫϥεͷఆʹʂ
ᶄϞσϧΫϥεͷఆʹʂ • ୯ޠͰ໊લ͕͚ΒΕ͍ͯΔ͔Β͔Γ͢ ͍Ͷʂ • ؔ࿈͢ΔࣝΛ1Օॴʹ·ͱΊΒΕ͔ͯΓ ͍͢Ͷʂ(scoped, contextual)
ᶄϞσϧΫϥεͷఆʹʂ • ʮͲͷΫϥεʹஔ͔͘ʯ·͍͠ • ͋ΕɺTableʹ࣋ͨͤΔʁEntityʹ࣋ͨͤ Δʁ • ͦͦϞσϧͱؔ࿈͠ͳ͍ࣝͲ͏͢Δʁ
ᶅConfigureΫϥεͰѻ͏ʂ
ᶅConfigureΫϥεͰѻ͏ʂ • ͜ΕͰ໊͚Մೳʂ • ֊ԽͰ͖Δʂ • ʮͲͷΫϥεʹଐ͢Δ͔ʯΛҙࣝͤͣʹ͓͚ Δʂ
ᶅConfigureΫϥεͰѻ͏ʂ • Ζ͏ͱࢥ͑ॻ͖͑ΒΕͪΌ͏ΑͶ… • ७ਮͳʮΞϓϦέʔγϣϯͷઃఆʯͱ ͍ࠞͬͯ͟ΔͷɺԿͱͳ͘ؾ࣋ͪѱ͍͔… • ෆ༻ҙʹ͘ͳΓ͕ͪɻ • ͪͳΈʹɺ
ίωώτʹ2,181ߦͷconstants.php͕͋Γ·͢
ͳΜ͔ྑ͍ͷͳ͍ͷ͔ͳʂ
ͭͬͯ͘Έͨʂ
None
ͳΜͰ͔͢ • ఆΫϥεΛϦονʹ͠·ͨ͠Έ͍ͨͳͷ • ΫϥεΛఆٛͯ͠ ʮ໊લʯͱʮʯͷએݴΛ͓ͯ͘͠ • ʮࣙॻʯ͕͍ͬͯΔใΛ ʮEnumʯͱͯ͠औΓग़ͤΔΑ͏ʹͳΔ •
PHPʹྻڍܕ͕ͳ͍͔ΒΦϨΦϨ࣮
ʮࣙॻʯͷ࡞Γํ • AbstractΫϥεΛܧঝͯ͠ • `ENUM_` prefixΛ࣋ͬͨconstΛએݴ͢Δ
ʮࣙॻʯͷ࡞Γํ
ʮࣙॻʯͷ͍ํ
ࣙॻͷԠ༻ᶃʮTypeʯ • Database\Type\EnumType • marshal/toPHPͰEnumΛѻ͑ΔΑ͏ʹ͢Δ
ࣙॻͷԠ༻ᶃʮEnumTypeʯ
ࣙॻͷԠ༻ᶃʮEnumTypeʯ
ࣙॻͷԠ༻ᶄʮValidationʯ • ʮରԠ͢Δࣙॻʹએݴ͞Ε͍ͯΔ͔ʯΛ νΣοΫ͢ΔValidationProvider • ʮ͜ͷྻ͜ͷࣙॻʯͱ͍͏ͷΛ ηοτ͓ͯ͘͠ͱɺະએݴͳΛڋ൱Ͱ͖Δ
ࣙॻͷԠ༻ᶄʮValidationʯ
ࣙॻͷԠ༻ᶄʮValidationʯ
·ͱΊ • લੈͷΞϓϦέʔγϣϯͰ ϚδοΫφϯόʔconstansͷരൃ͕ਏͯ͘ɾɾ • CakePHP3ͷPJ্ཱͪ͛࣌ʹ ݁ߏͳίετΛ͔͚ͭͭɺ͜ͷػߏͷ࡞Λߦ͍·ͨ͠ • ݁Ռɺॻ͖ํ͕౷Ұ͞Ε͍͍ͯײ͡ •
ͱΓΘ͚ɺCakePHP3ͷORMपΓ͔ͳΓڧԽ͞Ε͍ΔͷͰ Type/ValidationपΓͱͷ࿈ܞ͕ศར • ಠཱͨ͠ϨϙδτϦʹ͓͍ͨࣄͰϙʔλϏϦςΟ
͝ਗ਼ௌɺ ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ ࣮ͷͱ͔͍ͯ͠ͳ͍ͷͰ ͓ؾܰʹฉ͍͍ͯͩ͘͞