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
6.3k
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
ファインディLT_ポケモン対戦の定量的分析
fufufukakaka
0
950
1年目の私に伝えたい!テストコードを怖がらなくなるためのヒント/Tips for not being afraid of test code
push_gawa
1
640
ナレッジイネイブリングにAIを活用してみる ゆるSRE勉強会 #9
nealle
0
160
iOSでQRコード生成奮闘記
ktcryomm
2
120
良いコードレビューとは
danimal141
8
4.8k
Ça bouge du côté des animations CSS !
goetter
2
160
Visual StudioのGitHub Copilotでいろいろやってみる
tomokusaba
1
210
Expoによるアプリ開発の現在地とReact Server Componentsが切り開く未来
yukukotani
1
170
15分で学ぶDuckDBの可愛い使い方 DuckDBの最近の更新
notrogue
3
800
CSS Linter による Baseline サポートの仕組み
ryo_manba
1
160
ABEMA iOS 大規模プロジェクトにおける段階的な技術刷新 / ABEMA iOS Technology Upgrade
akkyie
1
230
Unity Android XR入門
sakutama_11
0
180
Featured
See All Featured
KATA
mclloyd
29
14k
Rebuilding a faster, lazier Slack
samanthasiow
80
8.9k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
30
2.2k
Testing 201, or: Great Expectations
jmmastey
42
7.2k
Producing Creativity
orderedlist
PRO
344
40k
Building an army of robots
kneath
303
45k
Facilitating Awesome Meetings
lara
53
6.3k
Being A Developer After 40
akosma
89
590k
It's Worth the Effort
3n
184
28k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
134
33k
How to Ace a Technical Interview
jacobian
276
23k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
7.1k
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*ͷ͋Δ͕ಈ͘ʹಈ͘