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
Python の型ヒントで JSON の型チェックをする / Validation for J...
Search
Tomoya Kose
December 10, 2018
Programming
4
5.9k
Python の型ヒントで JSON の型チェックをする / Validation for JSON with Type hints in Python
Tomoya Kose
December 10, 2018
Tweet
Share
More Decks by Tomoya Kose
See All by Tomoya Kose
Golang で心を無にしてコードを書く
mitsuse
47
22k
Other Decks in Programming
See All in Programming
What is Parser
yui_knk
9
4.1k
オートマトン学習しろ / Do automata learning
makenowjust
3
130
Architecture Decision Record (ADR)
nearme_tech
PRO
1
680
私のEbitengineの第一歩
qt_luigi
0
450
rbs-inlineを導入してYARDからRBSに移行する
euglena1215
1
270
長期運用プロダクトの開発速度を維持し続けるためのリファクタリング実践例
wataruss
8
2.7k
Swiftコードバトル必勝法
toshi0383
0
150
今インフラ技術をイチから学び直すなら
yuhta28
1
130
connect-go で面倒くささと戦う / 2024-08-27 #newmo_layerx_go
izumin5210
2
640
Rechartsで楽にゴリゴリにカスタマイズする!
10tera
1
170
実践 Advanced CallKit 〜快適な通話の実現に向けて〜
mot_techtalk
3
140
Scala におけるコンパイラエラーとの付き合い方
chencmd
2
420
Featured
See All Featured
Fireside Chat
paigeccino
31
2.9k
The Brand Is Dead. Long Live the Brand.
mthomps
53
38k
Building Better People: How to give real-time feedback that sticks.
wjessup
359
19k
Put a Button on it: Removing Barriers to Going Fast.
kastner
58
3.4k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
225
22k
Mobile First: as difficult as doing things right
swwweet
221
8.8k
How GitHub Uses GitHub to Build GitHub
holman
472
290k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
41
6.5k
Scaling GitHub
holman
458
140k
Agile that works and the tools we love
rasmusluckow
327
20k
Build your cross-platform service in a week with App Engine
jlugia
228
18k
Keith and Marios Guide to Fast Websites
keithpitt
408
22k
Transcript
Python ͷܕώϯτͰ JSON ͷܕνΣοΫΛ͢Δ mitsuse_t LINE Developer Meetup 47
͓·͑ɺ୭Αʁ 1
͓·͑ɺ୭Αʁ 1
͓·͑ɺ୭Αʁ 1 ɾը૾ͱ͔ࣗવݴޠͱ͔ɺ1ZUIPOͱ͔ɺ ͋Δ͍J04ͱ͔4XJGUͱ͔ͦͷลΓ Λ͝ʹΐ͝ʹΐ ࠷͍ۙͬͯΔ͜ͱ
͓·͑ɺ୭Αʁ 1 ɾը૾ͱ͔ࣗવݴޠͱ͔ɺ1ZUIPOͱ͔ɺ ͋Δ͍J04ͱ͔4XJGUͱ͔ͦͷลΓ Λ͝ʹΐ͝ʹΐ ɾೣͱΒ͍ͯ͠·͢ ɾΧϨʔͱΠεΩʔ͕͖ ɾΠΧͱλίͷήʔϜΛΑ͍ͬͯ͘ ·͢ ࠷͍ۙͬͯΔ͜ͱ
ଐੑͬΆ͍ͭ
1ZUIPOͷܕώϯτΛ ࣮ߦ࣌ʹࢀরͯ͠༡ͿΛ͠·͢
1ZUIPOͷܕώϯτΛ ࣮ߦ࣌ʹࢀরͯ͠༡ͿΛ͠·͢ 2
1ZUIPOͷܕώϯτΛ ࣮ߦ࣌ʹࢀরͯ͠༡ͿΛ͠·͢ 2 ɾΞϊςʔγϣϯͷγϯλοΫεಋೖ͔Βܕώϯτ·Ͱͷ
1ZUIPOͷܕώϯτΛ ࣮ߦ࣌ʹࢀরͯ͠༡ͿΛ͠·͢ 2 ɾΞϊςʔγϣϯͷγϯλοΫεಋೖ͔Βܕώϯτ·Ͱͷ ɾ੩తܕݕࠪπʔϧͰ͋ΔNZQZͷ
1ZUIPOͷܕώϯτΛ ࣮ߦ࣌ʹࢀরͯ͠༡ͿΛ͠·͢ 2 ɾΞϊςʔγϣϯͷγϯλοΫεಋೖ͔Βܕώϯτ·Ͱͷ ɾ੩తܕݕࠪπʔϧͰ͋ΔNZQZͷ ɾܕώϯτΛ࣮ߦ࣌ʹࢀরͯ͠+40/ͷܕΛνΣοΫ͢Δ
ؔ࿈͢Δ1&1NZQZͷ
1&1'VODUJPO"OOPUBUJPOT 3
1&1'VODUJPO"OOPUBUJPOT 3 ɾؔ ͷҾΓ ʹର͠ɺҙͷϝλσʔλΛΞϊςʔτ͢Δ ͨΊͷγϯλοΫεΛಋೖ
1&1'VODUJPO"OOPUBUJPOT 3 ɾؔ ͷҾΓ ʹର͠ɺҙͷϝλσʔλΛΞϊςʔτ͢Δ ͨΊͷγϯλοΫεΛಋೖ ɾ͜Ε·Ͱ༷ʑͳํ๏ͰΞϊςʔγϣϯ͕ࢪ͞Ε͍͕ͯͨɺͦΕΛ౷Ұ ͢ΔͨΊͷ1&1
1&1'VODUJPO"OOPUBUJPOT 3 ɾؔ ͷҾΓ ʹର͠ɺҙͷϝλσʔλΛΞϊςʔτ͢Δ ͨΊͷγϯλοΫεΛಋೖ ɾΞϊςʔγϣϯʹҙͷ͕ࣜ͑Δ ༻్ݶఆͤͣɾ༷ʑͳ༻్ ɾ͜Ε·Ͱ༷ʑͳํ๏ͰΞϊςʔγϣϯ͕ࢪ͞Ε͍͕ͯͨɺͦΕΛ౷Ұ ͢ΔͨΊͷ1&1
1&1'VODUJPO"OOPUBUJPOT 3 ɾؔ ͷҾΓ ʹର͠ɺҙͷϝλσʔλΛΞϊςʔτ͢Δ ͨΊͷγϯλοΫεΛಋೖ ɾΞϊςʔγϣϯʹҙͷ͕ࣜ͑Δ ༻్ݶఆͤͣɾ༷ʑͳ༻్ ɾ࣮ߦ࣌ʹ@@BOOPUBUJPOT@@͔ΒΞϊςʔγϣϯ͕औಘͰ͖Δ ɾ͜Ε·Ͱ༷ʑͳํ๏ͰΞϊςʔγϣϯ͕ࢪ͞Ε͍͕ͯͨɺͦΕΛ౷Ұ
͢ΔͨΊͷ1&1
1&1'VODUJPO"OOPUBUJPOT 4
1&1'VODUJPO"OOPUBUJPOT ҙͷࣜͰྑ͍ͷͰจࣈྻͰՄ 4
1&1'VODUJPO"OOPUBUJPOT ҙͷࣜͰྑ͍ͷͰจࣈྻͰՄ @@BOOPUBUJPOT@@ͰΞϊςʔγϣϯΛࢀরͰ͖Δ 4
1&15ZQF)JOUT 5
1&15ZQF)JOUT ɾ1&1Ͱಋೖ͞ΕͨΞϊςʔγϣϯΛɺܕใͷ༩ͷͨΊʹ ༻͢Δ 5
1&15ZQF)JOUT ɾ1&1Ͱಋೖ͞ΕͨΞϊςʔγϣϯΛɺܕใͷ༩ͷͨΊʹ ༻͢Δ ɾܕΛ༩͢ΔͨΊͷඪ४ϞδϡʔϧUZQJOHͷఏڙɺ֤छఆٛͷඪ ४Խ 5
1&15ZQF)JOUT ɾ1&1Ͱಋೖ͞ΕͨΞϊςʔγϣϯΛɺܕใͷ༩ͷͨΊʹ ༻͢Δ ɾܕΛ༩͢ΔͨΊͷඪ४ϞδϡʔϧUZQJOHͷఏڙɺ֤छఆٛͷඪ ४Խ ɾ੩తܕݕࠪπʔϧͰ͋ΔNZQZ͔Βڧ͘ӨڹΛड͚͍ͯΔ 5
1&15ZQF)JOUT 6
1&15ZQF)JOUT UZQJOHʹ0QUJPOBM4FRVFODFͳͲΞϊςʔγϣϯ༻ͷܕ͕͋Δ 6
1&15ZQF)JOUT UZQJOHʹ0QUJPOBM4FRVFODFͳͲΞϊςʔγϣϯ༻ͷܕ͕͋Δ ܕͰΞϊςʔγϣϯ͢Δ 6
1&15ZQF)JOUT UZQJOHʹ0QUJPOBM4FRVFODFͳͲΞϊςʔγϣϯ༻ͷܕ͕͋Δ ܕͰΞϊςʔγϣϯ͢Δ @@BOOPUBUJPOT@@ͰΞϊςʔγϣϯΛࢀরͰ͖Δ 6
ܕώϯτΛॻ͚ܕνΣοΫ͞ΕΔʁ
ॻ͍͚ͨͩͰɺνΣοΫ͞Εͳ͍ʂ
1&15ZQF)JOUT 7
1&15ZQF)JOUT JOUͷΛ͍ͯ͠Δ 7
1&15ZQF)JOUT JOUͷΛ͍ͯ͠Δ Τϥʔͳ࣮͘ߦ͞ΕΔ 7
1&15ZQF)JOUT JOUͷΛ͍ͯ͠Δ Τϥʔͳ࣮͘ߦ͞ΕΔ ͋͘·ͰΞϊςʔγϣϯ͢ΔͨΊͷಓ۩ͱͦͷղऍ͕Ͳ͏͋Δ͖ ͔ɺΛఏڙ͢Δ ࣮ࡍʹѻ͏ͷ֎෦ͷπʔϧ 7
NZQZ 8
NZQZ 8 ɾ1ZUIPOͷ੩తܕݕࠪπʔϧ
NZQZ ɾ1&1ʹઌߦͯ͠ఏڙ͞Ε͍ͯͨπʔϧ͕ͩɺ1&1४ڌ ɾ1ZUIPOͷ੩తܕݕࠪπʔϧ 8
NZQZܕώϯτͱΈ߹Θͤͯ͏ ɾ1&1ʹઌߦͯ͠ఏڙ͞Ε͍ͯͨπʔϧ͕ͩɺ1&1४ڌ ɾνΣοΫ͢Δ͚ͩ ݪଇ࣮ߦ࣌ʹӨڹΛ༩͑ͳ͍ɺτϥϯεύΠϧ ͢ΔΘ͚Ͱͳ͍ ɾ1ZUIPOͷ੩తܕݕࠪπʔϧ 8
NZQZܕώϯτͱΈ߹Θͤͯ͏ 8
NZQZܕώϯτͱΈ߹Θͤͯ͏ JOUͷΛ͍ͯ͠Δ 8
NZQZܕώϯτͱΈ߹Θͤͯ͏ JOUͷΛ͍ͯ͠Δ *OUͱ0QUJPOBM<TUS>ޓੑ͕ͳ͍ 8
NZQZܕώϯτͱΈ߹Θͤͯ͏ JOUͷΛ͍ͯ͠Δ *OUͱ0QUJPOBM<TUS>ޓੑ͕ͳ͍ ܕ͕Ұக͠ͳ͍߹ɺNZQZ͕Τϥʔͱͯ͠ݕग़ͯ͘͠ΕΔ 8
ܕώϯτΛͬͯ ࣮ߦ࣌ʹ+40/ͷܕνΣοΫΛ͍ͨ͠
ܕώϯτΛͬͯ ࣮ߦ࣌ʹ+40/ͷܕνΣοΫΛ͍ͨ͠ 9
ܕώϯτΛͬͯ ࣮ߦ࣌ʹ+40/ͷܕνΣοΫΛ͍ͨ͠ ੩తܕݕ͕ࠪ͋Δͷʹͪ·ͪ·+40/ͷܕνΣοΫΛͨ͘͠ͳ͍ 9
ܕώϯτΛͬͯ ࣮ߦ࣌ʹ+40/ͷܕνΣοΫΛ͍ͨ͠ ɾ΄΅"OZͳΛɺΑ͘ܕ͚͞ΕͨΦϒδΣΫτʹม͍ͨ͠ ੩తܕݕ͕ࠪ͋Δͷʹͪ·ͪ·+40/ͷܕνΣοΫΛͨ͘͠ͳ͍ 9
ܕώϯτΛͬͯ ࣮ߦ࣌ʹ+40/ͷܕνΣοΫΛ͍ͨ͠ ɾ΄΅"OZͳΛɺΑ͘ܕ͚͞ΕͨΦϒδΣΫτʹม͍ͨ͠ ɾมͯ͠͠·͑ɺޙNZQZͷ੩తܕνΣοΫʹͷͤΒΕΔ ੩తܕݕ͕ࠪ͋Δͷʹͪ·ͪ·+40/ͷܕνΣοΫΛͨ͘͠ͳ͍ 9
ܕώϯτΛͬͯ ࣮ߦ࣌ʹ+40/ͷܕνΣοΫΛ͍ͨ͠ ɾ΄΅"OZͳΛɺΑ͘ܕ͚͞ΕͨΦϒδΣΫτʹม͍ͨ͠ ɾมͯ͠͠·͑ɺޙNZQZͷ੩తܕνΣοΫʹͷͤΒΕΔ ੩తܕݕ͕ࠪ͋Δͷʹͪ·ͪ·+40/ͷܕνΣοΫΛͨ͘͠ͳ͍ ܕώϯτΛ͢ΔલఏͳΒͦͷใΛͬͯνΣοΫͰ͖ͳ͍͔ 9
ܕώϯτΛͬͯ ࣮ߦ࣌ʹ+40/ͷܕνΣοΫΛ͍ͨ͠ ɾܕใ࣮ߦ࣌ʹ@@BOOPUBUJPOT@@ͰऔಘͰ͖Δ ɾ΄΅"OZͳΛɺΑ͘ܕ͚͞ΕͨΦϒδΣΫτʹม͍ͨ͠ ɾมͯ͠͠·͑ɺޙNZQZͷ੩తܕνΣοΫʹͷͤΒΕΔ ੩తܕݕ͕ࠪ͋Δͷʹͪ·ͪ·+40/ͷܕνΣοΫΛͨ͘͠ͳ͍ ܕώϯτΛ͢ΔલఏͳΒͦͷใΛͬͯνΣοΫͰ͖ͳ͍͔ 9
ܕώϯτΛͬͯ ࣮ߦ࣌ʹ+40/ͷܕνΣοΫΛ͍ͨ͠ ɾܕใ࣮ߦ࣌ʹ@@BOOPUBUJPOT@@ͰऔಘͰ͖Δ ɾ΄΅"OZͳΛɺΑ͘ܕ͚͞ΕͨΦϒδΣΫτʹม͍ͨ͠ ɾͳΜ͔Ͱ͖ͦ͏ͳͷͰࢼͯ͠Έͨ ɾมͯ͠͠·͑ɺޙNZQZͷ੩తܕνΣοΫʹͷͤΒΕΔ ੩తܕݕ͕ࠪ͋Δͷʹͪ·ͪ·+40/ͷܕνΣοΫΛͨ͘͠ͳ͍ ܕώϯτΛ͢ΔલఏͳΒͦͷใΛͬͯνΣοΫͰ͖ͳ͍͔ https://github.com/mitsuse/typedjson-python 9
ܕώϯτΛͬͯ ࣮ߦ࣌ʹ+40/ͷܕνΣοΫΛ͢Δ 10
ܕώϯτΛͬͯ ࣮ߦ࣌ʹ+40/ͷܕνΣοΫΛ͢Δ 10
ܕώϯτΛͬͯ ࣮ߦ࣌ʹ+40/ͷܕνΣοΫΛ͢Δ 0QUJPOBM 6OJPO ѻ͑Δ 10
ܕώϯτΛͬͯ ࣮ߦ࣌ʹ+40/ͷܕνΣοΫΛ͢Δ 0QUJPOBM 6OJPO ѻ͑Δ ඞਢͷϓϩύςΟʹର͢Δ/POFΤϥʔ 10
Ͳ͏ͬͯಈ͍͍ͯΔͷ͔ʁ 11
Ͳ͏ͬͯಈ͍͍ͯΔͷ͔ʁ ۪ʹ@@BOOPUBUJPOT@@Λల։ͯ͠ܕνΣοΫ͍ͯ͘͠ 11
Ͳ͏ͬͯಈ͍͍ͯΔͷ͔ʁ ۪ʹ@@BOOPUBUJPOT@@Λల։ͯ͠ܕνΣοΫ͍ͯ͘͠ ɾܕใ࣮ߦ࣌ʹ@@BOOPUBUJPOT@@ͰऔಘͰ͖Δ 11
Ͳ͏ͬͯಈ͍͍ͯΔͷ͔ʁ ۪ʹ@@BOOPUBUJPOT@@Λల։ͯ͠ܕνΣοΫ͍ͯ͘͠ ɾܕใ࣮ߦ࣌ʹ@@BOOPUBUJPOT@@ͰऔಘͰ͖Δ ɾܕύϥϝʔλʔΛ࣋ͭܕ 6OJPO5VQMFͳͲ ʜ 11
Ͳ͏ͬͯಈ͍͍ͯΔͷ͔ʁ ۪ʹ@@BOOPUBUJPOT@@Λల։ͯ͠ܕνΣοΫ͍ͯ͘͠ ɾܕใ࣮ߦ࣌ʹ@@BOOPUBUJPOT@@ͰऔಘͰ͖Δ ɾܕύϥϝʔλʔΛ࣋ͭܕ 6OJPO5VQMFͳͲ ʜ ɾ@@PSJHJO@@Ͱ͍ΘΏΔSBXUZQF͕औಘͰ͖Δ ɾ@@BSHT@@Ͱܕύϥϝʔλʔʹ͞Εͨܕ͕औಘͰ͖Δ 11
Ͳ͏ͬͯಈ͍͍ͯΔͷ͔ʁ 11 ۪ʹ@@BOOPUBUJPOT@@Λల։ͯ͠ܕνΣοΫ͍ͯ͘͠ ɾܕใ࣮ߦ࣌ʹ@@BOOPUBUJPOT@@ͰऔಘͰ͖Δ ɾܕύϥϝʔλʔΛ࣋ͭܕ 6OJPO5VQMFͳͲ ʜ ɾ@@PSJHJO@@Ͱ͍ΘΏΔSBXUZQF͕औಘͰ͖Δ ɾ@@BSHT@@Ͱܕύϥϝʔλʔʹ͞Εͨܕ͕औಘͰ͖Δ EBUBDMBTTͷมJOJU5SVF͕ݱঢ়લఏ
Ͳ͏ͬͯಈ͍͍ͯΔͷ͔ʁ ۪ʹ@@BOOPUBUJPOT@@Λల։ͯ͠ܕνΣοΫ͍ͯ͘͠ ɾܕใ࣮ߦ࣌ʹ@@BOOPUBUJPOT@@ͰऔಘͰ͖Δ ɾܕύϥϝʔλʔΛ࣋ͭܕ 6OJPO5VQMFͳͲ ʜ ɾ@@PSJHJO@@Ͱ͍ΘΏΔSBXUZQF͕औಘͰ͖Δ ɾ@@BSHT@@Ͱܕύϥϝʔλʔʹ͞Εͨܕ͕औಘͰ͖Δ EBUBDMBTTͷมJOJU5SVF͕ݱঢ়લఏ ɾϑΟʔϧυͷܕώϯτ͔ΒετϨʔτʹEBUBDMBTTͷΛੜ͢Δ
ͨΊ 11
Ͳ͏ͬͯಈ͍͍ͯΔͷ͔ʁ ۪ʹ@@BOOPUBUJPOT@@Λల։ͯ͠ܕνΣοΫ͍ͯ͘͠ ɾܕใ࣮ߦ࣌ʹ@@BOOPUBUJPOT@@ͰऔಘͰ͖Δ ɾܕύϥϝʔλʔΛ࣋ͭܕ 6OJPO5VQMFͳͲ ʜ ɾ@@PSJHJO@@Ͱ͍ΘΏΔSBXUZQF͕औಘͰ͖Δ ɾ@@BSHT@@Ͱܕύϥϝʔλʔʹ͞Εͨܕ͕औಘͰ͖Δ EBUBDMBTTͷมJOJU5SVF͕ݱঢ়લఏ ɾϑΟʔϧυͷܕώϯτ͔ΒετϨʔτʹEBUBDMBTTͷΛੜ͢Δ
ͨΊ ྆ऀͱVOEPDVNFOUFE ࠓޙΔ"1*Ͱ͋ΔͱݴΘΕ͍ͯΔ͕ʜ 11
·ͱΊ
·ͱΊ Ξϊςʔγϣϯͱܕώϯτ ɾ1ZUIPOຊମʹύϥϝʔλʔʹର͢ΔΞϊςʔγϣϯΛ༩͢Δγϯ λοΫε͕Ճ͞Ε͍ͯΔ ࣮ߦ࣌ʹܕใΛࢀরͯ͠Կ͕Ͱ͖Δ͔ ɾΞϊςʔγϣϯͷҰͭͷ༻్ͱͯ͠ܕώϯτ͕͋Δ ɾEBUBDMBTTͷܕఆٛΛ༻ͨ͠+40/ͷܕνΣοΫΛ࣮ͯ͠Έͨ ɾΞϊςʔγϣϯɾܕώϯτͷใ࣮ߦ࣌ʹࢀরͰ͖Δ ɾ੍ݶɾVOEPDVNFOUFEͳ"1*ͷ͋Δ͕ಈ͘ʹಈ͘