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
型のインスタンス化は非常に深く、無限である可能性があります。
Search
Kimita Shoichi
November 25, 2024
Programming
1
1.9k
型のインスタンス化は非常に深く、無限である可能性があります。
TSKaigi Kansai 2024 振り返り勉強会 で話した時のスライドです。
https://toggle.connpass.com/event/337428/
Kimita Shoichi
November 25, 2024
Tweet
Share
More Decks by Kimita Shoichi
See All by Kimita Shoichi
【TSkaigi 2025】これは型破り?型安全? 真実はいつもひとつ!(じゃないかもしれない)TypeScript クイズ〜〜〜〜!!!!!
kimitashoichi
1
360
【YAPC::Hakodate 2024】TypeScriptエンジニアが感じたPerlのここが面白い
kimitashoichi
1
980
【TSkaigi】2024/05/11 当日スライド
kimitashoichi
17
6.5k
Other Decks in Programming
See All in Programming
Context is King? 〜Verifiability時代とコンテキスト設計 / Beyond "Context is King"
rkaga
10
1.5k
Combinatorial Interview Problems with Backtracking Solutions - From Imperative Procedural Programming to Declarative Functional Programming - Part 2
philipschwarz
PRO
0
140
[AI Engineering Summit Tokyo 2025] LLMは計画業務のゲームチェンジャーか? 最適化業務における活⽤の可能性と限界
terryu16
2
270
Flutter On-device AI로 완성하는 오프라인 앱, 박제창 @DevFest INCHEON 2025
itsmedreamwalker
1
190
AtCoder Conference 2025
shindannin
0
920
Cap'n Webについて
yusukebe
0
160
re:Invent 2025 のイケてるサービスを紹介する
maroon1st
0
160
ZJIT: The Ruby 4 JIT Compiler / Ruby Release 30th Anniversary Party
k0kubun
1
310
GoLab2025 Recap
kuro_kurorrr
0
3.4k
AIエージェントの設計で注意するべきポイント6選
har1101
6
3k
これならできる!個人開発のすゝめ
tinykitten
PRO
0
150
The Art of Re-Architecture - Droidcon India 2025
siddroid
0
160
Featured
See All Featured
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
0
420
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
1
340
So, you think you're a good person
axbom
PRO
1
1.9k
HDC tutorial
michielstock
1
310
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
0
110
Darren the Foodie - Storyboard
khoart
PRO
2
2.1k
GraphQLとの向き合い方2022年版
quramy
50
14k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.1k
The Art of Programming - Codeland 2020
erikaheidi
56
14k
How to build a perfect <img>
jonoalderson
1
4.8k
Product Roadmaps are Hard
iamctodd
PRO
55
12k
The agentic SEO stack - context over prompts
schlessera
0
580
Transcript
1 本資料は、トグルホールディングス株式会社に許可なく複製・転載をしないようお願いします。 型のインスタンス化は 非常に深く、無限である 可能性があります。 Type instantiation is excessively deep
and possiblyinfinite.
2 © toggle holdings inc. 君⽥ 祥⼀ 所属 2023/11〜現在 トグルホールディングス株式会社
X @kimi_koma1111 よろしくお願いします!
3 © toggle holdings inc. 型のインスタンス化は非常に深く 無限である可能性があります。 Type instantiation is
excessively deep and possibly infinite.
4 © toggle holdings inc. アジェンダ © toggle holdings inc.
• 弊社の開発環境 • 発生した問題と解決方法 • 今後どのように考えているか • まとめ
5 © toggle holdings inc. 弊社の開発環境
6 © toggle holdings inc. 開発環境 © toggle holdings inc.
フロントエンド バックエンド
7 © toggle holdings inc. 開発環境 © toggle holdings inc.
Monorepo • バックエンドとフロントエンドのそれぞれコードが 1つのリポジトリに まとまっているので変更を追いやすい • 型の共通化をしやすい • フルスタックに開発しやすい
8 © toggle holdings inc. 開発環境 © toggle holdings inc.
こちら
9 © toggle holdings inc. 開発環境 © toggle holdings inc.
こちら
10 © toggle holdings inc. 型の共通化
11 © toggle holdings inc. 開発環境 © toggle holdings inc.
フロントエンド バックエンド zod zodios
12 © toggle holdings inc. Zodとは? © toggle holdings inc.
• TS・JSで利用できるスキーマ定義とバリデーションライブラリ • スキーマを宣言的にコードで定義 • スキーマに基づいて、データのバリデーションを行う • スキーマからの型を自動生成できる 詳しくは こちら
13 © toggle holdings inc. © toggle holdings inc.
14 © toggle holdings inc. © toggle holdings inc.
15 © toggle holdings inc. Zodiosとは? © toggle holdings inc.
• 型安全なAPIクライアントを作成するためのライブラリ • Axiosをベースで Zodスキーマを活用 ◦ イメージは型つきの Axios • リクエストとレスポンスの型を自動的に生成 • API通信時に型チェックが実行される • エンドポイントを宣言的に定義するだけ 詳しくは こちら
16 © toggle holdings inc. © toggle holdings inc.
17 © toggle holdings inc. 発生した問題と解決方法
18 © toggle holdings inc.
19 © toggle holdings inc. エディタで型推論できなくなった
20 © toggle holdings inc. TypeCheckが通らなくなった
21 © toggle holdings inc. 型のインスタンス化は非常に深く 無限である可能性があります。 Type instantiation is
excessively deep and possibly infinite.
22 © toggle holdings inc. なぜ起こったのか?
23 © toggle holdings inc. なぜ起こったのか? © toggle holdings inc.
Zodiosで定義したエンドポイントが多く Zodスキーマを多重に参照しているため 型のネストが深くなりすぎている
24 © toggle holdings inc. なぜ起こったのか? © toggle holdings inc.
• TypeScript のコンパイラが「無限に再帰している」と誤検知 ◦ コンパイラが型を完全に解釈しようとする過程で再帰が終了す る条件を検出できない
25 © toggle holdings inc. なぜ起こったのか? © toggle holdings inc.
無限ループしているように見える状態 深すぎるネストのせいで計算が過剰に複雑化している 実際は
26 © toggle holdings inc. 例えば 例えば
27 © toggle holdings inc. 一見問題がないように見える例 以下の条件が加わるとエラーが発生する可能性 • エンドポイント数が多い •
スキーマが他のスキーマを参照して連鎖的に 深くなる • Zodios の型推論がすべてのエンドポイントを 展開しようとする
28 © toggle holdings inc. ✅ エンドポイント数が多い ➡ 80を超えるエンドポイントをひとまとめに ✅
スキーマが他のスキーマを参照して連鎖的に 深くなる ➡ スキーマ同士の依存関係がめちゃあった ✅ Zodios の型推論がすべてのエンドポイントを 展開しようとする ➡ 多分展開しようとしていた
29 © toggle holdings inc. 解決方法
30 © toggle holdings inc. 分割した
31 © toggle holdings inc. ある程度意味のあるまとまりにして分割 ✅ ネストを浅くしたことにより型推論の範囲が限定 ✅ コンパイラが一度に扱う型の範囲が限定され、
処理負荷が分散
32 © toggle holdings inc. 今後どのように考えているか
33 © toggle holdings inc. 今後どのように考えているか © toggle holdings inc.
• 分割することでエラーは回避できたが、暫定対応にすぎない ◦ 数が多くなったらまた発生するのでは? • Zodios が1年くらいメンテナンスされていない ◦ 移行先を見つける?
34 © toggle holdings inc. Zodios 移行する?
35 © toggle holdings inc. 移⾏先候補 © toggle holdings inc.
• Effect ◦ https://effect.website/ • TS-REST ◦ https://ts-rest.com/ • Hono純正のRPC機能 ◦ https://hono.dev/docs/guides/rpc
36 © toggle holdings inc. Effect © toggle holdings inc.
• 主にエラーハンドリング、リソース管理、並行処理を強力にサポー トするライブラリ • Effectそのものが ZodiosのようなAPIクライアントを作成するライ ブラリではない ◦ ただし、そのような構築は可能
37 © toggle holdings inc. TS-REST © toggle holdings inc.
• TypeScriptを用いて新規および既存の APIに対して段階的に型 安全性を導入するためのライブラリ • Zodiosとほぼ同じような記述方法で APIクライアントとして活用で きる
38 © toggle holdings inc. Hono純正のRPC機能 © toggle holdings inc.
• Zodをそのままに新たにライブラリを追加しなくても利用できる唯 一の移行先候補 • バックエンドで Honoを利用、現段階では最有力候補
39 © toggle holdings inc. TypeScript 5.6では、大きなファイルでもIDEが高速に感じら れるようになります。 TSは、目に見えるコードだけを優先的に表示するようになり ます。
52k行のファイルでは、レスポンスタイムが3秒から140msに なった。 これは、生成されるTSコードが多いプロジェクトでは大きな 違いになるだろう。 🤔🤔🤔🤔 🤔🤔 Our current version is 5.4 ….. :(
40 © toggle holdings inc. まとめ TypeScriptにあまり無理をさせず 計算量が少なく、シンプルになるように 開発者も気をつける
41 本資料は、トグルホールディングス株式会社に許可なく複製・転載をしないようお願いします。 ご清聴 ありがとうございました