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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
mitsuse
December 10, 2018
Programming
4
6.8k
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
文字コードの話
qnighy
44
17k
Go Conference mini in Sendai 2026 : Goに新機能を提案し実装されるまでのフロー徹底解説
yamatoya
0
570
What Spring Developers Should Know About Jakarta EE
ivargrimstad
0
440
ポーリング処理廃止によるイベント駆動アーキテクチャへの移行
seitarof
3
1k
RAGでハマりがちな"Excelの罠"を、データの構造化で突破する
harumiweb
9
2.8k
20260313 - Grafana & Friends Taipei #1 - Kubernetes v1.36 的開發雜記:那些困在 Alpha 加護病房太久的 Metrics
tico88612
0
170
CSC307 Lecture 15
javiergs
PRO
0
240
Ruby x Terminal
a_matsuda
7
590
The Ralph Wiggum Loop: First Principles of Autonomous Development
sembayui
0
3.7k
LangChain4jとは一味違うLangChain4j-CDI
kazumura
1
180
モックわからないマン卒業記 ~振る舞いを起点に見直した、フロントエンドテストにおけるモックの使いどころ~
tasukuwatanabe
2
110
メタプログラミングで実現する「コードを仕様にする」仕組み/nikkei-tech-talk43
nikkei_engineer_recruiting
0
180
Featured
See All Featured
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
It's Worth the Effort
3n
188
29k
Designing for humans not robots
tammielis
254
26k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
2.4k
Amusing Abliteration
ianozsvald
0
130
BBQ
matthewcrist
89
10k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.3k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.1k
The SEO Collaboration Effect
kristinabergwall1
0
390
The agentic SEO stack - context over prompts
schlessera
0
690
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
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*ͷ͋Δ͕ಈ͘ʹಈ͘