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
1.4k
Bye-bye Magic Number
CakePHP3アプリケーションで、「マジックナンバー」的な値とどう向き合っていくかを考えた結果
hideki kinjyo
PRO
September 18, 2018
Tweet
Share
More Decks by hideki kinjyo
See All by hideki kinjyo
Composerが「依存解決」のためにどんな工夫をしているか #phpcon
o0h
PRO
1
360
Composerの依存解決 #phpstudy
o0h
PRO
0
110
「影響が少ない」を自分の目でみてみる
o0h
PRO
3
1.6k
PHPによる"非"構造化プログラミング入門 -本当に熱いスパゲティコードを求めて- #phperkaigi
o0h
PRO
0
1.5k
もう少しテストを書きたいんじゃ〜 #phpstudy
o0h
PRO
23
5.2k
『テスト書いた方が開発が早いじゃん』を解き明かす #phpcon_nagoya
o0h
PRO
10
3.7k
色んなオートローダーを覗き見る #phpcon_okinawa
o0h
PRO
5
670
ヒューマンエラーの本を読んだ ~報告会~
o0h
PRO
3
350
みんなでワイワイ「テスト駆動開発」の話をやる会 #techramen24conf
o0h
PRO
4
670
Featured
See All Featured
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.4k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
Optimising Largest Contentful Paint
csswizardry
37
3.4k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
A better future with KSS
kneath
238
17k
Reflections from 52 weeks, 52 projects
jeffersonlam
351
21k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
138
34k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
26k
Measuring & Analyzing Core Web Vitals
bluesmoon
7
530
Intergalactic Javascript Robots from Outer Space
tanoku
271
27k
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पΓͱͷ࿈ܞ͕ศར • ಠཱͨ͠ϨϙδτϦʹ͓͍ͨࣄͰϙʔλϏϦςΟ
͝ਗ਼ௌɺ ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ ࣮ͷͱ͔͍ͯ͠ͳ͍ͷͰ ͓ؾܰʹฉ͍͍ͯͩ͘͞