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
The state patternの実践 個人開発で培ったpractice集
Search
miyanokomiya
August 20, 2025
Programming
240
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
The state patternの実践 個人開発で培ったpractice集
For: すごくすごい。フロントエンドミートアップ 〜複雑GUI・アーキテクチャ設計を語ろう〜
https://formx.connpass.com/event/364158/
miyanokomiya
August 20, 2025
More Decks by miyanokomiya
See All by miyanokomiya
RealtimeDBルールでの頑張り
miyanokomiya
1
380
Other Decks in Programming
See All in Programming
TAKTでAI駆動開発の品質を設計する
j5ik2o
6
1.1k
AIエージェントの隔離技術の徹底比較
kawayu
0
470
Lemonade + Foundry Toolkit でお手軽アプリ開発
seosoft
1
320
AIで効率化できた業務・日常
ochtum
0
120
依存関係から依存物へ―Dependencyという言葉の歴史をひも解く
j_lee
0
110
ローカルLLMを使ってB2Bサービスを作っていての学び
yaotti
0
160
軽量Java基盤の設計 DIコンテナに頼らない、長期保守と1秒起動の実現 JJUG CCC 2026 Spring
macha64
0
490
Semantic Version 単位で戦略を柔軟に変えて、パッケージアップデートを自動化する
daitasu
0
200
AutonomyとControlのあいだ:Graflowで記述するAIエージェント協調
myui
0
110
Signal Forms: Beyond the Basics @ngBaguette 2026 in Paris
manfredsteyer
PRO
0
230
セキュリティの専門家じゃなくてもできる。「セキュリティ意識」をアップデートして サプライチェーン攻撃への耐性を高めよう。
tk3fftk
5
700
正しくソフトウェアを作る、前提を疑うための認知の視点 / doubt-premise
minodriven
20
6.4k
Featured
See All Featured
Principles of Awesome APIs and How to Build Them.
keavy
128
17k
Designing for Performance
lara
611
70k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
200
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.3k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
210
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
140
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
220
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
23k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
250
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
420
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.2k
Transcript
The state patternの実践 個人開発で培ったpractice集
Intro 1. The state patternとは? 2. Practice 1: State分割中心設計 3.
Practice 2: 共通化 < 並行化 4. Practice 3: 同期的なstate遷移 @robokomy 右みたいなのが年々増えてます Agenda
The state patternとは?
The state patternとは? Refs: https://gameprogrammingpatterns.com/state.html https://refactoring.guru/ja/design-patterns/state The state patternとは? •
デザインパターンの1つ(≠フロントエンド文脈の一般的なstate) • ゲーム開発における定番手法 State · Design Patterns Revisited このLTを届けたい人たち • ユーザー操作が複雑なGUIを実装したことがある人 • 最初は順調だったそのコードが複雑になりすぎて何も分からなくなった人 • 作図・お絵かき的なツールを育てていきたい人
Practice 1: State分割中心設計
Practice 1: State分割中心設計 • 例: ラインを描画する一連の操作 • 制御用の状態は増え続ける • 操作の数だけ状態は積み上がる
• 状態の遷移に基づく分割統治 • 各stateは独立した存在 効果: 処理と状態のスコープが小さくなり見通しが良くなる 複雑GUIを破綻させずにスケールアップするための強力なデザイン
Practice 2: 共通化 < 並行化
Practice 2: 共通化 < 並行化 • 似たstateをコピペ量産することを恐れない ◦ 各stateは独立しているのでシステムの複雑度は高々その state分増えるだけ
◦ そのstateを更新しない限り新たな複雑さはもたらさず、更新したとしても高々その state分 の複雑さに留まる ◦ バグ対応などで修正箇所が多い分の手間は増えるが手間は安い。型補助もあるし AIもあ る • コピペ量産の果てに共通化あり ◦ 早すぎた不適切な共通化はシステムの複雑度を一気に増やす(関連 state数で乗算) ◦ 共通化された部分に手を加える度に新たな複雑さは関連 state数で乗算される ◦ コピペコードの共通化は手間だが AIの得意分野 • Class断固拒否(諸説あり) ◦ Classあるところに継承あり ◦ 継承してちょちょいとフラグと分岐を追加しての最小コードで済ませる誘惑に人類は打ち勝 てない 効果: システムの複雑度が眼前のコード量以上に増えない State更新時の複雑度イメージ
Practice 3: 同期的なstate遷移
Practice 3: 同期的なstate遷移 • ユーザーイベントをハンドリングした結果と して次のstateをreturnする設計 • 同期的な遷移に作り変え ◦ 同期な世界で完結するシンプルコード
◦ 隙間が発生しないスムーズな state遷移とライフサイクル • 非同期なstate遷移は脱出ハッチ的な後付実現可能 • 柔軟さ考慮で最初は非同期を採用したが様々な問題に遭遇 ◦ コードが冗長(影響小) ◦ ユーザーイベントがPromise解決の隙間に落ちて stateのライフサ イクルを逸脱した動作を引き起こす(影響大) • 非同期なstate遷移が必要な場面に全く遭遇せず無活躍 効果: 全体の98%を占める同期的state遷移が非常にシンプルになる
Thanks!