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
XStateを用いた堅牢なReact Components設計~複雑なClient State...
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
k-furusho
February 14, 2025
Programming
2.3k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
XStateを用いた堅牢なReact Components設計~複雑なClient Stateをシンプルに~ @React Tokyo ミートアップ #2
k-furusho
February 14, 2025
More Decks by k-furusho
See All by k-furusho
AI時代のLiterate Programming再解釈
kfurusho
0
190
グローバルBtoB SaaSにおける React開発の課題と実践
kfurusho
2
1.6k
Other Decks in Programming
See All in Programming
Datadog × OpenTelemetry 入門と実践のあいだ
kn_to_maxpno
1
180
TSKaigi Night Talks 2026_TypeScriptでサプライチェーンの整合性を型に閉じ込める
geekplus_tech
0
410
脅威をエンジニアリングの糧にして――現場編 / Turning Threats into Engineering Fuel — Field Edition
nrslib
0
300
例外の正しい扱い方 そのエラー try-catchして大丈夫?
jinwatanabe
0
290
Hunting Vulnerabilities in Symfony with LLMs
vinceamstoutz
0
560
Make SRE Operations Easier with Azure SRE Agent
kkamegawa
0
8.4k
フロントエンドとバックエンドで「1文字」を揃えよう
youkidearitai
PRO
0
750
Semantic Version 単位で戦略を柔軟に変えて、パッケージアップデートを自動化する
daitasu
1
310
これからAgentCoreを触る方へトレンドはGatewayです
har1101
2
210
AIで効率化できた業務・日常
ochtum
0
150
なぜ型を書くのか? TSKaigi2026で改めて考える #tskaigi_smarthr
kajitack
0
170
任せる範囲はこう広がった / How the Scope of AI Delegation Has Expanded
nrslib
0
150
Featured
See All Featured
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
260
The SEO Collaboration Effect
kristinabergwall1
1
490
Exploring anti-patterns in Rails
aemeredith
3
430
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
150
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
490
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
570
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.5k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
170
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.5k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.2k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.2k
Transcript
© DressCode Inc . XStateを用いた堅牢な React Components設計 ~複雑なClient Stateをシンプルに~ React
Tokyo Meetup #2 Dress Code株式会社 古庄 和也
• React歴 ◦ 約3年 • 業務 ◦ BtoB SaaS「DRESS CODE」のプロダクト開発
• 経歴 ◦ 2020年 レバレジーズ新卒入社 ◦ 2024年 - Dress Code株式会社 • 趣味 ◦ React / ゴルフ / 競馬 / ポーカー 自己紹介 ふるしょう(@k_furusho_)
© DressCode Inc . 1. XStateとは 2. 複雑なReactComponentsの事例 3. 状態遷移の流れ
4. UIと状態の連携 5. まとめ Agenda
© DressCode Inc . XStateとは
XStateとは • TypeScript/Vanilla JSで使えるState Machine/Chartライブラリ ◦ 有限状態とイベントを用いて状態遷移を厳密に管理 ◦ Backendでも活用可能 ◦
@xstate/reactでは、専用のフックuseMachineを使用 • 推しポイント ◦ DMMF本で提唱されている「Make Illegal States Unrepresetable」の実現容易性 が高く、「有り得る状態の型定義」に加えて状態遷移が明確に定義可能。ガード条 件で不正な状態遷移を防げる • XStateに関するおすすめ資料 ◦ Xstate Stately ◦ Xstate Catalogue ◦ susiyakiさんのJS/TSで堅牢な状態管理を可能にするXStateの解説
実装例:SimpleCounterMachine • 状態の定義 ◦ active状態のみ ◦ INCREMENTとDECREMENTの2つ イベントで状態を管理 • ガード条件
◦ DECREMENTイベントにはガード条 件を設定し、valueが0よりも大きい 場合のみ減算を許可 ◦ valueが負の値になる状態を防ぐ
© DressCode Inc . 複雑な React Componentsの事例
「企業における汎用的なルール策定に必要なフィルタリングの実現」 • 条件設定 ◦ 検索対象(Subject), 演算子(Operator), 値(Object)から構成 ◦ 条件の組み合わせはAND/OR条件で個別に指定可能 ◦
条件毎のグルーピング可能 • 状態のUIへの反映 ◦ ユーザーの入力に応じて、動的にフィルタリング結果を更新 ◦ フィルタリング条件の変更が即時反映されるインタラクションの実現 • 不正な状態の防止 ◦ ex: 検索対象の選択前に演算子を選択, 同一リソースに対する複数操作の同時実行 複雑な機能要件例
© DressCode Inc .
© DressCode Inc . 状態遷移の流れ
© DressCode Inc . Xstateとは
© DressCode Inc . Xstateとは MainStates
© DressCode Inc . Xstateとは MainStates SubStates
© DressCode Inc . UIとClient Stateの連携
具体的なディレクトリ構成例と依存関係
UIと状態の連携フロー Server State Client State
© DressCode Inc . まとめ
• 堅牢なClient Stateの管理が実現できる ◦ 状態遷移が明確に定義され、予期しない状態遷移を防止 • 開発効率の改善 ◦ 状態遷移ロジックをコンポーネントから分離できるため、 テストしやすく際利用
可能なロジックの構築が可能 ◦ StateMachine × LLM テスト生成の相性が良い ◦ 仕様の認識齟齬防止にも繋がる ▪ 可視化したStateMachineをベースにPdMや関係者と仕様を擦り合わせやすい • 拡張性と保守性 ◦ 状態遷移が一元化できるため、追加要求が生じた場合にも品質保証しやすい ◦ ドメインモデリングとの相性も良いため、featruesベースの開発にも相性が良い まとめ
© DressCode Inc . End