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に漸進的に型をつける
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Nealle
October 21, 2025
Programming
220
1
Share
Pythonに漸進的に型をつける
2025/10/22
https://findy.connpass.com/event/371749/
『Pythonの多様性 深掘りLT Night 』〜バックエンドから機械学習まで〜
Nealle
October 21, 2025
More Decks by Nealle
See All by Nealle
クラウドネイティブなエンジニアに向ける Raycastの魅力と実際の活用事例
nealle
2
230
3つのボトルネックを解消し、リリースエンジニアリングを再定義した話
nealle
0
770
JDDUG#15 DataDogで行うバッチ改善
nealle
0
100
「なぜ」を残し、SLOを育てる IaCによるSLI/SLO運用の実践
nealle
0
120
Datadogのログコスト最適化
nealle
0
900
今、アーキテクトとして 品質保証にどう関わるか
nealle
0
250
AI巻き込み型コードレビューのススメ
nealle
2
3k
Startup Tech Night ニーリーのAI活用
nealle
0
130
モビリティSaaSにおけるデータ利活用の発展
nealle
1
1k
Other Decks in Programming
See All in Programming
From Formal Specification to Property Based Test
ohbarye
0
660
Cache-moi si tu peux : patterns et pièges du cache en production - Devoxx France 2026 - Conférence
slecache
0
330
(Re)make Regexp in Ruby: Democratizing internals for the JIT
makenowjust
3
960
【26新卒研修】OpenAPI/Swagger REST API研修
dip_tech
PRO
0
130
Spec Driven Development | AI Summit Vilnius
danielsogl
PRO
1
130
tRPCの概要と少しだけパフォーマンス
misoton665
2
260
How We Benchmarked Quarkus: Patterns and anti-patterns
hollycummins
1
180
Don't Prompt Harder, Structure Better
kitasuke
0
800
PHPer、Cloudflare に引っ越す
suguruooki
1
130
Terraform言語の静的解析 / static analysis of Terraform language
wata727
1
130
Oxlintとeslint-plugin-react-hooks 明日から始められそう?
t6adev
0
310
CDK Deployのための ”反響定位”
watany
5
920
Featured
See All Featured
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
1
530
Exploring anti-patterns in Rails
aemeredith
3
350
Believing is Seeing
oripsolob
1
120
The #1 spot is gone: here's how to win anyway
tamaranovitovic
2
1k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
120
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
900
Agile that works and the tools we love
rasmusluckow
331
21k
How GitHub (no longer) Works
holman
316
150k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
2.9k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
180
From π to Pie charts
rasagy
0
180
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Transcript
2025.10.22 NEALLE Pythonに漸進的に型をつける 1 株式会社ニーリー 野呂 有我 『Pythonの多様性
深りLT Night 』 〜バックエンドから機械学習まで〜
1|自己紹介 2 氏名 所属 経歴 野呂 有我 / Yuga NORO
株式会社ニーリー プラットフォーム本部 アーキテクチャチーム ・大学院時代に友人と楽譜販売サービスを立ち上げ ・その後、SIer企業に参画 ・副業としてニーリーでいくつかの開発に携わる ・フリーランスを経て、ニーリーへ
3 2|プロダクト紹介
Park Direct for Business 法⼈向け⽉極駐⾞場の探し‧契約‧⽀払い‧管理サービス 3|プロダクト紹介
4|プロダクト紹介 5 • 全てのサービスで、バックエンドにPython/Djangoを採用 • DRFを使ってAPIを高速開発! • 少しずつオニオンアーキテクチャに寄せていっている
登壇資料リンクはこちら→
弊社がPythonを使っている理由 5|弊社が Pythonを使っている理由 6 • ところで、今日は 多様性がテーマです • Pythonを使っている会社には、
そういうパターンもあるんだな〜と暖かい目で見ていただけると幸いです • そう、その理由は…
6|弊社が Pythonを使っている理由 7 ベトナムの某社が、安く早く作ってくれたから
7|弊社が Pythonを使っている理由 8 • 市場を把握しきれていないスタートアップにとって、 早く安く作ってくれる 、 というのは非常に大事 •
CTO三宅も、この選択は正しかった と振り返る • とはいえ、ローンチ後の拡張時に設計、実装上の問題が露呈しがち • 特に弊社が苦しんだのは、型ヒントが全くついていなかったこと • というわけで…
8|Pythonに型をつけていく 9 • ひとまず関数から型ヒントを付けていく • Pylanceで静的型チェックを実施 • ただ、型を意識せずに書かれているため、
普通に型ヒントを書いていくだけではケアしきれないケースも出てくる • 例えばこういうやつ↓ Pythonに型を付けていく
9|Pythonに型をつけていく 10 • objは… ◦ dateというプロパティを持っているらしい ◦ dateというプロパティはyearやmonth, dayというプロパティと replaceというメソッドを持っているっぽい
• この関数を使っているところを全部調べて、渡されているインスタンスに ABCを継承させて 回ることもできないでもないが、手間にリターンが見合わない …
10|Pythonに型をつけていく 11 • そこで、Protocol で部分的に構造的部分型を導入する! • 最初から公称型を使ってドメインを表現するようなポリシーの場合には使い所はあまりないが、 漸進的にやる場合にはこの柔軟性が結構ありがたい
11|Pythonに型をつけていく 12 • しかもこのProtocol, デコレータを付与すること で、実行時に型match 可能になる • 構造的部分型を採用していて、
実行時に型matchできる言語、レア! • 実はPythonは強い型を持つ言語…! • プロパティの増減があったり、 プロパティの有無を判定するif文がいっぱいあ るところをこれで置き換えていける ※上のコードはイメージですが、 実際にプロダクトコードで構造的部分型を matchさせているところはあります
12|Pythonの多様性 13 • 動的型付け でスピーディに初期プロダクトを開発 • 構造的部分型 で徐々に舗装 •
その上で抽象を見つけて公称型に切り替える事でドメインロジックを確定させていく • 柔らかく作って堅くしていける! • フェーズに合わせてポリシーを切り替えられる 懐の広い言語、Python
None
15