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
mitsuse
December 10, 2018
Programming
4
6.5k
Python の型ヒントで JSON の型チェックをする / Validation for JSON with Type hints in Python
mitsuse
December 10, 2018
Tweet
Share
More Decks by mitsuse
See All by mitsuse
Golang で心を無にしてコードを書く
mitsuse
47
22k
Other Decks in Programming
See All in Programming
A2A プロトコルを試してみる
azukiazusa1
2
1.3k
Hypervel - A Coroutine Framework for Laravel Artisans
albertcht
1
110
C++20 射影変換
faithandbrave
0
560
deno-redisの紹介とJSRパッケージの運用について (toranoana.deno #21)
uki00a
0
180
Discover Metal 4
rei315
2
120
AI時代のソフトウェア開発を考える(2025/07版) / Agentic Software Engineering Findy 2025-07 Edition
twada
PRO
57
16k
AIと”コードの評価関数”を共有する / Share the "code evaluation function" with AI
euglena1215
1
130
XP, Testing and ninja testing
m_seki
3
230
第9回 情シス転職ミートアップ 株式会社IVRy(アイブリー)の紹介
ivry_presentationmaterials
1
260
Select API from Kotlin Coroutine
jmatsu
1
220
dbt民主化とLLMによる開発ブースト ~ AI Readyな分析サイクルを目指して ~
yoshyum
3
620
Webの外へ飛び出せ NativePHPが切り拓くPHPの未来
takuyakatsusa
2
510
Featured
See All Featured
Building a Modern Day E-commerce SEO Strategy
aleyda
42
7.4k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
161
15k
Adopting Sorbet at Scale
ufuk
77
9.4k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.4k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
48
2.9k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
35
2.4k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Agile that works and the tools we love
rasmusluckow
329
21k
Build The Right Thing And Hit Your Dates
maggiecrowley
36
2.8k
Intergalactic Javascript Robots from Outer Space
tanoku
271
27k
For a Future-Friendly Web
brad_frost
179
9.8k
Gamification - CAS2011
davidbonilla
81
5.3k
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*ͷ͋Δ͕ಈ͘ʹಈ͘