Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
TanStack DB ~状態管理の新しい考え方~
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
じょうげん
August 22, 2025
Programming
1.2k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
TanStack DB ~状態管理の新しい考え方~
じょうげん
August 22, 2025
More Decks by じょうげん
See All by じょうげん
値・型・名前空間の「三重定義」で Reactコンポーネントをより柔軟に設計する TypeScript コンパニオンオブジェクト活用術
bmthd
0
100
読みやすいコードとはなにか? 未来の自分とチームへの思いやり
bmthd
0
510
Yamada UIドキュメント v2紹介
bmthd
0
760
コールバックchildrenでロジックの見通しを改善する
bmthd
0
46
Formの複雑さに立ち向かう
bmthd
1
3.5k
Other Decks in Programming
See All in Programming
Agents on Rails - Rails at Scale 2026
irinanazarova
0
140
XHTMLが残したもの
yosuke_furukawa
PRO
2
830
世界の中心で、AI(App Intents)をさけぶ ー App Intents中心設計の実践ガイド
touyou
0
640
XP祭りでしか伝わらないフリップネタ #xpjug
murabayashi
0
150
Webの地図
yosuke_furukawa
PRO
6
4.7k
AWS Step Functions 大規模並列の壁を越える / jaws-sonic-2026-niigata-step-functions
kasacchiful
PRO
1
500
TiDB Cloudのカスタムコントローラーによるオートスケール対応
takaidohigasi
0
130
iOSDC Japan 2026 - Swiftで作って学ぼう!データベース自作入門
kaseken
2
280
速く作れる。その次は、速く確かめられる開発へ 〜AIネイティブ開発を支える、Shift Down〜 / Can build fast. Next, moving to development where we can verify fast.
rkaga
5
3.9k
巨大モノリシックアプリ モダン化大作戦
ktcryomm
1
1.1k
選挙速報を多くのユーザーへ 届ける Live Activities 設計
hamayokokuririn
0
150
Verilogで学ぶCPU自作入門.pdf
uyuki234
1
450
Featured
See All Featured
What's in a price? How to price your products and services
michaelherold
247
13k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
46k
Odyssey Design
rkendrick25
PRO
2
810
Navigating Team Friction
lara
192
16k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
600
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
340
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.5k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.6k
Tell your own story through comics
letsgokoyo
1
1.1k
The Pragmatic Product Professional
lauravandoore
37
7.4k
Transcript
TanStack DB ~ 状態管理の新しい考え方~ じょうげん
TanStack Query - Server State Management TanStack Router - Type-Safe
Routing TanStack Table - Headless Table Building TanStack Form - Headless Form Building TanStack DB - Client-Side Database ← NEW! TanStack ファミリー
フロントエンドに 永続化層(DB) を設けてコンポーネントからクエリする クエリファーストなAPI React だけでなく Vue / Svelte /
Solid など多数のUI フレームワークをサポート TanStack DB とは?
Client Side Querying → データ取得の主導権をフロント側へ 設計思想
export const drawCalcCollection = createCollection( localStorageCollectionOptions({ storageKey: "tcg-tool-draw-calculations", id: "draw-calculations",
getKey: (item) => item.id, schema: drawCalcSchema }), ); Collection という単位でデータの永続化を定義 Zod やValibot などでランタイムバリデーションありの型定義可能 React での使い方の例
const { data } = useLiveQuery((q) => q .from({ calculations:
calculationsCollection }) .where(({ calculations }) => eq(calculations.id, calculationId)), ); Drizzle のようなSQL ライクなセレクター 型安全なクエリビルダー クエリで絞り込まれた箇所のみの部分的なSubscribe を実現
const CalculationItem = ({ calculationId }: { calculationId: string })
=> { const { data } = useLiveQuery((q) => q.from({ calculations: calculationsCollection }) .where(({ calculations }) => eq(calculations.id, calculationId)), ); const firstCalculation = data[0]; if (!firstCalculation) return <FallbackItem />; return ( <Card.Root> <Card.Header> {firstCalculation.name} </Card.Header> <Card.Body> {firstCalculation.result} </Card.Body> </Card.Root> ); } コンポーネントで使う
// 条件をあらかじめ指定 export const drawCalcHistoryCollection = createLiveQueryCollection((q) => q.from({ calculations:
drawCalcCollection }) .orderBy(({ calculations }) => calculations.updatedAt, "desc"), ); // 引数ありの動的なCollection export const createDrawCalcByGameCollection = (gameTemplate: string) => createLiveQueryCollection((q) => q.from({ calculations: drawCalcCollection }) .where(({ calculations }) => eq(calculations.gameTemplate, gameTemplate)) .orderBy(({ calculations }) => calculations.updatedAt, "desc"), ); 派生Collection も可能
TanStack DB 、なにが美味しい?
localStorage インメモリ REST API Electric SQL TrailBase Supabase, IndexedDB, DuckDB
Wasm などもAdapter を用意することで利用可能になる かも 永続化層を 自由に差し替え可能
フロントエンド中心のデータ設計 が可能 RLS (Row Level Security )を組み合わせれば都度問い合わせの必要なし 特定の データベースSaaS の実装に依存せずに済む
バックエンド実装が不要に?
Zustand / Jotai のような状態を → SQL ライクなクエリ + スキーマ に置き換え可能
単なる状態管理にとどまらず、データの保管にも利用できる 認知負荷を大幅に削減 できるかも! 状態管理のベストプラクティスを変える?
Claude Code と一緒に既存のアプリケ ーションをTanStack DB に載せ替えし てみた できたもの https://tcg-tool.pages.dev/ draw-calc-db
ソースコード見たい方向 け https://github.com/bmthd/ tcg-tool/pull/3/files おまけ
「フロントエンド中心のデータ設計」を加速させる存在 全てのServer State の抽象化層になりうる フロントエンドの状態管理だけでなくバックエンド設計にも影響を与える可能性 大 まとめ