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 / Start Python Type Hints
Search
Mitsuki Ogasahara
March 10, 2021
Technology
13
4.6k
今から始める型安全 Python / Start Python Type Hints
#stapy
https://speakerdeck.com/yamitzky/mastering-type-safety-in-python-3-dot-9-era
の内容を加筆して削ったものです
Mitsuki Ogasahara
March 10, 2021
Tweet
Share
More Decks by Mitsuki Ogasahara
See All by Mitsuki Ogasahara
Utility-first な CSS-in-JS 〜Tailwind CSS と Chakra UI を添えて〜 / Utility-First CSS-in-JS
yamitzky
5
1.1k
技術が好きで好きで好きでたまらないエンジニアが「取締役」になって思う、マネジメントキャリアパス / My Manager's Path
yamitzky
2
870
Python 3.9 時代の型安全な Pythonの極め方 / Mastering Type Safety in Python 3.9 Era
yamitzky
35
27k
なぜサーバーレスとDockerなのか 〜 インフラ運用を最小化するサービス開発 〜 / Why We Choose Serverless AND Docker
yamitzky
0
3.8k
サーバーレスを活用して少数精鋭で開発するニュースアプリ #devsumi
yamitzky
4
2.7k
ここが辛いよサーバーレス だが私は乗り越えた #builderscon
yamitzky
14
7.5k
会社の開発合宿で Electron-vueで Slackクライアント作ってみた
yamitzky
0
2.5k
GitLabのSlack連携を魔改造して作る開発を楽しくする仕組み
yamitzky
1
2.3k
Dockerfileを素早く書くtips&ライブデモ
yamitzky
2
1.8k
Other Decks in Technology
See All in Technology
OPENLOGI Company Profile
hr01
0
46k
20240516 OpenID TechNight Vol.21 OpenIDファウンデーション・ジャパンの 今後の活動について
oidfj
0
170
TypescriptでのContextualな構造化ロギングと社内全体への導入
leveragestech
3
620
TypeScript の抽象構文木を用いた、数百を超える API の大規模リファクタリング戦略
yanaemon
6
1.3k
B2C、B2B プロダクトマネジメントの違い(および思考の罠) / B2C, B2B PM and reduction fallacy
ykmc09
5
2.5k
エンジニアゼロの組織から内製開発の DX をどう実現したのか / How did we achieve DX in in-house development in an organization with zero engineers?
genkiogasawara
7
3.2k
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
5
38k
スクラムに出会って「できた」を実感できるようになってきた話 / Scrum makes me feel like I can do it
yayoi_dd
2
110
Prisma ORMを2年運用して培ったノウハウを共有する
tockn
19
5.1k
PHP 9 に備えよ - 動的プロパティ、どうすればいぃ?
taisukearase
0
390
20240516 OpenID TechNight Vol.21 「OIDFシェアードシグナルフレームワーク(ID2)を利用してリアルタイムでセキュリティシグナルを共有するための最新情報」
oidfj
0
170
Exadata Database Service on Dedicated Infrastructure(ExaDB-D) UI スクリーン・キャプチャ集
oracle4engineer
PRO
2
1.7k
Featured
See All Featured
Intergalactic Javascript Robots from Outer Space
tanoku
266
26k
The Art of Programming - Codeland 2020
erikaheidi
43
12k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
117
18k
GraphQLとの向き合い方2022年版
quramy
33
13k
StorybookのUI Testing Handbookを読んだ
zakiyama
13
4.7k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
501
140k
[RailsConf 2023] Rails as a piece of cake
palkan
29
4.1k
BBQ
matthewcrist
80
8.8k
What's new in Ruby 2.0
geeforr
338
31k
Git: the NoSQL Database
bkeepers
PRO
423
63k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
155
14k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
275
13k
Transcript
ࠓ͔Β࢝ΊΔܕ҆શ1ZUIPO খּݪΈ͖ͭ!ZBNJU[LZ TUBQZ
Agenda ಋೖ جຊฤܕͷ֓ཁͱجຊจ๏ 1ZUIPOϓϩάϥϜΛܕ҆શʹ͠Α͏ ܕͰ1ZUIPOΛศརʹ͠Α͏
·ͱΊ
2ීஈɺ1ZUIPOͰܕॻ͖·͔͢ʁ 1. ࠓͷඪ ˡʮܕΛ࢝Ί͍ͨʯ ^
1Z$PO+1ͷϕεττʔΫͷ༰Λ ʮ࢝ΊΔʯਓ͚ʹՃචɾमਖ਼ CJUMZQZUZQF 1. ࠓͷ༰
1. ͓લɺ୭Αʁ w খּݪޫو!ZBNJU[LZ w +9௨৴ࣾऔక$%0 w ͖ͳٕज़ 5ZQF4DSJQUɺ1ZUIPO ʙ
αʔόʔϨεɺ(SBQI2-FUDʜ ˞54ϩΰ$$#:.JDSPTPGU
1. JX௨৴ࣾʹ͍ͭͯ ʮࠓى͖͍ͯΔ͜ͱΛ໌Β͔ʹ͢ΔʯใಓతςΫϊϩδʔϕϯνϟʔ 1Z$PO+1 γϧόʔεϙϯαʔ ར༻ٕज़ ٕज़ͱͷؔΘΓ 8&# %#13&44 ʮαʔόʔϨεಛूʯدߘ
ࣄۀ هऀͷ͍ͳ͍௨৴ࣾͱͯ͠ɺUP#ɾUP$ͰχϡʔεࣄۀΛల։
1. JX௨৴ࣾʹ͍ͭͯ "*ϫΫνϯछ༧ଌ "*ۓٸใαʔϏε ʮ'"45"-&35ʯ
Python ͷνʔϜ։ൃ େنͳ Python ϓϩδΣΫτ ෆຬ͕͋Γ·ͤΜ͔ʁ 1. Python ͷෆຬ
1. Python ͷෆຬ
˞ฐࣾϓϩδΣΫτʹ͋Γ·ͨ͠🤦 1. Python ͷෆຬ
1. Python ͷෆຬ
ಈతܕ͖ݴޠͷෆຬ ʮܕʯͰղܾͰ͖·͢💡 1. Python ͷෆຬ
1ZUIPOͷܕͷ֓ཁͱجຊจ๏ جຊฤ 02
ɾਖ਼໊ࣜশʮ5ZQF)JOU ܕώϯτ ʯ ɾ1&1Ͱ1ZUIPO ʙ ͔Βೖ༷ͬͨ ɾత੩తղੳɺϦϑΝΫλϦϯάɺίʔυੜͳͲ ɾ1ZUIPO͕੩తܕ͖ݴޠʹͳͬͨΘ͚Ͱͳ͘ɺ ɹҙɾޙ͚ͷܕγεςϜ 1ZUIPOͷܕͬͯͳΜͩΖ͏
2. ʮܕʯͷ֓ཁ ˞͜ͷεϥΠυͰʮܕʯͱݴٴ͢Δࡍʮܕώϯτʯͷ͜ͱΛݴ͍·͢
2. ʮܕʯͷ֓ཁ ੩తղੳ ϦϑΝΫλϦϯά
1ZUIPOʮ੩తܕ͖ݴޠʯͰͳ͍ 2. ʮܕʯͷ֓ཁ 2͜ͷίʔυ࣮ߦ࣌ΤϥʔʹͳΔʁ🤔 2ܕͷใTUSʁJOUʁ🤔
1ZUIPOʮ੩తܕ͖ݴޠʯͰͳ͍ 2. ʮܕʯͷ֓ཁ "࣮ߦ࣌ʹΤϥʔൃੜ͠ͳ͍🙆 αʔυύʔςΟʔͷπʔϧΛΈ߹Θͤͯ׆༻👍 "UZQF ͷΓͱͯ͠ܕώϯτແؔ
ΤσΟλ ิͳͲ 1ZUIPOͷʮܕʯΛ औΓר͘αʔυύʔςΟʔ 2. ʮܕʯͷ֓ཁ mypy pyright pytype VSCode
PyCharm Vim pydantic FastAPI ੩తղੳ ࣮ߦ࣌ͷόϦσʔγϣϯͳͲ ࢀߟIUUQTHJUIVCDPNUZQFEEKBOHPBXFTPNFQZUIPOUZQJOH
ɾਖ਼໊ࣜʮ5ZQF)JOUʯΛհ ɾ1ZUIPOಈతܕ͖ݴޠͰ͋Γɺܕώ ϯτڧ੍͞Εͳ͍ ɾ1ZUIPOࣗମܕνΣοΫΛߦΘͳ͍ɻ SEQBSUZπʔϧΛΈ߹ΘͤΔ ͜͜·Ͱͷ·ͱΊ 2. ʮܕʯͷ֓ཁ
ม 2. ܕώϯτͷจ๏ม
ܕਪ 2. ܕώϯτͷจ๏ม ˺ ܕνΣοΧʔ͕ਪ͢ΔͷͰɺ ࣮ͦΜͳʹ໘͘͘͞ͳ͍🙆
ؔ 2. ܕώϯτͷจ๏ؔ
Ҿ͚ͩॻ͍ͯ0,🙆 2. ܕώϯτͷจ๏ؔ Γ͚ͩॻ͍ͯ0,🙆
DMBTT 2. ܕώϯτͷจ๏DMBTT ˡϓϩύςΟͷఆٛ ˡϝιουఆٛ ˡมͷܕͱͯ͠ར༻
ϓϩύςΟͷܕ͕Θ͔Βͳ͍ͱ͖ 2. ܕώϯτͷจ๏"OZ ˡϓϩύςΟͷఆٛ ˡϝιουఆٛ
҉తͳ"OZ 2. ܕώϯτͷจ๏"OZ ˡϓϩύςΟͷఆٛ ˡϝιουఆٛ ˺
MJTU EJDU TFU 2. ܕώϯτͷจ๏σʔλߏ
/POF͕ೖΔ͔͠Εͳ͍ม l͵ΔΆzࢭ ˡ/POF͡Όͳ͍͜ͱΛ͔֬ΊΔͱ ҆શʹ͑Δ ˡ/POFͷՄೳੑͷࢦఠ 2. ܕώϯτͷจ๏0QUJPOBM
ɾมɺؔ ɾDMBTT ɾMJTUɺEJDUɺTFU ɾ0QUJPOBM ɾ"OZ ͜͜·Ͱͷ·ͱΊ 2. ܕώϯτجຊฤ·ͱΊ
ʮܕʯॻ͘ͷ໘ͦ͘͞͏ʜ🤔ͱࢥͬͨํ ˠʮυΩϡϝϯτʯͷྫ͔Βิ͠·͢ 2.ʮܕʯͱυΩϡϝϯτ
ʮܕʯͱυΩϡϝϯτ ʮܕώϯτʯʹ҆શˍεϚʔτͳυΩϡϝϯτ
ʮܕʯͱυΩϡϝϯτ 03. ࠓ·Ͱͷϝλσʔλࢦఆɺܕ͔Βߟ͑Δͱෆࣗવ "1*εΩʔϚ ϞσϧͷϓϩύςΟͷظจࣈྻͰ͋ͬͯɺ$IBS'JFMEɺ4USJOHͷΠϯελϯεͰͳ͍
ʮܕʯͱυΩϡϝϯτ ҆શɾεϚʔτͳϝλσʔλͷࢦఆ ˞UZQJOH"OOPUBUFE1&1 1ZUIPO Ͱಋೖ͞ΕͨɺܕώϯτͱίϯϑϦΫτ͠ͳ͍ϝλσʔλࢦఆ ͷํ๏ɻϥΠϒϥϦͷରԠ͕ඞཁͳͷͰɺ؍ଌൣғͩͱ1ZEBOUJD͙Β͍͔͠ରԠ͍ͯ͠ͳ͔ͬͨ ˞
PythonϓϩάϥϜΛܕ҆શʹͯ͠ΈΑ͏ Ԡ༻ฤ 03
ɾ1ZUIPO੩తܕ͖ݴޠͰͳ͍ ɾ1ZUIPOࣗମܕνΣοΫΛ͠ͳ͍ ˠπʔϧͰܕνΣοΫ🚨 1ZUIPOͷܕώϯτͷݪଇ 3. ܕνΣοΫ
ɾQZUIPONZQZ ɾNJDSPTPGUQZSJHIU ɾHPPHMFQZUZQF ɾGBDFCPPLQZSF ܕνΣοΫπʔϧɺ݁ߏ͋Δ 3. ܕνΣοΧʔ ࡞ΒΕ͍ͯΔݴޠɺΤσΟλ࿈ܞɺܕਪͷݡ͞ɺεύϧλʹҧ͍
3. ܕνΣοΧʔͷൺֱ(Ұྫ) NZQZ QZSJHIU ˞ܕώϯτΛશ͘ॻ͔ͳͯ͘ɺܕ҆શΛࠓ͔Β࢝ΊΔ͜ͱ͕Ͱ͖Δ Γͷܕਪ SFUVSO࿙ΕΔͱΤϥʔ
ɾܕώϯτΛॻ͍ͯͳ͍ίʔυ͕ଟ͘ଘࡏ ɾQZSJHIUʹΑΔܕνΣοΫΛ։࢝ ʮ'"45"-&35ʯͰ$*ͷܕνΣοΫΛ࢝Ίͨࣄྫ 3. JX௨৴ࣾͷҰྫ ˠ$*ʹΈࠐΜͰΈͨͱ͜Ζʜ
ˡOPEFڥ͕ඞཁͳͷ͕গ͠σϝϦοτ ˡίϚϯυࣗମ؆୯
3. JX௨৴ࣾͷҰྫ
3. JX௨৴ࣾͷҰྫ QZSJHIUDPOpHKTPO ˠܕͷΤϥʔΛ8BSOJOHѻ͍ʹ $*Λ௨͢
3. JX௨৴ࣾͷҰྫ ˠਐతʹΦϓτΠϯ͍ͯ͘͠
3. ͲΜͳͱ͖ʹܕώϯτॻ͘ʁ ˡDMBTTͷϓϩύςΟॻ͘ ˡMJTUͷॳظͳͲ ܕਪͰ͖ͳ͍ͷॻ͘ ˡҾɾΓॻ͘ ˡมਪ͞ΕΔͷͰ ݪଇॻ͔ͳ͍
ϥΠϒϥϦʹʮܕʯ͕ͳ͍ͱΤϥʔʹͳΔ😱 3. ܕνΣοΫ͋Δ͋Δ ༁lCPUPzʹܕώϯτͳ͍Α ˞ܕώϯτͷͳ͍ϥΠϒϥϦ݁ߏଟ͍
ཁʮ͖͋ΒΊͯແࢹ͢ΔͷखͰ͢Αʯ 3. ܕώϯτͷͳ͍ϥΠϒϥϦ CJUMZQZUZQF
ϥϯλΠϜΛͬͱศརʹ͢Δ Ԡ༻ฤ 04
ࠓ·Ͱɿ੩తͳܕνΣοΫͷ 4. ܕώϯτͱϥϯλΠϜ ࣮ߦ࣌ ϥϯλΠϜ ʹ ܕͷใऔಘͰ͖Δ
ྫ EBUBDMBTT . ඪ४ϥΠϒϥϦͷ׆༻ྫ !EBUBDMBTTσίϨʔλʔΛ͔ͭ͏ͱ ࣮ߦ࣌ʹ@@JOJU@@ΛࣗಈͰఆٛͯ͘͠ΕΔ
˺EBUBDMBTTʴόϦσʔγϣϯʴγϦΞϥΠζ ྫ QZEBOUJD . ϥϯλΠϜόϦσʔγϣϯ
ྫ 'BTU"1* . API ͷόϦσʔγϣϯ ܕώϯτ͖ͷؔΛఆ͍͚ٛͯͩ͘͠Ͱɺ όϦσʔγϣϯ͖ͭͷ"1*͕Ͱ͖Δ
ܕώϯτ͔Β4XBHHFS 0QFO"1* ࣗಈੜ . FastAPI ˞ଞݴޠͰΘΕΔ"1*༷ɻ"1*ͷܕ͕ఆٛͰ͖Δ
ʮܕώϯτॻ͘ͷ໘͍͘͞🤔ʯ ʮܕώϯτΛॻ͘ͱศར💡ʯ
ɾσίϨʔλʔɺϝλΫϥεͱΈ߹ΘͤΔͱ%3:ʹ ɾܕͷಈతνΣοΫɺ"1*ͷόϦσʔγϣϯɺ4XBHHFS ఆٛͳͲͰ͖Δ ϥϯλΠϜͰͷܕώϯτΛհ . ·ͱΊ
·ͱΊ 05
ܕώϯτΛॻ͘ͱ/POF ܕͷϛεΛνΣοΫͰ͖Δ ·ͱΊ
ܕώϯτϝλσʔλͷ ҆શɾεϚʔτͳॻ͖ํ . ·ͱΊ
ʮܕʯΛॻ͚ͩ͘ͰϥϯλΠϜ͕ศརʹ . ·ͱΊ
NZQZQZSJHIUͰܕνΣοΫ ਪ͞ΕΔʹॻ͔ͳͯ࢝͘ΊΒΕΔ ·ͱΊ ddddddddddddd
ܕώϯτɺ ࢝Ίͨ͘ͳΓ·ͨ͠Ͷʁʁʁʁʁ
Thank you! +9௨৴ࣾͰ ɾܕΛॻ͖͍ͨ1ZUIPOJTUB ɾ.-ΛαʔϏε׆༻͍ͨ͠ΤϯδχΞ Λੵۃ࠾༻͍ͯ͠·͢