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
Passkeys for Java Developers
ynojima
3
880
関数型まつり2025登壇資料「関数プログラミングと再帰」
taisontsukada
2
840
カクヨムAndroidアプリのリブート
numeroanddev
0
430
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
41
28k
「Cursor/Devin全社導入の理想と現実」のその後
saitoryc
0
110
データの民主化を支える、透明性のあるデータ利活用への挑戦 2025-06-25 Database Engineering Meetup#7
y_ken
0
280
AIコーディング道場勉強会#2 君(エンジニア)たちはどう生きるか
misakiotb
1
240
イベントストーミングから始めるドメイン駆動設計
jgeem
4
870
ktr0731/go-mcpでMCPサーバー作ってみた
takak2166
0
170
型付きアクターモデルがもたらす分散シミュレーションの未来
piyo7
0
800
つよそうにふるまい、つよい成果を出すのなら、つよいのかもしれない
irof
1
300
KotlinConf 2025 現地で感じたServer-Side Kotlin
n_takehata
1
220
Featured
See All Featured
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
20
1.3k
Producing Creativity
orderedlist
PRO
346
40k
Code Review Best Practice
trishagee
68
18k
Raft: Consensus for Rubyists
vanstee
140
7k
Embracing the Ebb and Flow
colly
86
4.7k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
53
2.8k
Git: the NoSQL Database
bkeepers
PRO
430
65k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
30
2.1k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
Building an army of robots
kneath
306
45k
How to Ace a Technical Interview
jacobian
277
23k
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*ͷ͋Δ͕ಈ͘ʹಈ͘